Я работаю над приложением, которое использует жест движения наклонной стороны. У меня есть работа с использованием данных CMDeviceMotion через значения CMQuaternion, чтобы получить «roll» через Using quaternion instead of roll, pitch and yaw to track device motion, но у меня есть одна странная битка поведения, когда выход будет работать отлично, а другие нет.CMDeviceMotion в альбомной ориентации
Приложение заблокировано для ориентации на пейзаж (в обоих направлениях), но я заметил, что если я запустил приложение, находящееся в портретной ориентации, мой кодовый код отлично работает с модификатором pi/2. Если я открою приложение с устройством, находящимся в ландшафте, он будет работать на шаге без модификатора.
Проблема в том, что у меня нет способа узнать, что использовать! Есть ли способ обнаружения или переустановки системы координат?
UPDATE:
Я солгать, если я начинаю в альбомной ориентации, кажется, просто выбрать случайную ось :(Я предполагаю, что это опять вещь шарнирного замка, но до сих пор применяется оригинальный вопрос - как сделать получить это, чтобы быть последовательным, когда я запустить устройство в альбомной ориентации
UPDATE 2:
Некоторые лексема код (прибывающий из NSNotification) для людей, которые не умеют читать и чувствовать необходимость 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);
Запуск с startDeviceMotionUpdatesToQueue
в AppDelegate.
Это не имеет значения, поскольку проблема заключается в том, что данные кватерниона стабильны, когда устройство находится в портретной ориентации при запуске, но не с ландшафтной ориентацией. То, что я предпочитаю делать с данными устройства, - совершенно отдельная проблема.
Это аналогичный вопрос без удовлетворительного ответа (или любой код в вопросе: |) CMDeviceMotion yaw values unstable when iPhone is vertical
Если у вас есть код, который не работает так, как вы ожидаете, _show_ ваш код. Ваш вопрос говорит только о самых неопределенных общностях; кто знает, что вы делаете, или даже в чем проблема? – matt
Код не там, где проблема. Я сделал расчет с использованием CMQuaternions, как я сказал, но выход устройства отличается и нестабилен на основе ориентации на запуск - как это связано с моим кодом? – Martin
«Как это связано с моим кодом?» Потому что единственный способ узнать, что такое «выход устройства», - это ваш код. – matt