我想要CoreMotion的新功能,首先設置參考框架的可能性,但如果我使用DeviceMotionHandler和參考框架設置爲CMAttitudeReferenceFrameXTrueNorthZVertical輸出是一些CMAttitudeReferenceFrameXArbitraryCorrectedZVertical。 我開始與iPhone的應用程序總是在相同的偏航旋轉尊重我的桌子,我測試不同的初始偏航旋轉,但結果總是相同的。CoreMotion iOS 5態度與參考框架不起作用
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變量* a。
- (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];}
我看到相同的行爲。傳遞給塊的運動參數的態度似乎是「正常」的態度,而deviceMotion屬性中的態度似乎用參考幀來補償。我想知道這是一個錯誤,還是我可以依賴這種行爲,因爲它非常有用。將這兩者結合起來,可以用穩定的陀螺儀衍生方向來補償iPhone的古怪磁性行爲。 – fishinear
我已經向Apple報告了這個錯誤:https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/59/wo/1sukWbI5nvOZQ2Y6MPBXnw/14.66 – fishinear