Как получить события поворота на ViewController в UITabBarController-> UINavigationController?

#iphone #uinavigationcontroller #uitabbarcontroller #rotation #uiinterfaceorientation

#iPhone #uinavigationcontroller #uitabbarcontroller #вращение #ориентация на интерфейс ui

Вопрос:

Я хочу показывать полноэкранный альбомный режим всякий раз, когда пользователь поворачивает устройство iOS с книжной ориентации на альбомную, где портретный режим — это вид внутри панели вкладок и NavigationController.

Однако willRotateToInterfaceOrientation:duration: никогда не вызывается. Я также тестировал добавление ViewController в качестве наблюдателя событий UIDeviceOrientationDidChangeNotification, но это уведомление вызывается также с неопределенной ориентацией.

Какой был бы лучший и простой способ для данной задачи?

Ответ №1:

Есть также UIApplicationWillChangeStatusBarOrientationNotification и UIApplicationDidChangeStatusBarOrientationNotification уведомления.

userInfo Словарь содержит объект NSNumber, который инкапсулирует UIInterfaceOrientation значение. Используйте UIApplicationStatusBarOrientationUserInfoKey для доступа к этому значению

     [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(didRotate:)
                                                 name:UIApplicationDidChangeStatusBarOrientationNotification 
                                               object:nil];

- (void) didRotate:(NSNotification *)notification{   
    NSNumber *num = [[notification userInfo] objectForKey:@"UIApplicationStatusBarOrientationUserInfoKey"];
    NSLog(@"%d", [num intValue]);
}
  

Комментарии:

1. Спасибо за хорошую подсказку. Однако UIApplicationWillChangeStatusBarOrientationNotification никогда не вызывается, поскольку TabBarController напрямую не реагирует на изменения ориентации (он допускает только портретную) и, следовательно, строка состояния никогда не поворачивается.