Я использую следующий код для обнаружения/прослушивания, когда iPad меняет ориентацию устройства.Уведомление слушателей, вызывающих сбои
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:@"UIDeviceOrientationDidChangeNotification"
object:nil];
Это вызывает мой метод didRotate: когда что-то меняется. В моем методе didRotate: я использую UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
, чтобы выяснить, что такое ориентация, и примените мой код соответственно.
Тем не менее, при тестировании в реальной жизни я заметил, что didRotate: получает вызов каждую секунду, если iPad находится в руке человека. Похоже, слушатель буквально прислушивается к каждому маленькому наклону и смещению iPad, что, очевидно, случается очень много в руках человека (а не на столе на столе).
Любые идеи о том, как я могу это исправить? Я мог бы изменить свой код, чтобы использовать ориентацию интерфейса, но по какой-то причине у меня были проблемы с ним. Спасибо.
* ОБНОВЛЕНИЕ: Этот слушатель создается в моем подклассе UIImageView. На экране около дюжины или более. Я добавил [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
методам удаления, когда я удаляю экземпляр. Это помогает объяснить, почему didRotate продолжал проявляться так много (моя ошибка).
Однако, я сузил аварийные ситуации: всякий раз, когда я удаляю этот экземпляр этого подкласса и поворачиваю свой iPad, я терплю неудачу. Иногда я получаю такие странные сообщения, как [__NSArrayM didRotate]: это нераспознанный селектор (и другие wierd-объекты, такие как UIPanVelocity ... что-то). Мой слушатель все еще прослушивается после удаления экземпляра?
FIXED: Благодарим за помощь. Наконец я заметил, что случилось. Я удалял экземпляр без удаления наблюдателя и завершения уведомлений. Добавление следующего кода в мои методы удаления экземпляра исправляет мою проблему:
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self];
В качестве примечания стороны используйте константу 'имя: UIDeviceOrientationDidChangeNotification' не его строковое значение' name: @ "UIDeviceOrientationDidChangeNotification" ' – bandejapaisa