0

是否可以在不使用连续委托的情况下请求 的值Accelerometer/Gyroscope(例如 usingUIAccelerometerDelegate或类似的东西CMMotionManager startGyroUpdatesToQueue)?我的意思是,我只想请求一次 和 的值xy并且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);

这只是您可以做些什么来使事情正常进行的一个示例。在我看来,这是一个非常糟糕的主意,但如果你想完成它,它确实可以让事情顺利进行。

该代码非常简单明了,您告诉 aCMMotionManager开始从加速度计或陀螺仪检索数据,然后向其请求数据。这就是为什么它不好,更新有间隔,所以在前几毫秒,从中检索到的数据CMMotionManager是零值的。这就是 while 循环的用途。这种类型的事情应该被卸载到另一个线程,这样 UI 就不会被阻塞,但它比它更消耗资源UIAccelerometerDelegate并且阻塞不会超过半秒。

于 2013-03-24T09:38:51.147 回答
0

如果您每小时只需要 3 次数据,您可以停止使用

accelerometer.delegate = nil;

这应该可以防止资源丢失(至少足以告诉系统您的应用目前不需要加速度计数据)

于 2013-11-20T17:23:54.190 回答