2012/06/01更新

[XCODE] iPhoneの向きを特定するもう一つの方法

このエントリーをはてなブックマークに追加      

今日は、iPhoneデバイスの向きを特定する方法を。

UIViewControllerのshouldAutorotateToInterfaceOrientationメソッド以外でも、特定する方法を学んだので、ブログに残しておきたいと思います。

Portrait or Landscape





UIDeviceとNSNotificationCenterを使って、デバイスの向きの変化を感知する

やり方は凄くカンタン!UIDeviceで向きの変化を感知を開始して、向きの変化があったらNSNotificationCenterに向きの変化を感知させる。こーするだけで、向きの変化を感知することが出来るようです。

以下がサンプルコートです。

- (void)viewDidLoad {
  [super viewDidLoad];

  // start monitoring device orientation changes.
  [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
  [[NSNotificationCenter defaultCenter]
        addObserver:self
           selector:@selector(didRotate:) 
               name:UIDeviceOrientationDidChangeNotification 
             object:nil];
}

ここでは、viewがロードされたタイミングで、UIDeviceのbeginGeneratingDeviceOrientationNotificationsメソッドを読み出し、向きの変化の監視を始めます。

そして、NSNotificationCenterに、UIDeviceOrientationDidChangeNotificationを監視させるオブザーバーを追加し、向きの変化をとらえると、selfのdidRotate:メソッドを呼び出すように指定しています。

didRotate:メソッドの実装例は以下です。

- (void) didRotate:(NSNotification *)notification {
  UIDeviceOrientation orientation = [[notification object] orientation];

  if (orientation == UIDeviceOrientationPortrait) {
    label1.text = @"device orientation is Portrait.";

  } else if (orientation == UIDeviceOrientationPortraitUpsideDown) {
    label1.text = @"device orientation is Portrait Upside Down.";

  } else if (orientation == UIDeviceOrientationLandscapeLeft) {
    label1.text = @"device orientation is Landscape Left.";

  } else if (orientation == UIDeviceOrientationLandscapeRight) {
    label1.text = @"device orientation is Landscape Right.";

  } else if (orientation == UIDeviceOrientationFaceUp) {
    label1.text = @"device orientation is Face Up."

  } else if (orientation == UIDeviceOrientationFaceDown) {
    label1.text = @"device orientation is Face Down.";

  } else {
    label1.text = @"device orientation is Unkown.";
  }
}

didRote:メドッドは引数にNSNotificationを貰うようにしてあります。NSNotificationからUIDeviceOrientationを取得し、その値を見る事で、デバイスの向きを特定出来ます。UIDeviceOrientationの取りうる値は以下の通りです。

UIDeviceOrientationPortrait立て向きで、ホームボタンは下
UIDeviceOrientationUpsideDown立て向きで、ホームボタンが上
UIDeviceOrientationLandscapeLeft横向きで、ホームボタンが右
UIDeviceOrientationLandscapeRight横向きで、ホームボタンが左
UIDeviceOrientationFaceUp画面が上向き
UIDeviceOrientationFaceDown画面が下向き
UIDeviceOrientationunKnown画面の向きが分からない




参考サイト

以下のサイトを参考にしました。詳しくは、以下リファレンスをご参照ください。

UIDevice Class Reference

NSNotificationCenter Class Reference





最後に

デバイス向きの変化をとらえるのは、shouldAutorotateToInterfaceOrientationだけかと思っていましたが、調べると他にもあるものなんですね。

他にも色々と便利な機能を知ると、より楽にアプリ開発が出来るようになりそうだなぁ(*´∇`*)







こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。