画面固定/制御の方法よく忘れてしまうのでメモ
理屈的には、画面回転時の delegate メソッドで shouldAutorotateToInterfaceOrientation() で与えられた toInterfaceOrientation を判断する。
がその前に、回転に関しては UIDeviceOrientation、UIInterfaceOrientation 2種類存在する。
UIDeviceOrientation はデバイスの向きを判別フラグだが、以下の7種類がある
typedef enum {
UIDeviceOrientationUnknown, //向き不明
UIDeviceOrientationPortrait, // HomeButton 下
UIDeviceOrientationPortraitUpsideDown, //HomeButton 上
UIDeviceOrientationLandscapeLeft, // HomeButton 右(左向き)
UIDeviceOrientationLandscapeRight, //HomeButton 左(右向き)
UIDeviceOrientationFaceUp, // 表
UIDeviceOrientationFaceDown // 裏
} UIDeviceOrientation;
UIInterfaceOrientation は以下の4種類
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
shouldAutorotateToInterfaceOrientation() の toInterfaceOrientation は UIInterfaceOrientation 型なのでこちらを利用します。 逆に UIDeviceOrientation は NSNotification で検知して、センサーアプリの判別に使う感じです。 (センサーアプリを作った事がないのであれですが・・・)
と言う訳で、UIInterfaceOrientation で画面向きの制御をしてみます。
常に回転させない場合は、shouldAutorotateToInterfaceOrientation() を記述しないか、NOを返してやればよい。
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return NO;
}
よってアプリケーション単位で常に固定したい場合は、plist の Initial interface orientation で縦、横の設定をし、shouldAutorotateToInterfaceOrientation() しなければよい。
また、Xcode4 では TARGETS > Summary に Supported Device Orientations 設定があり、サポートする回転設定が plist と連動するので便利です。
ちなみに shouldAutorotateToInterfaceOrientation() も plist も設定しないと縦固定になるようです。
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIDeviceOrientationPortraitUpsideDown);
}
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait
|| interfaceOrientation == UIDeviceOrientationPortraitUpsideDown);
}
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIDeviceOrientationLandscapeLeft);
}
-(bool)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIDeviceOrientationLandscapeRight);
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight
|| interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
何か if 文で読みづらいのでサブクラスして、わかりやすくするのもありかな?とも思ったりします。。。