Есть ли у поддерживаемых ориентаций интерфейса прецедент?

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

Это будет единственный вращающийся экран в приложении.

Я пытаюсь найти самый простой способ сделать это.

Если я установлю поддерживаемые ориентации на странице сводки сборки (т. е. с помощью кнопок переключения), чтобы она была просто портретной. Могу ли я затем переопределить это в коде для экрана, который я хочу автоматически поворачивать?

Или я должен сделать это наоборот? то есть поддерживать все ориентации, а затем отключить для всех экранов, которые я не хочу поворачивать?

Спасибо


person Fogmeister    schedule 04.05.2013    source источник


Ответы (3)


Или я должен сделать это наоборот? то есть поддерживать все ориентации, а затем отключить для всех экранов, которые я не хочу поворачивать?

да. Вы должны перечислить в Info.plist все ориентации, которые вы будете поддерживать. Затем ограничьте определенные ориентации контроллера представления с помощью supportedInterfaceOrientations. Должен быть представлен один контроллер ландшафтного вида, т. е. используйте «модальный» переход или вызовите presentViewController:animated:.

Мой ответ здесь может быть полезен:

https://stackoverflow.com/a/13755923/341994

и мой ответ здесь:

https://stackoverflow.com/a/15301322/341994

person matt    schedule 04.05.2013
comment
Являются ли они одинаковыми, если есть только один контроллер представления? - person Franklin Yu; 10.03.2016

Добавьте наблюдателя в метод viewDidLoad представления, которое вы хотите повернуть, следующим образом:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
 addObserver:self selector:@selector(orientationChanged:)
 name:UIDeviceOrientationDidChangeNotification
 object:[UIDevice currentDevice]];

а затем установите представления в соответствии с представлением, которое вы хотите изменить, внутри метода orientationChanged следующим образом:

- (void) orientationChanged:(NSNotification *)note{
UIDevice * device = [UIDevice currentDevice];
switch(device.orientation)
{
    case UIDeviceOrientationPortrait:

        break;
    case UIDeviceOrientationPortraitUpsideDown:

        break;
    case UIDeviceOrientationLandscapeLeft:

        break;
    case UIDeviceOrientationLandscapeRight:

        break;

    default:
        break;
  };
}
person Ushan87    schedule 04.05.2013

В iOS 6 поддерживаемые приложением ориентации (указанные в Info.plist) объединяются по И с поддерживаемыми ориентациями контроллера верхнего вида, поэтому для достижения желаемого вам необходимо объявить поддержку для каждой ориентации в Info.plist, а затем переопределить supportedOrientations: метод в контроллерах представления, где вы не хотите, чтобы имело место вращение, например:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
person Daniel Martín    schedule 04.05.2013