2010-11-29 13 views
12

Gibt es hier eine Möglichkeit, eine Methode zu starten, wenn sich die iOS-Geräteausrichtung ändert?Methode ausgelöst durch Orientierungsänderung

Ich möchte nur einige Objekte Ausrichtungen auf dem Bildschirm ändern, und nicht andere.

Was Delegierten verwende ich usw.

Prost -A Neuling

Antwort

32

Hängt, wenn Sie reagieren wollen:

Wenn vor der Rotation, Überschreibung von UIViewController:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
// do something before rotation 
} 

Wenn Sie etwas nach der Drehung ausführen möchten:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
// do something after rotation 
} 

Referenz:

http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/willRotateToInterfaceOrientation:duration:

+3

Diese Methoden sind veraltet. –

+1

Veraltet in iOS 8.0 – onmyway133

0

willRotateToInterfaceOrientation: ist die Methode, die Sie möglicherweise bei suchen. Lesen Sie dazu.

0

UIViewController s werden willRotateToInterfaceOrientation:duration: kurz vor der Drehung und didRotateFromInterfaceOrientation: nach der Drehung gesendet.

zusätzliche Animationen zu konfigurieren, verwenden entweder willAnimateRotationToInterfaceOrientation:duration: oder willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:, didAnimateFirstHalfOfRotationToInterfaceOrientation: und willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:. Letztere werden für zweistufige Animationen verwendet, die Sie normalerweise verwenden, wenn Sie Kopf- oder Fußzeilenansichten haben, die für die Hauptübergangsanimation außerhalb des Bildschirms verschoben werden.

6

Beiträge UIDeviceOrientationDidChangeNotification

UIApplication Beiträge UIApplicationWillChangeStatusBarOrientationNotification und UIApplicationDidChangeStatusBarOrientationNotification und haben einen damit verbundenen Rückruf Delegierten für jeden.

UIViewController empfängt mehrere Orientierung bezogene Anrufe durch die UIDevice Benachrichtigung ausgelöst, wenn die View-Controller-Teil der Steuerung Hierarchie durch ein Fenster verwaltet wird.

Wenn Sie bereits einen UIViewController verwenden, implementieren Sie einige der orientierungsbezogenen Methoden, andernfalls registrieren Sie sich für die UIDevice-Benachrichtigungen. Die wichtigste UIViewController-Methode ist shouldAutorotateToInterfaceOrientation, denn wenn diese NO zurückgeben, werden die anderen nicht aufgerufen.

+0

Ich möchte mich lieber als Beobachter registrieren, um die Orientierungsbenachrichtigungen zu erhalten. Also stimme ich diese Antwort ab. – AechoLiu

0

Mein Sandbox-App: https://github.com/comonitos/programatical_device_orientation

Die Lösung ist einfach:

in Schnittstelle (h-Datei):

BOOL rotated; 

in Umsetzung (m-Datei):

  1. umschreiben

    - (BOOL) sollteAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { zurück gedreht; }

2 Aufruf [self-Setup]

-(void) setup 
{ 
    rotated = YES; 
    [[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeLeft]; 
    rotated = NO; 
} 
+0

Sie sollten nicht viel mehr tun, als dem Betriebssystem mitzuteilen, ob Sie eine Orientierungsänderung in der Methode 'shouldAutorotateToInterfaceOrientation' unterstützen. Außerdem ist dies in iOS6 veraltet. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADreprecedAPI.html#//apple_ref/occ/instm/UIViewController/shouldAutorotateToInterfaceOrientation: – mahboudz

+0

yep. jetzt ist es. Von dieser Zeit verwandle ich Ansichten – comonitos

0

einfach diesen Code-Snippet verwenden, um die Orientierungsänderungen zu überprüfen.

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    if UIDevice.currentDevice().orientation.isLandscape.boolValue { 
     print("Landscape") 
    } else { 
     print("Portrait") 
    } 
} 
Verwandte Themen