Экран остановки iPad из вращающегося Xcode 4

Я создаю приложение для iPad в Xcode 4. Приложение должно всегда отображаться в альбомной ориентации. для этого я пробовал следующее:

  • На итоговом экране целевого объекта я выбираю только левую альбомную ориентацию в качестве поддерживаемого устройства.
  • На экране «Информация о цели» / Info.plist установите для параметра Поддерживаемые ориентации интерфейса (iPad) значение «Пейзаж» (левая кнопка «Домой»).

Это приводит к тому, что приложение запускается в ландшафтном режиме, но если я поверну устройство, оно все равно изменит свою ориентацию. Кроме того, когда у меня есть UIViewController, представленный с PresentationStyle UIPresentationFormSheet, он поворачивается для портрета в момент отображения.

В некоторых других темах / форумах было рекомендовано создать категорию для UIViewController и переписать

-(UIDeviceOrientation)interfaceOrientation;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

Чтобы всегда поворачивать в ориентацию устройства (LandscapeLeft) или, в частности, LandscapeLeft, а также без автоповорота, если вы не поворачиваете в LandscapeLeft.

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

Кто-нибудь знает, как я могу это исправить?

Категория I реализовала:

@implementation UIViewController(Extends)

-(UIDeviceOrientation)interfaceOrientation
{

    return [[UIDevice currentDevice] orientation];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        return YES;
    else
        return NO;
}

@end

Единственное место, где я могу найти портретную ориентацию, которая должна быть определена, - это исходное окно в MainWindow.xib, но это не может быть изменено, и каждый поток / форум говорит, что этот конкретный параметр является / не должен быть проблемой.


person ophychius    schedule 06.09.2011    source источник


Ответы (1)


Насколько я могу судить, предпринятые вами шаги должны предотвратить вращение интерфейса.

Вы всегда можете попытаться переопределить вызовы, которые выполняют ориентацию в каждом контроллере представления вашего приложения. По крайней мере, это должно дать вам представление о том, где происходит вращение. После этого точка останова может рассказать вам больше.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
   NSLog( @"will rotate to orientation %d in %@", interfaceOrientation, NSStringFromClass([self class])
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
   NSLog( @"did rotate from orientation %d to %d in %@", fromInterfaceOrientation, [self interfaceOrientation], NSStringFromClass([self class])
}
person Pieter    schedule 06.09.2011
comment
Проблема, если вы не позволяете ему вращаться, заключается в том, что приложение всегда запускается в портретной ориентации, и если вы определяете, что оно должно быть в альбомной ориентации, первое, что она делает, это переключается на альбомную ориентацию, поэтому, если вы запретите его изменение, оно никогда не появится в пейзаж. Я изменил его так, что shouldAutorotateToInterfaceOrientation возвращает YES в обоих ландшафтных режимах, и это, кажется, исправляет это. Он по-прежнему позволяет использовать только один Пейзаж (кнопка «Домой» влево), потому что он установлен в Info.plist. Ваш ответ действительно помог мне разобраться во внутренней работе приложения. - person ophychius; 07.09.2011