2016-08-20 9 views
2

私のアプリケーションは両方向(縦と横)で動作しますが、画面の1つはポートレートモードでロックされています。しかし、その特定の画面のRotation変数に1つの値を設定する必要があります。しかし、私はオリエンテーションを見つけませんでした。 私はオリエンテーションを探したいです。 私は縦画面モードで私の画面をロックするために、この下のコードを使用しており、それは動作します。画面がポートレートモードでロックされている場合の向きの検出方法は?

- (UIInterfaceOrientationMask) supportedInterfaceOrientations { 
    [super supportedInterfaceOrientations]; 
    return UIInterfaceOrientationMaskPortrait; 
} 

私は方向を検出するためにこの以下の方法を使用していますが、これは呼び出されません。ここ

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     NSLog(@"UIInterfaceOrientationPortrait"); 
    } 
    else 
    { 
     NSLog(@"UIInterfaceOrientationland"); 

    } 
} 
+0

参照が表示されます。 http://stackoverflow.com/questions/9122149/detecting-ios-uidevice-orientation –

答えて

0

画面が縦長モードでロックされている場合は、向きを検出することができ向きUIDeviceOrientationIsLandscapeUIDeviceOrientationIsPortrait

if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) 
{ 
    // code here for landscape orientation  
} 

// And 

if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) 
{ 
    // code here for Portrait orientation  
} 
+0

だから、デバイスの向きをポートレートモードでロックした後で、向きを見つけたらどうしますか?それで、あなたはそれについてよく知っています。それに応じて変数の値を設定してください。 – vaibhav

+0

ええ、私はそれを知っています。しかし、私の画面がポートレートモードでロックされているので、私の 'didRotateFromInterfaceOrientation'メソッドは呼び出されません。 @vaibhav –

+0

'didRotateFromInterfaceOrientation'メソッドは、ユーザーが画面を回転させたときに呼び出され、あなたが設定したい値を設定できるようになりました。 – vaibhav

0

を検出する方法です。簡単な方法は "CoreMotion"です。コードスニペットは次のとおりです。

の1-)まず、あなたは)設定

#import <CoreMotion/CoreMotion.h> 

、3- enter image description here

2 - )輸入CoreMotionのfreameworkを構築するためにCoreMotionのfreameworkを追加するだけで以下のようにプロパティを追加する必要があります。

@interface BaseGeneralViewController(){ 
    UIInterfaceOrientation orientationLast, orientationAfterProcess; 
    CMMotionManager *motionManager; 
    UIInterfaceOrientation orientationNew; 

} 

4-)我々は

- (void)initializeMotionManager{ 
    motionManager = [[CMMotionManager alloc] init]; 
    motionManager.accelerometerUpdateInterval = .2; 
    motionManager.gyroUpdateInterval = .2; 

    [motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] 
             withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
              if (!error) { 
               [self outputAccelerationData:accelerometerData.acceleration]; 
              } 
              else{ 
               NSLog(@"%@", error); 
              } 
             }]; 
} 

5-を初期化する方法を作成している)方法

- (void)outputAccelerationData:(CMAcceleration)acceleration{ 

    if (acceleration.x >= 0.75 && orientationLast != UIInterfaceOrientationLandscapeLeft) { 
     orientationNew = UIInterfaceOrientationLandscapeLeft; 
     [self callQRCodePayment:UIDeviceOrientationLandscapeRight]; 
    } 
    else if (acceleration.x <= -0.75 && orientationLast != UIInterfaceOrientationLandscapeRight) { 
     orientationNew = UIInterfaceOrientationLandscapeRight; 
     [self callQRCodePayment:UIDeviceOrientationLandscapeLeft]; 
    } 
    else if (acceleration.y <= -0.75) { 
     //orientationNew = UIInterfaceOrientationPortrait; 
     //NSLog(@"Portrait"); 
    } 
    else if (acceleration.y >= 0.75) { 
     //orientationNew = UIInterfaceOrientationPortraitUpsideDown; 
    } 
    else { 
     // Consider same as last time 
     return; 
    } 

    if (orientationNew == orientationLast) 
     return; 

    orientationLast = orientationNew; 
} 

6- outputAccelerationData宣言)のviewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self initializeMotionManager]; 
} 
でメソッドを初期化する呼び出し

詳細post 012を見ることができます

関連する問題