Ich habe an einer App gearbeitet, die eine Side-to-Side-Tilt-Motion-Geste verwendet. Ich habe es funktioniert mit den CMDeviceMotion Daten über die CMQuaternion Werte zu bekommen "roll" über Using quaternion instead of roll, pitch and yaw to track device motion, aber ich habe ein komisches Stück Verhalten, wo die Ausgabe manchmal perfekt funktioniert und andere nicht.CMDeviceMotion in Querformat
Die App ist auf Querformat (beide Richtungen) gesperrt, aber ich habe festgestellt, dass, wenn ich die App in Hochformat-Ausrichtung gestartet habe, funktioniert mein Rollcode perfekt mit einem Pi/2-Modifikator. Wenn ich die App mit dem Gerät im Querformat öffne, funktioniert es auf Tonhöhe ohne Modifikator.
Das Problem ist, dass ich keine Möglichkeit habe zu wissen, welche zu verwenden! Gibt es eine Möglichkeit, den Referenzrahmen zu erkennen oder zurückzusetzen?
UPDATE:
ich lügen, wenn ich im Querformat beginnen scheint es nur eine zufällige Achsen zu holen :(Ich nehme an, dies ist wieder ein Gimbal Lock-Sache, aber die ursprüngliche Frage gilt immer noch - wie ich tun erhalten diese konsequent zu sein, wenn ich das Gerät in einer Landschaft Orientierung beginnen
UPDATE 2:
Einige Token-Code (von NSNotification kommt) für Menschen, die nicht lesen können und das Bedürfnis verspüren, ohne downvote.
CMDeviceMotion *data = [[note userInfo] valueForKey:@"data"];
CMQuaternion quat = data.attitude.quaternion;
CGFloat roll = atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z);
CGFloat pitch = atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z);
CGFloat yaw = 2*(quat.x*quat.y + quat.w*quat.z);
NSLog(@" - - ");
NSLog(@"raw roll: %f",roll);
NSLog(@"raw pitch: %f",pitch);
NSLog(@"raw yaw: %f",yaw);
NSLog(@"q.x: %f",quat.x);
NSLog(@"q.y: %f",quat.y);
NSLog(@"q.z: %f",quat.z);
NSLog(@"q.w: %f",quat.w);
gestartet von startDeviceMotionUpdatesToQueue
in AppDelegate.
Dies ist jedoch irrelevant, da die Quaternion-Daten stabil sind, wenn sich das Gerät beim Start im Hochformat befindet, aber nicht im Querformat. Was ich mit den Gerätedaten mache, ist ein völlig separates Problem.
Dies ist ein ähnliches Problem ohne eine befriedigende Antwort (oder jeder Code in der Frage: |) CMDeviceMotion yaw values unstable when iPhone is vertical
Wenn Sie Code haben, der nicht wie erwartet funktioniert, zeigen Sie _show_ Ihren Code an. Deine Frage redet nur in den allerwenigsten Allgemeinheiten; Wer weiß, was du machst oder was das Problem ist? – matt
Der Code ist nicht, wo das Problem liegt. Ich habe eine Berechnung mit CMQuaternions vorgenommen, wie ich bereits sagte, aber die Ausgabe des Geräts unterscheidet sich und ist basierend auf der Launch-Orientierung instabil - wie steht das mit meinem Code? – Martin
"Wie ist das mit meinem Code verbunden?" Weil Sie nur wissen, was die "Geräteausgabe" ist, durch Ihren Code. – matt