Ich habe eine UIView, die kein automatisches Layout verwendet, und einige Komponenten werden basierend auf ihrem Prozentsatz der X- und Y-Koordinaten in der Hauptansicht angezeigt.
Früher hätte ich eine Funktion ausgeführt, um ihre Positionen in didRotateFromInterfaceOrientation zu aktualisieren, aber ich sehe, dass dies jetzt in iOS8 veraltet ist.
Ich habe mir viewWillTransitionToSize angesehen, aber es liefert seltsame Ergebnisse, und es scheint keine viewDidtransitionToSize-Funktion zu geben.
Gibt es eine einfache Möglichkeit (in Swift), eine Funktion nach einer Gerätedrehung auszuführen?
super.viewWillTransitionToSize:
zuerst angerufen werden?Die obige Antwort https://stackoverflow.com/a/26944087/6583492 ist dank Acey und Moonwalkr absolut richtig. Aber für Swift 3.0 sieht es wie folgt aus
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { _ in // Your code here } }
quelle
Obwohl hier nicht gefragt Ziel C-Version:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { // change any properties on your views } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; if( UIDeviceOrientationIsPortrait(orientation) ) { NSLog(@"portrait"); } else { NSLog(@"landscape"); } }]; }
quelle