Моей целью является изменение ориентации блокировки/разблокировки с помощью кнопки. В режиме блокировки ориентацию можно переключать кнопкой, а в режиме разблокировки ориентация определяется датчиком.
Я пытался достичь этого с помощью [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:orientation] forKey:@"orientation"]
, но этот код имеет проблему.
Предположим, что в настоящее время мое приложение является «Режим блокировки, пользовательский интерфейс портрета, портретное устройство». Затем я поворачиваю устройство влево и выравниваю ориентацию. Я ожидал, что [[UIDevice currentDevice] orientation]
должно быть UIDeviceOrientationLandscapeLeft
. Но значение было UIDeviceOrientationPortrait
, хотя реальное устройство в ландшафте!Как изменить ориентацию пользовательского интерфейса без [UIDevice setValue: forKey: @ "orientation"]
Я попробовал также центр уведомлений с кодом ниже.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(onDeviceOrientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
Но этот код не работает должным образом. Если устройство находится в ландшафтном режиме, а ориентация пользовательского интерфейса установлена на портрет с помощью [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:UIDeviceOrientationPortrait]
, onDeviceOrientationChanged
не вызывается, когда я поворачиваю устройство на портрет. Я думаю, что значение ориентации устройства уже настроено на портрет (по моему коду, а не по датчику).
пс. Конечно, я проверил Обязательный полный экран.
EDIT: Было бы также хорошим ответом, чтобы узнать, как получить реальную ориентацию устройства, на которое не влияет [[UIDevice currentDevice] setValue]
.
'UINavigationController tryRotationToDeviceOrientation];' эта строка действительно помогла мне. благодаря – C0D3LIC1OU5