Как я могу определить, вращается ли iPhone, когда он лежит лицом вверх за столом? - PullRequest
3 голосов
/ 17 марта 2010

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

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

Ответы [ 4 ]

9 голосов
/ 17 марта 2010

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

РЕДАКТИРОВАТЬ - С iPhone 4 вы можете обнаружить вращение с помощью гироскопов. В iOS 4 появился новый класс CMMotionManager для получения скорости вращения от гироскопов.

5 голосов
/ 17 марта 2010

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

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

alt text

Это пример приложения AccelerometerGraph от Apple.

4 голосов
/ 17 марта 2010

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

2 голосов
/ 17 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...