是否有可能在不使用連續委派的情況下請求Accelerometer/Gyroscope
的值(如使用UIAccelerometerDelegate
或類似CMMotionManager startGyroUpdatesToQueue
)?我的意思是,我想要請求x
,y
和z
的值,只需要一次,並儘可能節約資源。如何在沒有UIAccelerometerDelegate的情況下使用iOS加速度計
謝謝。
是否有可能在不使用連續委派的情況下請求Accelerometer/Gyroscope
的值(如使用UIAccelerometerDelegate
或類似CMMotionManager startGyroUpdatesToQueue
)?我的意思是,我想要請求x
,y
和z
的值,只需要一次,並儘可能節約資源。如何在沒有UIAccelerometerDelegate的情況下使用iOS加速度計
謝謝。
這應該工作。
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
更耗費資源,並且阻塞時間不會超過半秒。
謝謝。這是一段有趣的代碼。爲什麼你認爲,這個解決方案比使用UIAccelerometerDelegate更耗資源?不斷使用UIAccelerometerDelegate進程......但是如果我需要每小時3次的座標(事件由用戶操作驅動),那麼比你的代碼片段似乎是更好的解決方案?! – 2013-03-24 11:39:53
更耗費資源,我的意思是如果你試圖將這個while循環卸載到單獨的NSThread。這段代碼**會將用戶界面凍結半秒鐘,而在較舊的設備上,這可能不是那麼棒的體驗。我沒有這樣的硬件來測試它,但我認爲你應該在舊硬件上測試它。 – 2013-03-24 13:32:40
如果你需要數據只有每小時3次,你可以使用
accelerometer.delegate = nil;
這應該防止資源損失(至少足以告訴系統你的應用程序做的不是需要加速計數據僅僅停留代表團瞬間)
我不認爲有一個委託對象會花費太多的資源。 – 2013-03-24 09:21:23