CoreMotion iOS 5态度与参考框架不起作用

时间:2011-10-27 15:12:21

标签: iphone objective-c ios5 core-motion

我正在尝试CoreMotion的新功能,首先是设置参考帧的可能性,但是如果我使用DeviceMotionHandler并且参考帧设置为CMAttitudeReferenceFrameXTrueNorthZVertical,则输出是CMAttitudeReferenceFrameXArbitraryCorrectedZVertical的一些。 我启动应用程序时,iphone始终处于与我的桌面相同的偏航旋转,我测试不同的初始偏航旋转,但结果始终相同。

motionManager = [[CMMotionManager alloc] init];
motionManager.showsDeviceMovementDisplay = YES;
motionManager.deviceMotionUpdateInterval = 1.0/60.0;    

CMDeviceMotionHandler  motionHandler = ^ (CMDeviceMotion *motion, NSError *error) {
    NSLog(@"%f      %f         %f", motion.attitude.pitch, motion.attitude.roll, motion.attitude.yaw);
};

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];

我找到了我的问题的解决方案,但我无法理解为什么以前的代码不起作用。 我在motionHandler中只添加了一个CMAttitude变量*。

- (void)viewDidLoad
{
[super viewDidLoad];
motionManager = [[CMMotionManager alloc] init];
motionManager.showsDeviceMovementDisplay = YES;
motionManager.deviceMotionUpdateInterval = 1.0/60.0;    

CMDeviceMotionHandler  motionHandler = ^ (CMDeviceMotion *motion, NSError *error) {
    CMAttitude *a = motionManager.deviceMotion.attitude;
    labelAngle.text = [NSString stringWithFormat:@"%f      %f         %f",a.pitch, a.roll,a.yaw];
    labelAngle2.text = [NSString stringWithFormat:@"%f       %f      %f", motion.attitude.pitch, motion.attitude.roll, motion.attitude.yaw];
};

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];}

1 个答案:

答案 0 :(得分:0)

我认为这是因为..如果首先定义处理程序,运动对象的attitude属性已经设置为默认值。稍后在您自己的代码中,这种态度属性变为只读。因此,当您使用此处理程序启动运动更新时,运动的姿态属性不再可以更改。但是motionManager.deviceMotion的attitude属性设置为你在startDeviceMotionUpdatesUsingReferenceFrame中指定的任何内容,当你使用startDeviceMotionUpdatesUsingReferenceFrame启动动画更新时,它会被读入一个对象。一个物体现在具有正确的姿态,而运动物体具有默认的姿态。