UIDeviceOrientationDidChangeNotification не работает, когда устройство находится на столе? - PullRequest
1 голос
/ 04 августа 2011

Привет, у меня есть проблема, В моем AppDelegate я использовал метод beginGeneratingDeviceOrientationNotifications, чтобы начать уведомлять меня, когда устройство начинает вращаться. Он отлично работает, если я держу в руках свой iPad, но когда он лежит на столе, он не работает, как ожидалось. он запускает UIDeviceOrientationUnknown уведомление. Также это уведомление запускается после запуска пользовательского интерфейса не на заставке.

следующий мой код:

if([[[PulseUIFactory Factory] GetUICreator] IsIPad])
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
    }
     current device stars giving proper values.
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

тогда где-то, где я запускаю свой пользовательский интерфейс как

[self Launch_UI];

но уведомление начинает отвечать после [self Launch_UI]; вызова, даже если уведомление зарегистрировано до его вызова ...

Пожалуйста, любая помощь заметна !!!

1 Ответ

0 голосов
/ 13 мая 2013

Когда вы поместите свое устройство на стол, [[UIDevice currentDevice] orientation] вернет UIDeviceOrientationFaceUp. Тогда, если ваше устройство остается на столе лицевой стороной вверх, не имеет значения, как вы поворачиваете его на столе, текущая ориентация устройства все равно будет UIDeviceOrientationFaceUp.

Если устройство имеет проблемы с определением ориентации, вы можете получить UIDeviceOrientationUnknown. См. этот учебник о том, как обрабатывать поворот устройства с помощью UIDeviceOrientationDidChangeNotification.

Что касается вашего уведомления только после загрузки пользовательского интерфейса, UIDeviceOrientationDidChangeNotification будет срабатывать только при повороте устройства. Поэтому, если вы не поворачиваете свое устройство до тех пор, пока не загрузится пользовательский интерфейс, вы не получите уведомление. Если это не является причиной проблемы, мне нужно увидеть больше вашего кода, чтобы лучше понять, что происходит.

...