2010-03-16 1 views
3

Есть ли способ определить, вращается ли iphone, лежащий в таблице лицом вверх ?. Я действительно понимаю, что этот тип движения не сообщается акселерометром, и он также не сообщает об интерфейсе метода (BOOL) toAutorotateToInterfaceOrientation: (UIInterfaceOrientation).Как определить, поворачивается ли iPhone, находясь лицом вверх в таблице?

Есть ли способ обнаружить изменения угла для телефона, вращающегося таким образом ?. Спасибо.

ответ

9

Вектор гравитации будет постоянным, поскольку он вращается на плоском столе, чтобы вы не увидели ничего на акселерометрах. Вы можете следить за изменениями компаса, чтобы обнаружить это вращение, но только на iPhone 3G S. Подробнее см. В разделе CLLocationManager. Ознакомьтесь с методами заголовка.

EDIT - С iPhone 4 вы можете обнаружить вращение с помощью гироскопов. В iOS 4 есть новый класс CMMotionManager для получения rotation rate из гироскопов.

4

Думаю, вы могли бы это сделать, если у iPhone есть компас. Помимо этого я не думаю, что это будет возможно или надежно.

+10

Эффективность будет быстро ухудшаться по мере приближения к магнитным полюсам; это исключило бы несколько ключевых демографий (пингвинов, Санта-Клауса и игрушечных эльфов, чтобы назвать их несколько). – stack

2

Это будет действительно зависеть от местоположения акселерометра на устройстве, я просто проверил это, используя приложение образца акселерометрического анализа на 2g itouch, и вы можете увидеть начальное ускорение на оси x и y (у 2g нет как мне кажется, акселерометр в центре устройства). Таким образом, в некотором смысле вы можете обнаружить поворот, однако я думаю, что проблема будет заключаться в дифференциации этого ускорения от направленного ускорения. И я уверен, что значения изменились бы, если бы яблоко разместило акселерометр в разных местах на разных моделях. Определенно не было бы никакого способа сделать это через shouldAutorotateToInterfaceOrientation, я рекомендую загрузить приложение примера акселерометрического анализа в sdk и поэкспериментировать с векторами ускорения, чтобы увидеть, можно ли надежно изолировать вектор вращения на нескольких устройствах.

+0

На самом деле я попытался использовать образец графа акселерометра, и, когда я понял, ничего не сообщалось. –

5

Когда телефон неподвижен, сумма векторов ускорения должна быть равна +1. Когда телефон вращается (при условии, что датчик находится не по центру) сумма векторов должна быть более 1 и (надеюсь) несколько постоянной.

Если вы посмотрите на распад этой кривой, я не удивлюсь, если эта форма является достаточно отличительной, чтобы ее можно было определить, поворачивается или нет.

alt text http://i39.tinypic.com/14vnztx.png

Это AccelerometerGraph образец приложение от Apple.

+0

Хорошие графики. Есть ли приложение для этого? – progrmr

+0

Благодарим вас за ввод. Я попытался использовать это приложение, а затем повернул свой iphone, но я не видел никаких изменений на акселерометре. Может быть, мой датчик находится в центре? –

+0

Как быстро вы его вращали? Я поставил свой телефон на стол и дал ему хороший поворот. Видите ли вы, что графики меняются при изменении ориентации вашего телефона? – kubi

Смежные вопросы