Как изменить или отключить анимацию вращения при изменении ориентации экрана с альбомной на портретную или наоборот?
Измените или отключите анимацию вращения iPhone при изменении ориентации
Ответы (3)
Если вы не хотите, чтобы ваши контроллеры представления вращались, просто переопределите метод контроллера представления shouldAutoRotateToInterface, чтобы он возвращал false для любой ориентации, которую вы не хотите поддерживать...Вот ссылка.
В случае, если вы просто хотите обрабатывать вращение каким-либо другим способом, вы можете вернуть false в приведенных выше методах и зарегистрироваться для UIDeviceOrientationDidChangeNotification следующим образом.
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(handleOrientationDidChange:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
Теперь, когда вы получаете уведомления, вы можете делать с ними все, что хотите...
Да, можно отключить анимацию, не разбивая все на части.
Следующие коды отключат анимацию вращения «черного ящика», не связываясь с другими анимациями или кодом ориентации:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[UIView setAnimationsEnabled:YES];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[UIView setAnimationsEnabled:NO];
/* Your original orientation booleans*/
}
Поместите его в свой UIViewController, и все должно быть хорошо. Тот же метод можно применить к любой нежелательной анимации в iOS.
Желаем удачи с вашим проектом.
Ответ @Nils Munch выше: найти для ‹ iOS7. Для iOS 7 или более поздней версии вы можете использовать:
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[UIView setAnimationsEnabled:NO];
[coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[UIView setAnimationsEnabled:YES];
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}