Изменить или отключить вращающуюся анимацию 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];
}
Другие вопросы по тегам