web-dev-qa-db-ja.com

iOSで回転の変化を検出する

回転時にインターフェイスを少し再配置する必要があるiOSアプリを作成しています。 - (void)orientationChanged:(NSNotification *)noteを実装してこれを検出しようとしていますが、これにより、デバイスが上向きまたは下向きのときに通知が表示されます。

インターフェイスの向きが変わったときに通知を受け取る方法が必要です。

15
Undo

IOS 8以降、上記のメソッドは非推奨になり、デバイスの回転を処理および検出する適切な方法は次のとおりです。

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator;

デバイスの向きを検出するには、(ドキュメントによると)次のことを行う必要があります:statusBarOrientation メソッドを呼び出してデバイスの向きを決定します

20
Stephen H King

それを行うことができるいくつかのメソッドがあります、あなたはそれらを IViewControllerクラスリファレンス で見つけることができます:

– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:

viewWillLayoutSubviewsメソッドでも実行できますが、画面の外観でも呼び出され、サブビューを追加するたびに呼び出されるため、注意が必要です。

編集:

ソリューションは非推奨になりました。承認された回答を参照してください。

27
Levi

スウィフト3:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

}
5
PeejWeej

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`
    })
}
4
PatrickDotStar