Comment puis-je détecter si un iPhone tourne tout en étant face vers le haut dans une table?

StackOverflow https://stackoverflow.com/questions/2458865

Question

Y at-il un moyen de détecter si un iphone couché dans une table, face tourne jusqu'à ?. Je me rends bien compte que ce genre de mouvement n'est pas signalé par l'accéléromètre et ni est il fait rapport au - (BOOL) shouldAutorotateToInterfaceOrientation:. (UIInterfaceOrientation) méthode interfaceOrientation

Y at-il un moyen de détecter les variations d'angle pour le téléphone en rotation ainsi ?. Merci.

Était-ce utile?

La solution

Le vecteur de gravité sera constante pendant qu'il tourne sur une table plate de sorte que vous ne verrez rien sur les accéléromètres. Vous pouvez suivre les changements de cap de la boussole pour détecter cette rotation, mais seulement sur un iPhone 3G S. Voir CLLocationManager pour plus de détails, regardez les méthodes de rubrique.

EDIT - Avec un iPhone 4, vous pouvez détecter la rotation à l'aide des gyroscopes. Il y a une nouvelle classe dans iOS 4 appelé CMMotionManager pour obtenir taux de rotation à partir des gyroscopes.

Autres conseils

Lorsque le téléphone est à l'arrêt de la somme des vecteurs d'accélération doit être 1. Lorsque le téléphone est en rotation (en supposant que le capteur est excentré) la somme des vecteurs doit être supérieure à 1 et (espérons) quelque peu constante.

Si vous regardez la décadence de cette courbe, je ne serais pas surpris si cette forme est suffisamment distinctif pour être utilisé pour déterminer si le téléphone tourne ou non.

est le AccelerometerGraph app exemple d'Apple.

Je suppose que vous pourriez le faire si l'iPhone a une boussole. Autre que je ne pense pas qu'il sera possible ou fiable.

Cela dépend vraiment de l'emplacement de l'accéléromètre sur l'appareil, je viens de tester cela en utilisant l'exemple d'application de accelerometergraph sur un itouch 2g et vous pouvez voir l'accélération initiale sur l'axe x et y (2g ne pas la accéléromètre dans le centre du dispositif, je suppose). Donc, dans un sens, on pourrait détecter la rotation, mais je pense que le défi serait différenciant que l'accélération de l'accélération directionnelle. Et je suis sûr que les valeurs changeraient si Apple a placé l'accéléromètre à différents endroits sur différents modèles. Il n'y aurait definitally pas une façon de le faire via shouldAutorotateToInterfaceOrientation, je vous recommande de charger l'exemple d'application de accelerometergraph dans le sdk et expérimenter avec les vecteurs d'accélération pour voir si vous pouvez isoler un vecteur de rotation de manière fiable sur plusieurs appareils.

scroll top