Стоп-экран iPad от Вращающегося Xcode 4 - PullRequest
2 голосов
/ 06 сентября 2011

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

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

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

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

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

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

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

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

Категория, которую я реализовал:

@implementation UIViewController(Extends)

-(UIDeviceOrientation)interfaceOrientation
{

    return [[UIDevice currentDevice] orientation];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

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

@end

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

1 Ответ

1 голос
/ 06 сентября 2011

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

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

- (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])
}
...