[iOS SDK] UIDeviceOrientation ではまる

公開日: : iPad, iPhone

すぐURLが変更されそうだが、2013/02/16 時点だと、Supporting Multiple Interface Orientations という記事がiOS Developer Library にある。
View Controller Programming Guide for iOS: Supporting Multiple Interface Orientations

そこに、下記のようなコードがあり、UIDeviceOrientation を普通に使っている。

@implementation PortraitViewController
- (void)awakeFromNib
{
    isShowingLandscapeView = NO;
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                 selector:@selector(orientationChanged:)
                                 name:UIDeviceOrientationDidChangeNotification
                                 object:nil];
}
 
- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
        !isShowingLandscapeView)
    {
        [self performSegueWithIdentifier:@"DisplayAlternateView" sender:self];
        isShowingLandscapeView = YES;
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
             isShowingLandscapeView)
    {
        [self dismissViewControllerAnimated:YES completion:nil];
        isShowingLandscapeView = NO;
    }
}

このため、このコードをそのまま流用して画面回転対応コードを書いていたら、UIDeviceOrientation には UIDeviceOrientationFaceUp や UIDeviceOrientationFaceDown があるので、それに該当してしまい不具合を発生させてしまった。

typedef enum {
   UIDeviceOrientationUnknown,
   UIDeviceOrientationPortrait,
   UIDeviceOrientationPortraitUpsideDown,
   UIDeviceOrientationLandscapeLeft,
   UIDeviceOrientationLandscapeRight,
   UIDeviceOrientationFaceUp,
   UIDeviceOrientationFaceDown
} UIDeviceOrientation;

ということで、UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
を使ったり、
– (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
を使ったりしよう。

iOS6 になって
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
がdeprecated になってしまったためにいろいろ混乱させられているが didRotateFromInterfaceOrientation などは普通に呼ばれているようだ。
何度も同じことではまっている気がする。

関連記事

no image

WWDC 2010 開幕

去年と違って今年はすっかりTwitterが一般化しているので、WWDCに行く人たちの様子がよくわかる

記事を読む

no image

[iPhone SDK] sqlite 学習中。FMDB を知る。

SQLite入門 第2版西沢 直木 翔泳社 2009-05-19売り上げランキング : 17582

記事を読む

no image

[iPhone SDK] UINavigationBar にボタンを追加する

自作アプリでUIWebViewを使ってWebを表示しているが、戻る・進むボタンをUINaviga

記事を読む

no image

[iPhone SDK] ネットワーク接続中を示すぐるぐるの表示

いつも忘れて検索してしまうので自分のブログにメモ。 iPhoneのインジケーターバー(?)にぐるぐ

記事を読む

no image

iPad用ケース TUNESHELL for iPad

iPadは使ってないとき机の上に置くと意外に場所を取る。どう置くかは工夫のしどころだと思われる。 ま

記事を読む

no image

iPhone/iPad で音楽

iPhone/iPad で音楽制作的な本を書店でよく見かけるので、リストアップしてみる。 どれも面白

記事を読む

LogLocations 1.3.2 をリリースしました

LogLocations 1.3.2をリリースしました。審査後、近日中に公開されます。下記のレビュー

記事を読む

[iPhone 6 Plus] TUNEWEAR の iPhone 6 Plus 用ケースを買ってみた

iPhone 6 Plus 購入時に、とりあえず購入した Simplism のケースは、すぐ

記事を読む

Siri Shortcuts に対応

正月休み中なので、ブログ記事が書きやすい。毎年この時期だけはよくブログを書いている気がする。

記事を読む

App Store にPreview動画をアップロードしてみた

現在新アプリの公開準備を進めているが、今回のアプリの使い方を知ってもらうには動画を見てもらうのが一番

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

容量不足でApple Watch Series 3をアップデートできない

容量不足で Apple Watch をアップデートできない場合 -

Apple Event Sep 2021

ついに後数時間で Apple Event 2021.09.15 があ

PHPを7.4に上げようとして失敗した話

さくらVPSのPHPを5.3から7.2にアップデート でPHPを7.

WF-1000XM4用カラビナ付きケースを買ってみた

まだ発売されたばかりで、ケースのレビューもなかったので、エイ

ソニーWF-1000XM4を買ってみた

2019年に ソニーのノイキャンヘッドセットWF-1000XM3購入

→もっと見る

  • 2013年2月
     123
    45678910
    11121314151617
    18192021222324
    25262728  
PAGE TOP ↑