Come si modifica o disattiva l'animazione di rotazione quando l'orientamento dello schermo cambia da orizzontale a verticale o viceversa?Modificare o disattivare l'animazione di rotazione dell'iPhone quando cambia l'orientamento
risposta
Se non si desidera ruotare il controller di visualizzazione, è sufficiente ignorare il metodo del controller della vista shouldAutoRotateToInterface per restituire false per qualsiasi orientamento non si desidera supportare ... Here is a reference.
Nel caso in cui u vuole solo per gestire la rotazione qualche altro modo, è possibile restituire falso nei metodi di cui sopra e registrarsi per UIDeviceOrientationDidChangeNotification in questo modo
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(handleOrientationDidChange:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
Ora, quando u ottenere le notifiche u può fare quello che voglio con esso ...
Sì, è possibile disattivare l'animazione, senza rompere tutto a parte.
I seguenti codici disabiliterà l'animazione di rotazione "scatola nera", senza fare confusione con altre animazioni o codice di orientamento:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[UIView setAnimationsEnabled:YES];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[UIView setAnimationsEnabled:NO];
/* Your original orientation booleans*/
}
inserirlo nel vostro UIViewController e tutti dovrebbero essere bene. Lo stesso metodo può essere applicato a qualsiasi animazione indesiderata in iOS.
Buona fortuna con il tuo progetto.
Per iOS 6+ (e precedenti) compatibilità, puoi mettere [UIView setAnimationsEnabled: NO] in willRotateToInterfaceOrientation: duration: invece di shouldAutorotateToInterfaceOrientation: –
Ricorda di chiamare la super implementazione se la sostituisci. In particolare, i documenti Apple dicono che se si esegue l'override di willRotateToInterfaceOrientation: duration: o didRotateFromInterfaceOrientation: "L'implementazione di questo metodo deve chiamare super ad un certo punto durante l'esecuzione." – levigroker
Ecco la versione Swift ... http://stackoverflow.com/a/6292506/294884 – Fattie
La risposta di @Nils Munch sopra è trovata per < iOS7. Per iOS 7 o versioni successive è possibile utilizzare:
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[UIView setAnimationsEnabled:NO];
[coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[UIView setAnimationsEnabled:YES];
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
Penso che lo desideri ancora ruotare ma utilizzare un'animazione diversa o non animata affatto. –
ha cambiato la risposta per riflettere che – Daniel
ha funzionato. –