Регистрация в UIDeviceOrientation

Я хочу определить текущую ориентацию устройства.

Итак, я использовал строку кода

Примечание. Это дает мне ориентацию, даже если я не зарегистрировал ее.

-(IBAction) deviceOrientationChanged:(id) sender{
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]);
}

Когда я меняю ориентацию, при нажатии кнопки я получаю ориентацию устройства.

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

Примечание. В приведенном ниже коде я зарегистрировал устройство для получения уведомления об ориентации устройства.

-(IBAction) deviceOrientationChanged:(id) sender{

    if(![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]){
        //This statement is called very time when I click on the button. I expected to execute only once.
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    }
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]);
}

Итак, я не могу найти идеальный способ получить ориентацию устройства.


person NNikN    schedule 18.12.2012    source источник


Ответы (3)


Я думаю, что ваше условие if неверно; У вас это как если бы ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) Это должно быть

if( ! [[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])

person Siby    schedule 18.12.2012
comment
Спасибо, я исправил код, но теперь он не входит в условие if для регистрации устройства. Я не понимаю, почему он возвращает TRUE. Я проверил весь свой код, нет другого места, где я регистрируюсь с ориентации устройства. - person NNikN; 19.12.2012
comment
Регистрация для получения уведомлений отличается от создания уведомлений. Обычно, если вы планируете использовать уведомления об ориентации устройства в делегате приложения или в соответствующем месте, вы делаете вызов beginGeneratingDeviceOrientationNotifications на UIDevice и делаете endGeneratingDeviceOrientationNotifications в другом подходящем месте, когда вам больше не нужны уведомления. Это только начальная настройка для уведомления deviceOrientaion. - person Siby; 20.12.2012

Регистрация для получения уведомлений отличается от создания уведомлений. Обычно, если вы планируете использовать уведомления об ориентации устройства в делегате приложения или в соответствующем месте, вы делаете вызов beginGeneratingDeviceOrientationNotifications на UIDevice и делаете endGeneratingDeviceOrientationNotifications в другом подходящем месте, когда вам больше не нужны уведомления. Это только начальная настройка для уведомления deviceOrientaion.

Чтобы получить эти уведомления, в ваших контроллерах или объекте U должен быть Центр уведомлений. Зарегистрируйтесь для получения уведомления UIDeviceOrientationDidChangeNotification. [[NSNotificationCenter defaultCenter] addObserver:селектор myObject:@selector(deviceRotated:)name:UIDeviceOrientationDidChangeNotification object:nil]

и удалите его из центра уведомлений, когда он вам не нужен, или в удалении объекта.

person Siby    schedule 20.12.2012

Вы не можете запретить устройству генерировать уведомления о ротации UIViewController. См. вопрос здесь.

Документ, на который вы ссылаетесь, относится к NSNotificationCenter уведомлениям.

person bibo bode    schedule 18.12.2012
comment
В нем говорится, что значение этого свойства всегда возвращает 0, если только уведомления об ориентации не были включены путем вызова beginGeneratingDeviceOrientationNotifications. где свойство to относится к свойству ориентации UIDevice - person NNikN; 18.12.2012