web-dev-qa-db-ja.com

デバイスの回転を開始したときと終了した後に呼び出されるメソッド

プログラムでipad上の回転プロセスを検出したい。この場合、回転が始まるときにブール値をyesに設定し、回転が終了した後にfalseに設定します。回転が始まり、回転が終了したときに呼び出されるメソッドはありますか?

27
R. Dewi

Appleドキュメントから:

ユーザーインターフェイスが回転を開始する直前にビューコントローラーに送信されます。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

ユーザーインターフェイスが回転した後にビューコントローラーに送信されます:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

詳細はこちら: IViewController Class Reference-> View Rotationイベントへの応答

注意:これは非推奨です this post を参照してください

36
Nekto

この投稿の初心者のために、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 を参照してください。

28
wyzkid207

上記のすべてのメソッド(@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.

    }];
}
19
Utsav Dusad

UISplitViewControllerプロトコルでは、iOS8の新しいメソッドは

- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode

4つの表示モードがあります。

typedef enum UISplitViewControllerDisplayMode : NSInteger {
  UISplitViewControllerDisplayModeAutomatic,
  UISplitViewControllerDisplayModePrimaryHidden,
  UISplitViewControllerDisplayModeAllVisible,
  UISplitViewControllerDisplayModePrimaryOverlay,
} UISplitViewControllerDisplayMode;

[〜#〜] but [〜#〜]このメソッドは[〜#〜] never [〜#〜]自動を返します。

0
mtet88