Próbuję nowych funkcji CoreMotion, przede wszystkim możliwość ustawienia ramki odniesienia, ale jeśli używam DeviceMotionHandler i ramka odniesienia ustawiona na CMAttitudeReferenceFrameXTrueNorthZVertical, wyjście jest niektóre z CMAttitudeReferenceFrameXArbitraryCorrectedZVertical. Uruchamiam aplikację z iPhonem zawsze w tej samej rotacji odchylenia, szanuję moje biurko i testuję różne początkowe odchylenia, ale wynik jest zawsze taki sam.Ustawienie CoreMotion iOS 5 z ramką odniesienia nie działa
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];
znalazłem rozwiązanie mojego problemu, ale nie mogę zrozumieć, dlaczego poprzedni kod nie działa. Dodaję tylko zmienną CMAttitude * a w motionHandler.
- (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];}
Widzę to samo zachowanie. Postawa w parametrze ruchu przekazywana do bloku wydaje się być postawą "normalną", podczas gdy postawa w właściwości deviceMotion wydaje się być kompensowana ramką odniesienia. Zastanawiam się, czy jest to błąd, czy mogę polegać na tym zachowaniu, ponieważ jest całkiem użyteczny. Połączenie tych dwóch elementów pozwala zrekompensować dziwne zachowanie magnetyczne iPhone'a ze stabilnym kierunkiem pochylenia żyroskopu. – fishinear
Zgłaszałem to jako błąd w stosunku do Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/59/wo/1sukWbI5nvOZQ2Y6MPBXnw/14.66 – fishinear