Mark......
代码如下:
NSOperationQueue*queue = [[NSOperationQueuealloc]init];
[self.motionManagerstartAccelerometerUpdatesToQueue:queuewithHandler:^(CMAccelerometerData*_NullableaccelerometerData,NSError*_Nullableerror)
{
if(error)
{
[self.motionManagerstopAccelerometerUpdates];
[KGStatusBarshowSuccessWithStatus:[NSStringstringWithFormat:@"加速计遇到错误:%@!",error]];
}
else
{
doubleacc_X = accelerometerData.acceleration.x;
doubleacc_Y = accelerometerData.acceleration.y;
doubleacc_Z = accelerometerData.acceleration.z;
dispatch_async(dispatch_get_main_queue(), ^{
_accelerate_X.text= [NSStringstringWithFormat:@"%.2f",acc_X];
_accelerate_Y.text= [NSStringstringWithFormat:@"%.2f",acc_Y];
_accelerate_Z.text= [NSStringstringWithFormat:@"%.2f",acc_Z];
});
}}];
Core Motion在iOS4.0主要负责三种数据:加速度值,陀螺仪值,设备motion值。实际上,这个设备motion值就是通过加速度和旋转速度进行 fusing变换算出来的,基本原理后面会介绍。Core Motion在系统中以单独的后台线程的方式去获得原始数据,并同时执行一些motion算法来提取更多的信息,然后呈献给应用层做进一步处理。Core Motion框架包含有一个专门的Manager类,CMMotionManager,然后由这个manager去管理三种和运动相关的数据封装类,而 且,这些类都是CMLogItem类的子类,所以相关的motion数据都可以和发生的时间信息一起保存到对应文件中,有了时间戳,两个相邻数据之间的实 际更新时间就很容易得到了。这个东西是非常有用的,比如有些时候,你得到的是50Hz的采样数据,但希望知道的是每一秒加速度的平均值。
Quote: Core Motion在系统中以单独的后台线程的方式去获得原始数据
So. 要在dispatch_get_main_queue中完成对UI的刷新
网友评论