Sto cercando di trovare una chiamata al metodo su cui posso aggancio dopo che l'orientamento di un dispositivo è cambiato. C'è qualcosa di identico a fattoRotateFromInterfaceOrientation che non è deprecato?Esiste un metodo non obsoleto corrispondente a didRotateFromInterfaceOrientation
risposta
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).
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];
...
Grazie per la risposta, Mike. Funziona anche, ma preferisco aderire ai protocolli sull'uso delle notifiche. – Brandon
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.
})
}
Questo è quello che stavo cercando. Grazie! – Brandon
Soluzione perfetta..Cool !!! – HPM