Обнаружение изменений вращения в 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`
    })
}