Accelerometer/Gyroscope
継続的な委任を使用せずに(などを使用して)の値を要求することは可能ですUIAccelerometerDelegate
かCMMotionManager startGyroUpdatesToQueue
?x
つまり、y
との値を1回だけ要求し、z
これを可能な限りリソース効率の高いものにしたいのです。
ありがとうございました。
Accelerometer/Gyroscope
継続的な委任を使用せずに(などを使用して)の値を要求することは可能ですUIAccelerometerDelegate
かCMMotionManager startGyroUpdatesToQueue
?x
つまり、y
との値を1回だけ要求し、z
これを可能な限りリソース効率の高いものにしたいのです。
ありがとうございました。
これは機能するはずです。
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秒を超えないようにします。
1時間に3回だけデータが必要な場合は、次を使用して委任を停止できます。
accelerometer.delegate = nil;
これにより、リソースの損失を防ぐことができます(少なくとも、アプリが現時点で加速度計データを必要としないことをシステムに通知するのに十分です)