Изменить или отключить вращающуюся анимацию 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 выше - найти для - (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[UIView setAnimationsEnabled:NO];
[coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[UIView setAnimationsEnabled:YES];
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}