2014-11-15 16 views
35

Mam jedno UIView, które nie korzysta z automatycznego układu, a niektóre komponenty są wyświetlane w oparciu o ich procent współrzędnych X i Y z głównego widoku.iOS: Jak uruchomić funkcję po obróceniu urządzenia (Swift)

Poprzednio uruchamiałbym funkcję aktualizowania ich pozycji w usłudze didRotateFromInterfaceOrientation, ale widzę, że jest ona teraz przestarzała w iOS8.

Zerknąłem na viewWillTransitionToSize, ale daje to dziwne wyniki i nie wygląda na to, że funkcja viewDidtransitionToSize.

Czy istnieje łatwy sposób (w Swift), aby uruchomić funkcję po obrocie urządzenia?

+0

Patrz link do obiektywnej C i SWIFT: http: //www.scriptscoop. net/t/b06ad3ba166a/ios-rotation-methods-deprecated-equivalent-of-didrotatefrominterfaceorient.html –

Odpowiedz

93

Metoda delegatów zostaje wywołana z obiektem zgodnym z UIViewControllerTransitionCoordinator. Metoda deklarowana przez protokół to animateAlongsideTransition(_:animation, completion:). Możesz go użyć do wykonania kodu po zakończeniu przejścia.

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
    coordinator.animateAlongsideTransition(nil, completion: { 
     _ in 

     // Your code here 
    }) 
} 
+2

Widzę, dlaczego nazywają cię As! Dzięki bro, działa świetnie. – Richard

+0

Ty, mój dobry człowieku, jesteś geniuszem! – Yoko

+0

Czy nie powinno się wywoływać "super.viewWillTransitionToSize:"? – Behdad

15

powyższa odpowiedź https://stackoverflow.com/a/26944087/6583492 ma absolutną rację, dzięki Acey i Moonwalkr. Ale dla szybkiego 3,0 to będzie wyglądał następująco

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransition(to: size, with: coordinator) 
    coordinator.animate(alongsideTransition: nil) { _ in 
     // Your code here 
    } 
} 
+0

Dobrze, musisz usunąć; w linii 5 – Ruben

+0

Dzięki 0 :-) stare nawyki ... – daxh

3

chociaż nie poprosił o wersji C tutaj Cel:

- (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"); 
    } 
}]; 
} 
Powiązane problemy