iPhoneを上向き下向きにしたときに画面の回転制御を無効にする
Safariのように横置きにすると画面が横向きに切り替わる動作を実装していたのですが
iPhoneを仰向けやうつ伏せにすると
[UIDevice currentDevice].orientation
の値が、UIDeviceOrientationFaceUp, UIDeviceOrientationFaceDown
はたまた、UIDeviceOrientationUnknown になっていたりする
なので、特定の場合だけ画面の回転処理を行うようにできないかと試行錯誤
で、一応実装できたのですが、現時点では、
フィールド変数として
UIDeviceOrientation bakUIDeviceOrientation;//バックアップ用
UIDeviceOrientation curUIDeviceOrientation;//現在の値
を定義しておき、
UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDown、UIDeviceOrientationUnknown 以外
のときだけUIDeviceOrientation の値を bakUIDeviceOrientation に保持しておいて
UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDown、UIDeviceOrientationUnknown だった場合に
bakUIDeviceOrientation の値を curUIDeviceOrientation に代入するようにする
とてもオーソドッックスなやり方ですが、これで
iPhone が上向き(仰向け)または下向き(うつ伏せ)になったときに
画面が回転されずに固定できるようになります
以下、サンプルコード
力技感が否めません(;^_^A
もっとスマートなやり方があったらまた書きます
iPhoneを仰向けやうつ伏せにすると
[UIDevice currentDevice].orientation
の値が、UIDeviceOrientationFaceUp, UIDeviceOrientationFaceDown
はたまた、UIDeviceOrientationUnknown になっていたりする
なので、特定の場合だけ画面の回転処理を行うようにできないかと試行錯誤
で、一応実装できたのですが、現時点では、
フィールド変数として
UIDeviceOrientation bakUIDeviceOrientation;//バックアップ用
UIDeviceOrientation curUIDeviceOrientation;//現在の値
を定義しておき、
UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDown、UIDeviceOrientationUnknown 以外
のときだけUIDeviceOrientation の値を bakUIDeviceOrientation に保持しておいて
UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDown、UIDeviceOrientationUnknown だった場合に
bakUIDeviceOrientation の値を curUIDeviceOrientation に代入するようにする
とてもオーソドッックスなやり方ですが、これで
iPhone が上向き(仰向け)または下向き(うつ伏せ)になったときに
画面が回転されずに固定できるようになります
以下、サンプルコード
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
//回転の通知を設定
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceOrientationDidChange:)
name:UIDeviceOrientationDidChangeNotification object:nil];
}
return self;
}
//回転の通知を受け取ったときの処理
-(void)deviceOrientationDidChange:(NSNotification*)notification
{
[self setView];
}
-(void)setView
{
if (([UIDevice currentDevice].orientation == UIDeviceOrientationFaceUp)|
([UIDevice currentDevice].orientation == UIDeviceOrientationFaceDown)|
([UIDevice currentDevice].orientation == UIDeviceOrientationUnknown))
curUIDeviceOrientation = bakUIDeviceOrientation;
else
curUIDeviceOrientation = [UIDevice currentDevice].orientation;
bakUIDeviceOrientation = curUIDeviceOrientation;
if ((curUIDeviceOrientation == UIDeviceOrientationLandscapeLeft)|
(curUIDeviceOrientation == UIDeviceOrientationLandscapeRight))
{
//横向きになったときに処理
}
else
{
//縦向きになったときに処理
}
}
力技感が否めません(;^_^A
もっとスマートなやり方があったらまた書きます