Обнаружение изменений вращения в iOS
Я делаю приложение iOS, которое необходимо выполнить при перестановке интерфейса. Я пытаюсь обнаружить это, реализуя - (void)orientationChanged:(NSNotification *)note
, но это дает мне уведомления о том, когда устройство находится лицом вверх или вниз.
Мне нужен способ получить уведомление, когда интерфейс изменяет ориентацию.
Ответы
Ответ 1
Так как iOS 8, вышеописанные методы были устаревшими, а правильный способ обработки и обнаружения вращения устройства:
- (void) viewWillTransitionToSize: (CGSize) size withTransitionCoordinator: (id) координатор,
Чтобы определить ориентацию устройства, вы должны (согласно документации): вызвать метод statusBarOrientation для определения ориентации устройства
Ответ 2
Есть несколько способов, где вы можете это сделать, их можно найти в ссылка на класс UIViewController:
– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:
Вы также можете сделать это в методе viewWillLayoutSubviews
, но будьте осторожны с ним, потому что он вызывается также на экране, и всякий раз, когда вы добавляете subview.
Edit:
Решение теперь устарело, см. принятый ответ.
Ответ 3
Swift 3:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
}
Ответ 4
Так как iOS 8 это правильный способ сделать это.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { context in
// This is called during the animation
}, completion: { context in
// This is called after the rotation is finished. Equal to deprecated `didRotate`
})
}