#cocoa-touch #uiviewcontroller #uiinterfaceorientation #interface-orientation
#cocoa-touch #uiviewcontroller #uiinterfaceorientation #интерфейс-ориентация
Вопрос:
Для улучшения пользовательского интерфейса в моем коде было следующее:
if (allowLandscape) {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
}
else {
return toInterfaceOrientation == UIInterfaceOrientationPortrait;
}
Итак, если для параметра allowLandscape установлено значение YES, пользователь может играть с приложением во всех типичных ориентациях устройства. Но для allowLandscape можно в любое время установить значение NO, и я хочу повернуть UIViewController обратно в книжную ориентацию.
Следующий код работает только в том случае, если пользователь вручную изменяет ориентацию устройства. Итак, если allowLandscape был YES, он мог поворачивать устройство, и ориентация интерфейса следовала за изменением ориентации. Но если он останется в альбомной ориентации, а для allowLandscape будет установлено значение NO, он останется в альбомной ориентации, пока не переведет iPhone в книжную ориентацию — теперь книжная ориентация не может быть изменена, если allowLandscape по-прежнему NO .
Чего я хочу добиться, так это вызвать какой-нибудь метод, чтобы заставить ViewController обновить его ориентацию с помощью анимации, если это возможно.
Вызов метода:
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];
изменяет только строку состояния, но интерфейс остается в предыдущей ориентации. Я не хочу использовать какие-либо недокументированные API.
Комментарии:
1. Лично я бы не стал реализовывать функцию, которая уже встроена в ОС.
2. Хм, какую функцию вы имеете в виду? Как я могу отключить альбомную ориентацию и изменить ориентацию на портретную с помощью кода с анимацией? Я говорю об одном UIViewController.
3. Возможно, я неправильно понял ваш вопрос (даже после его перечитывания). Пользователи могут блокировать и разблокировать ориентацию через меню задач (дважды щелкните кнопку «Домой», затем проведите пальцем вправо).
Ответ №1:
Вот решение:
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Добавляя этот код, контроллер представления снова запрашивает, в какой ориентации он должен представлять свое представление.