Трудно сказать, учитывая, что вызов shouldAutorotateToInterfaceOrientation:
сделан для всех ориентаций, независимо от того, пытается ли пользователь перейти в ландшафтный режим, а обратные вызовы willRotate / didRotate сделаны только для поддерживаемых ориентаций. Что вы можете сделать, это войти в систему
[[UIDevice currentDevice] orientation];
на каждый должен бытьAutotateToInterfaceOrientation. Или зарегистрируйтесь для получения уведомления UIDeviceOrientationDidChangeNotification
. Это возвращает UIDeviceOrientation, независимо от ориентации ваших контроллеров представления. Обратите внимание, что это отличается от значений UIInterfaceOrientation, которые UIViewControllers используют для свойства interfaceOrientation.
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
Хотя оба связаны:
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;