Ausblenden Grau Lautstärke-overlay bei Verwendung MPVolumeView?
Habe ich wieder ein MPVolumeView über einen Film, den ich Spiele. Das Problem ist, wenn ich passen Sie die vol über die MPVolumeView, dann das standard-Grau Lautstärke-overlay angezeigt (der, der erscheint, wenn Sie die Wippe auf dem iPhone). Gibt es eine Möglichkeit zum deaktivieren der standard-Grau-overlay?
- Hast du dafür eine Lösung ? Leider myyellOw die Antwort nicht für mich arbeiten.
- Ich denke, dass ich gewonnen habe, einen Einblick in einen mehr wiederholbare Lösung. Werfen Sie einen Blick auf meine Antwort unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vielleicht ein bisschen spät, aber ich glaube, ich habe etwas nützliches hinzufügen. Wenn Sie gerade auf der Suche nach einer Antwort, überspringen Sie Wie habe ich es beheben?
Was ist
MPVolumeView
?Die
MPVolumeView
- Klasse wird um einen Schieberegler auf dem Bildschirm steuert die Lautstärke des Systems. Es soll verhindern, dass die system-Lautstärke-overlay angezeigt wird, während es auf dem Bildschirm, manchmal aber auch nicht. Ich lief in dieses Problem, als ich noch meine eigenen MPVolumeView in die view-Hierarchie, aber immer noch sah das overlay angezeigt werden, wenn ich zerrte Sie den Schieberegler.Wie funktioniert
MPVolumeView
sagen, wenn es sichtbar ist?Dies ist die Frage, fragte ich mich. Irgendwie ist die Klasse erkennt, ob oder nicht es ist sichtbar, und weist das system an ein-oder ausblenden der " system volume overlay entsprechend. Dies ist, da Apple nicht wirklich wollen, dass Sie mit der Klasse, nur um zu verhindern, dass das overlay angezeigt wird, ohne tatsächlich die Anzeige der slider-Benutzeroberfläche für den Benutzer (wie in myell0w Antwort).
Hier ist, wie ich glaube
MPVolumeView
versucht, zu überprüfen, ob es wirklich sichtbar:viewWillMoveToSuperview:
undviewDidMoveToSuperview
startet er einen kurzen timer.superview
Eigenschaft.MPVolumewView
überprüft, dass jeder seiner Vorfahren hathidden = NO
undalpha
größer als ein kleiner Wert (wahrscheinlich 0.05).Könnte es andere Prüfungen, die ich bin mir nicht bewusst, da dieser code ist natürlich closed-source. Der timer in Schritt 1 ist es so, dass code wie der folgende nicht "Narren" die Ansicht:
weil es zuerst die
hidden
Eigenschaft nicht sofort, aber in ein bisschen, nachdem es bereits zuYES
.Wie habe ich das Bild all das aus? Einen Schlüssel zu finden war, dass die Instanz von
MPVolumeView
Berufung warisHidden
auf seine superview, wie in der folgenden stack trace:Was war mein problem?
Kurz gesagt, ich habe so etwas wie dieses:
Aber wenn ich gezogen, der Schieber in der neu offenbarte
MPVolumeView
das overlay noch erschien. Ich erkannte, dass dies war, weil während derMPVolumeView
's Instanziierung, seine superview versteckt war.Wie habe ich es beheben?
Einmal hatte ich gemerkt, wie die
MPVolumeView
Klasse beurteilt, ob es sichtbar war, hatte ich eine einfache Art und Weise zu "täuschen" können. Ich fügte hinzu, die folgende Methode der Klasse verantwortlich für dieMPVolumeView
:und nannte es jedes mal, ich brauche Kraft, die Ansicht zu überdenken, ob es sichtbar war. Diese Methode, die einfach vorgibt, erneut fügen Sie hinzu, den Blick auf die Hierarchie. Habe ich einmal zufrieden, dass die Bedingungen, die die anzeigen auswertet (jeden Vorfahren ist nicht versteckt oder sehr niedrige alpha), ich nenne es, und die overlay-Stationen angezeigt. In meinem Beispiel-code oben, würde ich hinzufügen, eine Zeile:
Normalerweise, wenn ein MPVolumeView sichtbar ist der HUD nicht angezeigt. Ich bin mit der folgenden Methode in meine App und es funktioniert Prima:
Es im Grunde fügt nur ein volume anzuzeigen, um das erste Fenster, an einer Stelle, wo niemand Sie sehen kann und so verhindert, dass das system-volume HUD angezeigt werden. Ich Frage mich, warum Sie dies sehen, HUD, auch wenn Sie ein volume-Ansicht über den Film.
Dies kann helfen.
Einfachste Weg, dies zu tun.....
genommen refrence aus diesem thread applicationMusicPlayer volume Benachrichtigung