回転時にインターフェイスを少し再配置する必要があるiOSアプリを作成しています。を実装してこれを検出しようとして- (void)orientationChanged:(NSNotification *)note
いますが、デバイスが上向きまたは下向きの場合に通知が表示されます。
インターフェイスの向きが変わったときに通知を受け取る方法が必要です。
回転時にインターフェイスを少し再配置する必要があるiOSアプリを作成しています。を実装してこれを検出しようとして- (void)orientationChanged:(NSNotification *)note
いますが、デバイスが上向きまたは下向きの場合に通知が表示されます。
インターフェイスの向きが変わったときに通知を受け取る方法が必要です。
それを行うことができるいくつかのメソッドがあります、あなたはUIViewControllerクラスリファレンスでそれらを見つけることができます:
– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:
メソッドでも実行できますがviewWillLayoutSubviews
、画面の外観でも呼び出され、サブビューを追加するたびに呼び出されるため、注意が必要です。
編集:
ソリューションは非推奨になりました。承認された回答を参照してください。
iOS 8以降、上記のメソッドは非推奨になりました。デバイスの回転を処理および検出する適切な方法は次のとおりです。
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator;
デバイスの向きを検出するには、(ドキュメントによると)次のことを行う必要があります。statusBarOrientationメソッドを呼び出してデバイスの向きを確認します。
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`
})
}
スウィフト3:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
}