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

Я определяю ориентацию устройства с помощью этих строк кода:

UIDevice.currentDevice().orientation.isPortrait.boolValue
UIDevice.currentDevice().orientation.isLandscape.boolValue

И я обнаруживаю, что это iPad с этим кодом:

userInterfaceIdiom == .Pad

Я использовал этот код в функции commonInit(), которая вызывается в функции Init(). Когда я выполняю свой код на iPad, две первые строки возвращают обе false, что неверно, одна из них должна быть true. Третья линия работает нормально.

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


person user567    schedule 06.09.2016    source источник
comment
init()... init()..., о чьем init() методе идет речь?   -  person holex    schedule 06.09.2016
comment
Метод init() класса, в котором я пытаюсь использовать строки кода. Я хочу создать класс со значениями, зависящими от ориентации iPad.   -  person user567    schedule 06.09.2016
comment
@holex спрашивал тип класса... это UIViewController? Полностью ли инициализировано приложение и сообщило AppDelegate, что оно готово, прежде чем этот класс будет создан?   -  person BaseZen    schedule 06.09.2016


Ответы (1)


Вы, вероятно, пренебрегаете этой документацией:

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

Кроме того, это трехмерная ориентация. Вы, вероятно, не хотите этого. Каково фактическое значение простого свойства orientation? Видеть:

enum UIDeviceOrientation : Int {
    case Unknown
    case Portrait
    case PortraitUpsideDown
    case LandscapeLeft
    case LandscapeRight
    case FaceUp
    case FaceDown }

Вероятно, то, что вам действительно нужно, находится здесь: interfaceOrientation устарела в iOS 8, Как изменить этот метод Цель C

Иногда TraitCollections не удовлетворяет все ваши потребности в дизайне. В этих случаях Apple рекомендует сравнивать границы представления:

если view.bounds.size.width > view.bounds.size.height { // ... }

person BaseZen    schedule 06.09.2016