プログラムでipad上の回転プロセスを検出したい。この場合、回転が始まるときにブール値をyesに設定し、回転が終了した後にfalseに設定します。回転が始まり、回転が終了したときに呼び出されるメソッドはありますか?
Appleドキュメントから:
ユーザーインターフェイスが回転を開始する直前にビューコントローラーに送信されます。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
ユーザーインターフェイスが回転した後にビューコントローラーに送信されます:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
詳細はこちら: IViewController Class Reference-> View Rotationイベントへの応答
注意:これは非推奨です this post を参照してください
この投稿の初心者のために、Nektoによって提案されたメソッドはiOS 8で非推奨になりました。Appleの使用を提案:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
「サイズ」パラメータを使用して、縦長または横長に移行するかどうかを簡単に確認できます。
つまり.
if (size.width > size.height)
{
// Position elements for Landscape
}
else
{
// Position elements for Portrait
}
詳細は Docs を参照してください。
上記のすべてのメソッド(@Nektoによる回答)は、iOS8.0以降のバージョンでは非推奨です。ソース: iOS開発者ライブラリ
iOS 8以降、ローテーション関連のメソッドはすべて非推奨になりました。代わりに、回転はビューコントローラのビューのサイズの変更として扱われるため、viewWillTransitionToSize:withTransitionCoordinator:メソッドを使用して報告されます。インターフェイスの方向が変わると、UIKitはウィンドウのルートビューコントローラでこのメソッドを呼び出します。次に、そのビューコントローラーは子ビューコントローラーに通知し、メッセージをビューコントローラー階層全体に伝達します。
IOS8以降では、以下の方法を使用できます。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Stuff you used to do in willRotateToInterfaceOrientation would go here.
// If you don't need anything special, you can set this block to nil.
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Stuff you used to do in didRotateFromInterfaceOrientation would go here.
// If not needed, set to nil.
}];
}
UISplitViewControllerプロトコルでは、iOS8の新しいメソッドは
- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode
4つの表示モードがあります。
typedef enum UISplitViewControllerDisplayMode : NSInteger {
UISplitViewControllerDisplayModeAutomatic,
UISplitViewControllerDisplayModePrimaryHidden,
UISplitViewControllerDisplayModeAllVisible,
UISplitViewControllerDisplayModePrimaryOverlay,
} UISplitViewControllerDisplayMode;
[〜#〜] but [〜#〜]このメソッドは[〜#〜] never [〜#〜]自動を返します。