2015-08-06 12 views

Odpowiedz

28

Jako iOS 8, wszystkie UIViewControllers dziedziczyć protokół UIContentContainer, którego jednym z metod jest - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator, które można (w uproszczeniu) przesłanianie tak:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 

     // Stuff you used to do in willRotateToInterfaceOrientation would go here. 
     // If you don't need anything special, you can set this block to nil. 

    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 

     // Stuff you used to do in didRotateFromInterfaceOrientation would go here. 
     // If not needed, set to nil. 

    }]; 
} 

Zauważysz, że nie ma nic szczególnego w orientacji, która wynika z projektu; Obracanie widoków w systemie iOS jest zasadniczo kompozycją określonej operacji macierzy translacji (zmiana rozmiaru widoku z jednego formatu na inny to tylko szczególny przypadek ogólnej operacji zmiany rozmiaru, z której znane są wcześniej rozmiary widoku źródłowego i docelowego) oraz operacja macierzy obrotu (który jest obsługiwany przez system operacyjny).

+0

Tego właśnie szukałem. Dzięki! – Brandon

+0

Idealne rozwiązanie ... Plaster !!! – HPM

2

Zawsze możesz zgłosić się do UIDeviceOrientationDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(didRotate:) 
               name:UIDeviceOrientationDidChangeNotification object:nil]; 

- (void) didRotate:(id)sender 
{ 
    UIInterfaceOrientation io = [[UIApplication sharedApplication] statusBarOrientation]; 


    ... 
+0

Dzięki za odpowiedź, Mike. To działa również, ale wolę przestrzeganie protokołów dotyczących używania powiadomień. – Brandon

3

Swift 3 wersja odpowiedzi fullofsquirrels męska:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animate(alongsideTransition: { context in 
      context.viewController(forKey: UITransitionContextViewControllerKey.from) 
      // Stuff you used to do in willRotateToInterfaceOrientation would go here. 
      // If you don't need anything special, you can set this block to nil. 
     }, completion: { context in 
      // Stuff you used to do in didRotateFromInterfaceOrientation would go here. 
      // If not needed, set to nil. 
     }) 
} 
Powiązane problemy