MPVolumeView wird in iOS 7 nicht korrekt neu gezeichnet

8

Ich habe also eine iOS7-App, die ich mit MPVolumeView verwende, damit der Benutzer die Lautstärke steuern kann. Ich habe den Routenknopf in diesem speziellen MPVolumeView versteckt und benutze einen anderen MPVolumeView mit deaktiviertem Schieberegler als AirPlay-Symbol.

Meine App unterstützt sowohl die Hochformat- als auch die Querformatausrichtung, und der Lautstärkeregler hat in diesen beiden Modi eine unterschiedliche Breite.

Wenn die Ansicht zuerst im Landscape-Modus initialisiert wird, passt sich die MPVolumeView korrekt an.

Wenn die Ansicht jedoch im Hochformat-Modus initialisiert wird und ich dann in den Querformat-Modus rotiere, wird ALLES in der App in der Größe verändert / verschoben, außer dass MPVolumeView nur verschoben wird und nicht kürzer wird.

Ich verwende benutzerdefinierte Bilder in MPVolumeView , und wenn ich die benutzerdefinierten Bilder für die Spur lösche, verschwindet dieses Problem.

Hier ist der Code, der zum Initialisieren des MPVolumeView

verwendet wird %Vor%

Und in layoutSubviews positioniere / skaliere ich den Frame:

%Vor%

So sieht es aus, wenn die Ansicht im Hochformat beginnt: (Gesamtbreite von 640 Pixeln)

Und wenn es in Landscape gedreht wird, sieht es folgendermaßen aus: (Gesamtbreite von 568 Pixeln)

Hat jemand Ideen?

    
jrwagz 07.10.2013, 06:28
quelle

4 Antworten

4

Ich habe das gleiche Problem. Meine aktuelle Problemumgehung besteht darin, den Schieberegler nach einer Bildschirmdrehung zu zerstören und neu hinzuzufügen:

%Vor%

Dabei gibt es immer noch das Problem, dass der Schieberegler WÄHREND der Drehung weiterhin mit Störimpulsen angezeigt wird. Deshalb rendere ich den Schieberegler auf ein Bild und vertausche den Schieberegler mit dem Bild, bevor eine Drehung stattfindet:

%Vor%

Ich weiß, dass dies keine echte Lösung ist, aber ich denke, es ist besser als nichts und ich hoffe, es hilft dir.

    
Daniel S 19.10.2013, 12:04
quelle
2

Nach vielen Experimenten scheint MPVolumeView in iOS 7.0.x sehr fehlerhaft zu sein.

Ich hatte ein Problem, bei dem benutzerdefinierte Bilder für Min / Max-Schieberegler, Lautstärkedaumen und Route manchmal dazu führten, dass sich der Schieberegler über die Schaltfläche für die Route ausdehnt.

Wenn ich die Reihenfolge änderte, in der diese aufgerufen wurden, wurde das Problem behoben. Der Trick besteht darin, setVolumeThumbImage und setRouteButtonImage zuerst aufzurufen, dann setMinimumVolumeSliderImage und setMaximumVolumeSliderImage.

Das hat den überlappenden Track über den Routenknopf erledigt.

JEDOCH verursachte dies ein neues Problem, bei dem das maximumSliderImage begann, das volumeThumbImage! zu überlappen!

Die letzte Lösung war, die Thumb-Schicht wie folgt in eine Unterklasse von MPVolumeView zu bringen:

%Vor%     
igz 31.01.2014 23:54
quelle
1

Ich habe eine andere Lösung getestet, die gut funktioniert. Ich bette das MPVolumeView in ein einfaches UIView ein (das im Storyboard erstellt werden kann). Dann mache ich Schlüssel-Wert-Beobachtung auf die Eigenschaft "Grenzen" der UIView . Wenn sich diese Eigenschaft ändert, aktualisiere ich den Rahmen von MPVolumeView auf die neuen Grenzen von UIView .

Diese Lösung behandelt sowohl Autorotation als auch automatische Layouts.

%Vor%     
Edouard 04.04.2015 17:19
quelle
-2
%Vor%     
acarlstein 01.06.2015 23:59
quelle

Tags und Links