0

ユーザーが水平面でバッテリー側から画面側に、またはその逆のように電話をひっくり返したかどうかを検出するロジックはありますか? デバイスが両方の面で水平位置にあるかどうかを判断するために生の値を取得しようとしましたが、動き全体を検出する方法、誰かが私を正しい方向に向けることができます.

4

1 に答える 1

4

UIDevice クラス リファレンスを見ると、向きの列挙が表示されます。その値の 2 つはUIDeviceOrientationFaceDownUIDeviceOrientationFaceUpです。そうは言っても、UIDeviceOrientationDidChangeNotification通知にオブザーバーを登録するだけで、呼び出し時にデバイスの現在の向きを確認し、それに応じてこれを処理できます。

[[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceOrientationDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if (orientation == UIDeviceOrientationFaceDown) {
        // device facing down
    }else if (orientation == UIDeviceOrientationFaceUp) {
        // device facing up
    }else{
        // facing some other direction
    }
}];

以下を使用して、監視する必要があるデバイス通知の生成を開始してください。

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

デバイスの向きに関するより具体的な情報を取得したい場合は、Core Motion フレームワークを使用してジャイロ データを直接取得する必要があります。これにより、デバイスが 3D 空間で向いている正確な現在の方向を追跡できます。

_motionManager = [CMMotionManager new];
NSOperationQueue *queue = [NSOperationQueue new];

[_motionManager setGyroUpdateInterval:1.0/20.0];
[_motionManager startGyroUpdatesToQueue:queue withHandler:^(CMGyroData *gyroData, NSError *error) {
    NSLog(@"%@",gyroData);
}];
于 2013-08-29T17:30:24.407 に答える