2015-08-06 15 views

risposta

28

Come di iOS 8, tutti UIViewControllers ereditano il protocollo UIContentContainer, di cui uno dei metodi è - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator, che si può (semplicisticamente) Azionamento in questo modo:

- (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. 

    }]; 
} 

Noterai che non c'è nulla di specifico nell'orientamento, che è di progettazione; Le rotazioni della vista iOS sono essenzialmente una composizione di un'operazione di matrice di traduzione specifica (il ridimensionamento di una vista da una proporzione all'altra è solo un caso specifico di un'operazione di ridimensionamento generale in cui le dimensioni della vista di origine e di destinazione sono note in anticipo) e un'operazione della matrice di rotazione (che è gestito dal sistema operativo).

+0

Questo è quello che stavo cercando. Grazie! – Brandon

+0

Soluzione perfetta..Cool !!! – HPM

2

Si può sempre iscriversi al UIDeviceOrientationDidChangeNotification

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

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


    ... 
+0

Grazie per la risposta, Mike. Funziona anche, ma preferisco aderire ai protocolli sull'uso delle notifiche. – Brandon

3

Swift versione 3 della risposta di fullofsquirrels:

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. 
     }) 
}