#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 напрямую не реагирует на изменения ориентации (он допускает только портретную) и, следовательно, строка состояния никогда не поворачивается.