2016-03-29 15 views
0

Ich habe alle meine Untersichten in einem UiViewController programmgesteuert erstellt. Wenn das Gerät dreht i das gesamte Layout des Uiviewcontroller neu erstellen möchten, so dass ich die unten Linie innerhalb des viewDidLoad schreiben()Redraw Subviews programmgesteuert auf Orientierungsänderung

NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil) 

Das Problem ist, dass das Verfahren gedreht wird mehrmals aufgerufen.

Warum das passiert?

Auch was ist die geeignete Methode, das gesamte Layout des UiViewController programmgesteuert neu zu erstellen?

+0

wo haben Sie/notification observer viewDidload oder Viewwillapprar hinzugefügt/registrieren? Wenn Sie in viewwillappear oder viewdidappear hinzugefügt haben, dann müssen Sie die gleichen auf viewwilldisappear entfernen oder viewdidDisappear –

+0

in viewDidload() –

+0

ich habe das getan .. –

Antwort

0

Aus der Dokumentation:

Wenn eine Rotation für einen sichtbaren View-Controller auftritt, die willRotateToInterfaceOrientation: Dauer :, willAnimateRotationToInterfaceOrientation: Dauer :, und didRotateFromInterfaceOrientation: Methoden werden während der Rotation genannt. Die viewWillLayoutSubviews-Methode wird auch aufgerufen, nachdem die Größe der Ansicht geändert und sie von ihrem übergeordneten Element positioniert wurde. Wenn ein View-Controller bei einer Orientierungsänderung nicht sichtbar ist, werden die Rotationsmethoden nie aufgerufen. Die viewWillLayoutSubviews-Methode wird jedoch aufgerufen, wenn die Ansicht sichtbar wird. Ihre Implementierung dieser Methode kann die statusBarOrientation-Methode aufrufen, um die Geräteausrichtung zu ermitteln.

Tun Sie es in der Methode "didRotateFromInterfaceOrientation:".