estoy probando las nuevas características de CoreMotion, sobre todo la posibilidad de establecer el marco de referencia, pero si uso un DeviceMotionHandler y el marco de referencia establecido en CMAttitudeReferenceFrameXTrueNorthZVertical la salida es algunos de CMAttitudeReferenceFrameXArbitraryCorrectedZVertical. inicio la aplicación con el iphone siempre en la misma rotación de orientación respecto a mi escritorio, y pruebo diferentes rotaciones iniciales de guiñada, pero el resultado es siempre el mismo.CoreMotion iOS 5 actitud con marco de referencia no funciona
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];
encontré la solución a mi problema, pero no puedo entender por qué el código anterior no funciona. Agrego solo una variable CMAttitude * a en 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];}
Veo el mismo comportamiento. La actitud en el parámetro de movimiento que se pasa al bloque parece ser la actitud "normal", mientras que la actitud en la propiedad deviceMotion parece compensarse con el marco de referencia. Me pregunto si esto es un error, o si puedo confiar en este comportamiento, ya que es bastante útil. La combinación de los dos hace posible compensar el peculiar comportamiento magnético del iPhone con una dirección derivada del giros estable. – fishinear
He informado esto como un error hacia Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/59/wo/1sukWbI5nvOZQ2Y6MPBXnw/14.66 – fishinear