是否可以在不使用连续委托的情况下请求 的值Accelerometer/Gyroscope
(例如 usingUIAccelerometerDelegate
或类似的东西CMMotionManager startGyroUpdatesToQueue
)?我的意思是,我只想请求一次 和 的值x
,y
并且z
尽可能节省资源。
谢谢你。
是否可以在不使用连续委托的情况下请求 的值Accelerometer/Gyroscope
(例如 usingUIAccelerometerDelegate
或类似的东西CMMotionManager startGyroUpdatesToQueue
)?我的意思是,我只想请求一次 和 的值x
,y
并且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);
这只是您可以做些什么来使事情正常进行的一个示例。在我看来,这是一个非常糟糕的主意,但如果你想完成它,它确实可以让事情顺利进行。
该代码非常简单明了,您告诉 aCMMotionManager
开始从加速度计或陀螺仪检索数据,然后向其请求数据。这就是为什么它不好,更新有间隔,所以在前几毫秒,从中检索到的数据CMMotionManager
是零值的。这就是 while 循环的用途。这种类型的事情应该被卸载到另一个线程,这样 UI 就不会被阻塞,但它比它更消耗资源UIAccelerometerDelegate
并且阻塞不会超过半秒。
如果您每小时只需要 3 次数据,您可以停止使用
accelerometer.delegate = nil;
这应该可以防止资源丢失(至少足以告诉系统您的应用目前不需要加速度计数据)