1. ホーム
  2. ios

iOS UIDeviceの向きを検出する

2023-10-07 08:27:02

質問

デバイスが縦向きになったことを検知して、特別なアニメーションを起動する必要があります。しかし、私はビューを自動回転させたくありません。

デバイスが縦向きに回転したときに自動回転するビューを無効にするにはどうしたらよいですか。私のアプリはビューを横向きに表示する必要があるだけですが、縦向きへの回転を検出できるようにしたい場合は、縦向きもサポートする必要があるようです。

どのように解決するのですか?

アプリケーションのロード時、またはビューのロード時に以下の操作を行ってみてください。

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
   addObserver:self selector:@selector(orientationChanged:)
   name:UIDeviceOrientationDidChangeNotification
   object:[UIDevice currentDevice]];

次に、以下のメソッドを追加します。

- (void) orientationChanged:(NSNotification *)note
{
   UIDevice * device = note.object;
   switch(device.orientation)
   {
       case UIDeviceOrientationPortrait:
       /* start special animation */
       break;

       case UIDeviceOrientationPortraitUpsideDown:
       /* start special animation */
       break;

       default:
       break;
   };
}

上記により、ビューの自動回転を有効にすることなく、デバイスの方向変更に対応した登録が可能になります。


備考

iOS のすべての場合において、observe を追加したときは、適切なタイミングでそれを削除してください(おそらく、常にではありませんが、ビューが表示/非表示になったとき)。observorとunobserveのコードはquot;pairs"しか持つことができません。これを行わないと、アプリはクラッシュします。観察/非観察の場所を選択することは、このQAの範囲外です。しかし、上記の "observe "と "unobserve "は必ず一致させなければなりません。