Запуск приложения в альбомной ориентации для iPad - PullRequest
6 голосов
/ 01 июня 2010

Одна проблема с запуском приложения в альбомной ориентации для IPad. Я разработал приложение для iPhone, которое позже портировал на IPad.

Я установил настройку ориентации в info.plist

[ UISupportedInterfaceOrientations~ipad ] to support all orientation UIInterfaceOrientationPortrait , UIInterfaceOrientationPortraitUpsideDown , UIInterfaceOrientationLandscapeLeft , UIInterfaceOrientationLandscapeRight.

но когда я запускаю приложение IPad в альбомном режиме, оно всегда запускается в режиме портрета.

Вдоль этого

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{ return YES; }

помогите мне, если я что-то упустил с этим ..

Спасибо

Сагар

Ответы [ 4 ]

10 голосов
/ 21 апреля 2011

вот что я тоже обнаружил: установка начальной ориентации интерфейса в вашем info.plist игнорируется, если в первом слоте у вас есть Поддерживаемые ориентации интерфейса с другой ориентацией! Поместите туда свою первоначальную ориентацию - и симулятор запустится правильно, как и приложение. это сводило меня с ума на долгое время!

9 голосов
/ 20 августа 2010

Поместите UISupportedInterfaceOrientations в ваш -Info.plist с настройкой для каждой поддерживаемой вами ориентации. Это используется, чтобы увидеть, в какой ориентации может начинаться приложение. С этого момента оно будет запрашивать контроллеры представления.

5 голосов
/ 03 июня 2010

Сагар - у меня была та же проблема, но я смог ее решить.

Как и ваше, мое приложение началось как приложение для iPhone, которое я "обновил" до универсального приложения с помощью мастера XCode. Я заметил, что при запуске на реальном iPad, начиная с альбомной ориентации, приложение запускается в книжной ориентации, а затем, возможно, поворачивается в альбомную ориентацию. На симуляторе, начиная с альбомной ориентации, приложение запускается с альбомной ориентацией, а затем симулятор поворачивается на «Портрет».

На iPad мое приложение представляет собой приложение с разделенным видом с TabBarControllers слева и справа. Каждая вкладка является контроллером представления, который возвращает YES для shouldAutoRotateToInterfaceOrientation.

Я заметил, что у нового универсального приложения, созданного мастером, в простом случае с контроллером splitview эта проблема не возникла.

Разница между моим приложением и простым случаем заключалась в том, что я не добавлял представление своего контроллера splitview в окно приложения в applicationDidFinishLaunchingWithOptions. Вместо этого я показывал представление «загрузка» на этом этапе, затем позже, когда завершился поток инициализации, я добавил бы представление моего splitviewcontroller (и скрыл представление «загрузка»).

Когда я добавил представление моего splitviewcontroller в окно приложения во время вызова applicationDidFinishLaunchingWithOptions, все начало работать нормально.

Должно быть какое-то волшебство, которое происходит по возвращении из applicationDidFinishLaunchingWithOptions ???

Похоже ли ваше приложение на мое в том, что оно не добавляет представление главного контроллера в окно во время applicationDidFinishLaunchingWithOptions?

1 голос
/ 11 марта 2012

Как указано в ряде публикаций, вы должны настроить info.plist как с поддерживаемой, так и с начальной ориентацией интерфейса. Тем не менее, большая проблема заключается в том, когда начальная ориентация вступает в силу? Ответ НЕ, когда ваш контроллер представления получает сообщение «viewDidLoad». Я обнаружил, что на iPad-1, работающем под управлением iOS 5.0, запрошенная начальная ориентация вступает в силу только после нескольких «shouldAutorotateToInterfaceOrientation» сообщения получены. (Это сообщение передает параметр UIInterfaceOrientation получателю.) Кроме того, даже если ориентация говорит, что она находится в ландшафтном режиме, это не может быть! Единственный способ убедиться, что вид находится в ландшафтном режиме, это проверить, что высота вида меньше ширины вида. Стратегия, которая работала для меня, заключалась в том, чтобы выложить нужные мне подвиды при получении сообщения «viewDidLoad», но отложить фактическое добавление этих подвидов к представлению до тех пор, пока контроллер не получит действительное сообщение «shouldAutorotate ..» с ориентацией, установленной на «Пейзаж». Режим. Код выглядит примерно так:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations

// N.B. Even when the interface orientation indicates landscape mode
// this may not really be true. So we insure this is so by testing
// that the height of the view is less than the width
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
    interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    CGRect viewBounds = [[self view] bounds];
    if ( viewBounds.size.height < viewBounds.size.width )
        [self addMySubViews];
    return YES;   
}
else
    return NO;
}

Apple только что выпустила iOS 5.1, так что это поведение могло измениться. Но я ожидаю, что код, который здесь находится, все еще должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...