UIPopOver und Ausrichtung ändern
In meiner app habe ich 3 UIPopOvers. Sie werden angezeigt, wenn Benutzer auf die Schaltflächen in der Symbolleiste. Ich brauche, um die popovers angezeigt, an der richtigen Stelle, wenn der Benutzer dreht sich das iPad wenn das popover bereits geöffnet ist, (wie die -willAnimateRotationToInterfaceOrientation:).
Wie kann ich es tun?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
In iOS 7.0 und später, es getan werden kann durch die Umsetzung folgender Methode erhältlich in UIPopoverControllerDelegate:
(void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView **)view
Für popovers, die vorgestellt wurden mit der presentPopoverFromRect Methode, den popover-controller ruft diese Methode auf, wenn die interface-Orientierung ändert.
CGRect frame = self.myView.frame; *rect = frame;
drawRect
nicht aufgerufen wird, wieder auf einen Blick in meine popover. Super Antwort, sollte das akzeptiert man!!!willRepositionPopoverToRect
für mich funktioniert. Danke!Die einzige Lösung, die ich bisher gefunden habe, ist nur die Schließung der popover, wenn das Gerät gedreht wird/
Hier ist ein code-fragment aus einem meiner Projekte. Grundsätzlich, wenn das popover angezeigt wird, stellen Sie das popover wieder in der Methode
didRotateFromInterfaceOrientation:
, die an den view-controller nach die Benutzeroberfläche rotation stattgefunden hat. (DiewillRotate...
undwillAnimateRotation...
Methoden aufgerufen werden vor die Drehung stattgefunden hat, so ist es der falsche Ort für diepresentPopover...
Methode aufrufen.)In der oben
self.myPopoverController
ist eine Eigenschaft, die meiner Ansicht-controller, wo ich speichern eines Verweises auf die popover, wenn es erstellt wird. Wenn ich entlassen und verwerfen Sie das popover unter normalen Umständen, die ich kümmern zu setzen Sie diese Eigenschaft aufnil
, so kann ich dies auch für " nicht-nil
'ness, um zu entscheiden, ob oder nicht das popover angezeigt wird.Beachten Sie jedoch, dass Sie nicht brauchen, schließen Sie das popover vor der rotation erfolgt. Genau die gleiche popover wieder. (Dies ist, wo halten eine Referenz auf das popover kommt in handliches.)
In Ihrem Fall, wo der popover, geht aus einer Symbolleisten-Schaltfläche verwenden, würden Sie etwas wie das folgende statt:
Wenn Sie verwenden Sie einfach die presentPopoverFromBarButtonItem Methode, um Ihre popover dann das popover automatisch verschieben in die richtige position für die neue Schaltfläche position, wenn das Gerät gedreht wird.
Rufen Sie presentPopoverFromBarButtonItem oder FromRect? Machen Sie keine änderungen an den BarButtonItem auf drehen?
Apple-Dokumentation konkret heißt, Sie brauchen, um zu verwalten position auf rotation für FromRect oder ändern Sie die bar-Taste Element. Siehe den vierten Absatz in http://developer.apple.com/library/ios/#documentation/uikit/reference/UIPopoverController_class/Reference/Reference.html
Ich habe laufen in das gleiche Problem ein paar mal. Ich in der Regel einfach eine Methode, um zu zeigen, das popover zentriert wie diese:
Dann auf didRotate ich tun:
Diese popover in der Mitte zur Orientierung.
Beginn des der änderung der Orientierung schließen Sie das popover, und nach dem ändern der Ausrichtung abgeschlossen ist, es wieder, und es ändert seine position auf dem Bildschirm:
Durchführung popover-Funktion:
Abberufung vorgestellt popover auf Orientierung ändern:
Präsentiert popover wieder:
Sollten Sie verwenden UIPopoverPresentationControllerDelegate Methode:
und aktualisieren Sie die rect-Wert.
Siehe @Hugo Alonso Antwort hier