0

Accelerometer/Gyroscope継続的な委任を使用せずに(などを使用して)の値を要求することは可能ですUIAccelerometerDelegateCMMotionManager startGyroUpdatesToQueuexつまり、yとの値を1回だけ要求し、zこれを可能な限りリソース効率の高いものにしたいのです。

ありがとうございました。

4

2 に答える 2

1

これは機能するはずです。

CMMotionManager* motionManager = [[CMMotionManager alloc] init];
[motionManager startAccelerometerUpdates];
CMAccelerometerData* data = [motionManager accelerometerData];
while ( data.acceleration.x == 0 )
{
    data = [motionManager accelerometerData];
}
NSLog(@"x = %f, y = %f, z = %f.", data.acceleration.x, data.acceleration.y, data.acceleration.z);

これは、物事を機能させるためにできることのほんの一例です。これは私の意見ではかなり悪い考えですが、あなたがそれを成し遂げたいのであれば、それは物事をうまく機能させます。

コードは非常に単純でわかりやすく、CMMotionManager加速度計またはジャイロスコープからデータの取得を開始するように指示してから、そこからデータを要求します。ここでそれが悪い理由は、更新には間隔があるため、最初の数ミリ秒の間、取得されるデータCMMotionManagerはゼロ値です。それがwhileループの目的です。このタイプのものは、UIがブロックされないように別のスレッドにオフロードする必要がありますが、それよりもさらにリソースを消費UIAccelerometerDelegateし、ブロックが0.5秒を超えないようにします。

于 2013-03-24T09:38:51.147 に答える
0

1時間に3回だけデータが必要な場合は、次を使用して委任を停止できます。

accelerometer.delegate = nil;

これにより、リソースの損失を防ぐことができます(少なくとも、アプリが現時点で加速度計データを必要としないことをシステムに通知するのに十分です)

于 2013-11-20T17:23:54.190 に答える