Как правильно определять ориентацию интерфейса при запуске?

[Вопрос обновлен]

Итак, вот проблема, я, наконец, сузил ее до этого. Если вы создаете новый UIViewController во всех методах

- (id)init;
- (void)loadView;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidLoad;
(...)

, стандартным interfaceOrientation является Portrait, и если обнаружен альбомный режим, он быстро повернется в эту ориентацию. Что затем может быть обнаружено с помощью:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

Проблема в том, что на iPad довольно сложно подготовить ваш интерфейс для текущей ориентации интерфейса в loadView (или одном из других), поскольку он вернет только портрет. Это вызовет несколько проблем:

1) Я хочу, чтобы мой контент перезагружался в режиме portait, но НЕ в альбомном режиме. Обычно я помещаю оператор if в loadView. Если в портретном режиме, перезагрузите контент. Но в этом случае он всегда будет возвращать портрет и, следовательно, всегда загружает контент.

2) Я хочу использовать ' PresentPopoverFromRect: inView: allowedArrowDirections: animated: '- метод в портретном режиме, поэтому он автоматически отображает всплывающее меню при запуске приложения. Это приведет к сбою приложения при запуске в портретном режиме. Причина: «Всплывающие окна не могут быть представлены из представления, в котором нет окна».

Единственное безопасное предположение находится в пределах «didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation», но этот метод не будет запущен, если он запускается в портретном режиме .

// ----

Обновление (15.37)

'UIApplicationWillChangeStatusBarOrientationNotification'

Будет опубликовано только тогда, когда пользователь переключается с книжной на альбомную (или наоборот). Если интерфейс был проблемой, то это можно легко решить, наблюдая за этим уведомлением и

if (UIDeviceOrientationIsPortrait(interfaceOrientation)) {
    // layout subviews for portrait mode
} else {
    // layout subviews for landscape mode
}

Но проблема в том, что я хочу знать, в каком режиме он находится при запуске, чтобы определить, следует ли перезагружать контент, я могу ' t перезагрузить контент, и когда он поменяется на альбомный, отменить его.

6
задан Mark 22 November 2010 в 14:45
поделиться