QA1688 UIViewControllerがデバイスと一緒に回転しないのは何故ですか?

2012. 03. 31
質問:UIViewControllerがデバイスと一緒に回転しないのは何故ですか?

回答:

ビューコントローラが回転しない理由は、いくつか可能性があります。

UIViewControllerクラスはiPhoneアプリケーション用の基礎となるビュー管理モデルを提供します。

これはデバイスの方向の変更に応じて、ビューコントローラのビューを自動的に回転させるサポートを提供します。

ビューとサブビューの自動サイズ変更プロパティが適切に設定されている場合、この動作は基本的に無償で行われます。

以下に示す状況では、ビューコントローラが回転しない場合があります。

  • ビューコントローラが- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientationデリゲートメソッドを実装していない。

    shouldAutorotateToInterfaceOrientation:が実装されている場合でも、サポートしたい全ての方向がYESを返すことを確認してください。

    全ての方向をサポートするには、単純に常にYESを返します。

  • ビューコントローラのUIViewプロパティがUIWindow内に組み込まれているが、追加のビューコントローラもある。

    shouldAutorotateToInterfaceOrientation:は指定されたビューコントローラの起動時に一度呼び出されますが、デバイスが回転した時に再度呼び出されることはありません。

    ビューコントローラは管理するビューと堅くバインドされており、またイベント処理に使用するレスポンダチェーンの一部でもあります。

    ビューコントローラはUIResponderクラスの子孫そのものであり、管理されているビューとスーパービュー間のレスポンダチェーンに挿入されます。

    そのためレスポンダチェーンの一部として、アプリケーション内に1つのプライマリビューコントローラを持つことが一般的です。

    通常はUIWindowに1つのプライマリビューコントローラとして、UINavigationController、UITabBarControllerまたは一般的なUIViewControllerを追加します。

    例えば下記のように呼び出します。

    [myWindow addSubview:primaryViewController.view];

    UIWindowに追加ビューコントローラのUIViewプロパティを(プライマリビューコントローラと同じレベルで)追加する場合は次のようになります。

    [myWindow addSubview:anotherController.view];

    追加ビューコントローラは回転イベントを受信することができず、回転することはありません。

    UIWindowに追加された最初のビューコントローラのみが回転します。

    :別のビューコントローラへのサブビューとして、1つのビューコントローラのUIViewプロパティを追加することができます。
    そうすることで両方のビューが回転しますが、親ビューコントローラはshouldAutorotateToInterfaceOrientation:メソッドを介してサポートされる方向を決定する管理を維持します。

    :UINavigationControllerとUITabBarControllerは、独自のビューコントローラの『スタック』や『リスト』を管理する能力を持っていることを心に留めておいてください。

  • UIWindowへのサブビューとしてビューコントローラのUIViewプロパティを追加したが、直後に途中で解放した。

    UIWindowはビューを保持しますが、ビューコントローラ自体は保持しません。

    途中で解放してはいけません。

    UIApplicationDelegateサブクラスの『retainable』プロパティとして宣言します。

    :UINavigationControllerとUITabBarControllerはビューコントローラを保持するので、追加された後でそれらを一度解放することができます。

  • UITabBarControllerまたはUINavigationControllerの全ての子ビューコントローラは、一般的な方向の設定に一致しない。

    全ての子ビューコントローラが正確に回転していることを確認するには、各タブまたはナビゲーションレベルを表す各ビューコントローラのshouldAutorotateToInterfaceOrientation:を実装する必要があります。

    それぞれ発生する回転と同じ方向に一致させる必要があります。

    つまり、同じ方向の位置について全てYESを返す必要があります。

  • superを呼び出さずに、-(id)init:または-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundleメソッドをオーバーライドした。

    オブジェクトを適切に初期化するには、ビューコントローラでオーバーライドする全てのinitまたはinitWithNibNameメソッドでsuperを呼び出す必要があります。



参考文献

Technical Q&A QA1688: Technical Q&A QA1688

0 CommentsPosted in 資料





QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

QuietControl 30 wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR