UIDeviceOrientationDidChangeNotification срабатывает только один раз - PullRequest
1 голос
/ 17 апреля 2011

Я пытаюсь обработать изменения ориентации устройства на контроллере вида для одного из моих видов. Вот мой код:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
    // Tell the UIDevice to send notifications when the orientation changes
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}

// tell the director that the orientation has changed
- (void) orientationChanged:(NSNotification *)notification
{
    NSLog(@"orientationChanged");
}

Когда я впервые запускаю приложение, вызывается селектор Ориентация изменения, но затем он не вызывается снова, независимо от того, насколько сильно я поворачиваю iPad. Кто-нибудь знает, что я могу делать не так? Когда я помещаю подобный код в делегат приложения, он работает нормально, но в данном конкретном контроллере представления он работает неправильно.

Ответы [ 2 ]

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

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

В этом уроке дается хороший и простой обзор того, как обрабатывать поворот устройства с помощью UIDeviceOrientationDidChangeNotification.

У меня также были проблемы с UIDeviceOrientationDidChangeNotification, не стреляющим(он отлично работал в симуляторе, но не на моем устройстве).После небольшой отладки я понял, что у меня на устройстве заблокирована книжная ориентация, и это заставило UIDeviceOrientationDidChangeNotification не срабатывать.Не уверен, что это ваша проблема, но это то, что легко упустить из виду и стоит проверить.

0 голосов
/ 17 апреля 2011

проблема в том, что ориентация не изменится, если вы не укажете, что это возможно. при вращении устройства / симулятора фреймворк вызывает

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

где ориентация интерфейса - это ориентация, которую система хочет использовать, однако вы должны вернуть YES, иначе она не изменится.

если вы не возвращаете ДА , тогда ваша ориентация не меняется, и поэтому вы не можете получить уведомление об изменении ориентации (потому что это не произошло)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...