sto provando le nuove funzionalità di CoreMotion, soprattutto la possibilità di impostare il frame di riferimento, ma se utilizzo un DeviceMotionHandler e il frame di riferimento impostato su CMAttitudeReferenceFrameXTrueNorthZVertical l'output è alcuni di CMAttitudeReferenceFrameXArbitraryCorrectedZVertical. avvio l'app con l'iphone sempre nella stessa rotazione di imbardata rispetto alla mia scrivania, e provo diverse rotazioni di imbardata iniziale, ma il risultato è sempre lo stesso.CoreMotion L'atteggiamento di iOS 5 con frame di riferimento non funziona
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];
ho trovato la soluzione del mio problema, ma non riesco a capire perché il codice precedente non funziona. Aggiungo solo una variabile CMAttitude * a in 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];}
Vedo lo stesso comportamento. L'atteggiamento nel parametro di movimento che viene passato al blocco sembra essere l'atteggiamento "normale", mentre l'atteggiamento nella proprietà deviceMotion sembra essere compensato con il frame di riferimento. Mi chiedo se questo sia un bug, o se posso fare affidamento su questo comportamento, in quanto è abbastanza utile. La combinazione dei due rende possibile compensare il comportamento magnetico eccentrico di iPhone con una direzione stabile del giroscopio. – fishinear
Ho segnalato questo come un bug verso Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/59/wo/1sukWbI5nvOZQ2Y6MPBXnw/14.66 – fishinear