UIViewController меняет ориентацию с помощью кода - PullRequest
0 голосов
/ 16 октября 2011

Для лучшего пользовательского опыта в моем коде было следующее:

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 Ответ

0 голосов
/ 16 октября 2011

Вот решение:

    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Добавляя этот код, контроллер представления снова спрашивает, в какой ориентации он должен представлять свое представление.

...