Как определить, держит ли пользователь iPhone рукой

Я ищу способ определить, держит ли пользователь свой iPhone рукой в ​​объективе-c. Проблема в том, что по некоторым причинам слой мультитач в моей игре для iPhone не работает должным образом, когда пользователь кладет свой iPhone на что-то (стол, стул, диван и т. д.) и использует его только одной рукой. Это не зависит от ориентации.

Любая помощь приветствуется!

Спасибо.


person Marco Fucci    schedule 03.11.2011    source источник
comment
Некоторые iPhone имеют для этого отличную встроенную функцию: просто проверьте уровень сигнала...   -  person kapex    schedule 03.11.2011
comment
@kapep: Я бы +100, если бы мог, за этот комментарий.   -  person    schedule 03.11.2011
comment
@Marco Марко Похоже, вы пытаетесь вычерпать воду из лодки, а не чинить в ней дыры. Для вас было бы лучше напрямую исправить проблему, когда она не работает над чем-то, чем создавать что-то новое, чтобы косвенно решить проблему.   -  person Jonathan.    schedule 03.11.2011
comment
@Jonathan Я много тестировал его, и вот что происходит: 1. Я кладу iPhone на стол, касаясь его правой рукой, в определенный момент слой мультитач становится неточным 2. Я слегка касаюсь края iPhone другой рукой, даже не двигая iPhone, и слой начинает работать отлично. Я начинаю думать, что это не зависит от моего кода. Кроме того, моя игра использует мультитач довольно особым образом, но, тем не менее, никаких проблем, когда я держу iPhone в руке, и я тестировал его в течение нескольких месяцев.   -  person Marco Fucci    schedule 03.11.2011
comment
@Марко, я бы попробовал это на чужом устройстве (желательно на одном той же модели, а на другом другой модели), чтобы определить, твой это телефон или нет, прикосновение к твоему телефону не должно влиять на точность сенсорный экран.   -  person Jonathan.    schedule 03.11.2011
comment
@Jonahan, я тоже пробовал это, я тестировал это на 2 iPhone 2G, 2 разных iPhone 4, iPhone 3G, iPhone 3GS и iPod 4-го поколения, и получил те же результаты.   -  person Marco Fucci    schedule 03.11.2011
comment
А что произойдет, если кто-то другой сделает то же самое с вашим iPhone? Проблема может быть в вас (электростатическая проблема с вашим телом).   -  person Oliver    schedule 04.11.2011
comment
@ Джонатан, это не только у меня, такая же проблема возникает и у нескольких людей, использующих его. Кроме того, если кабель подключен, все работает нормально.   -  person Marco Fucci    schedule 04.11.2011


Ответы (2)


Используйте CMMotionManager.

http://developer.apple.com/library/ios/#documentation/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html

Просто отслеживайте изменения «userAcceleration» устройства и анализируйте их. Если он не меняется, вы можете догадаться, что это неподвижный объект. Если это изменится, вы можете догадаться, что это в руках пользователя. Проблема в том, что это может быть не идеально и требует точной настройки и отладки, чтобы найти правильные значения, которые вы можете протестировать (идея: вы должны провести тест, чтобы увидеть, что произойдет, если iPhone находится на неподвижном объекте в движущемся объекте, таком как машина, автобус, поезд...).

Но это должно сработать.

person Oliver    schedule 03.11.2011
comment
+1, потому что я думаю, что это правильный ответ на мой первоначальный вопрос. К сожалению, я понял, что этого недостаточно для меня, потому что у людей в перчатках или с толстыми чехлами могут возникнуть проблемы. Я собираюсь принять это как ответ в какой-то момент, но я хотел бы оставить его открытым на данный момент. Спасибо. - person Marco Fucci; 04.11.2011

Вместо того, чтобы пытаться наложить кладж, вам нужно выяснить, что не так с реализацией слоя мультитач, что означает, что он не активируется правильно, если устройство не находится в чьей-то руке. Устройство, которое держат в руке, почти наверняка является лишь прокси того, какова реальная разница в условиях между тем, когда слой работает и когда он не работает... вам нужно выяснить, какова реальная разница в условиях.

Например: возможно, вы правильно регистрируете мультитач-движения только в том случае, если где-то еще в слое есть стационарное прикосновение — непреднамеренное прикосновение при удерживании устройства?

person Duncan Babbage    schedule 03.11.2011
comment
спасибо, Дункан, я пытался обдумать то, что ты сказал, но похоже, что это действительно связано с устройством. Как я уже писал, если я кладу айфон на стол постукивая правой рукой, а левой слегка касаюсь края (не экрана), то все работает нормально. Другими словами, мне не нужно держать его, чтобы заставить его работать. Кроме того, проблема не возникает, когда я нахожусь в режиме отладки и использую только правую руку, потому что кабель подключен, и все работает. Как вы понимаете, это действительно сложно отлаживать! - person Marco Fucci; 04.11.2011
comment
Хм. Какая-то массовая проблема со статическим электричеством? Это может повлиять на работу сенсорного экрана. Вы сказали, что пробовали несколько устройств... пробовали ли вы несколько столов? Например, в совершенно другой среде? Легкое прикосновение к боковой стороне телефона и подключение кабеля могут заземлить устройство... это может быть то, что происходит. :) - person Duncan Babbage; 04.11.2011
comment
да пробовал на разных поверхностях. Это происходит на столах, диванах, стульях, всегда с одним и тем же результатом. Надо наверное попробовать подержать в толстых перчатках, может дело в жаре? - person Marco Fucci; 04.11.2011
comment
Только что попробовал в перчатках, проблема все еще заметна, но менее серьезна. Я согласен с вами, моя рука может заземлять устройство, как вы думаете, я могу что-то с этим сделать? - person Marco Fucci; 04.11.2011
comment
Так что с перчатками проблема где-то между держанием руки и не касанием устройства? Это склоняется в сторону поддержки идеи о том, что это как-то связано с электростатическим зарядом. Теперь я вижу, что Оливер выше тоже предлагал то же самое — я этого не видел. Я действительно не понимаю, какое значение имеет нагрев, кроме как в одном неисправном устройстве — если бы существовала такая проблема, об этом было бы широко распространено. Нужно понять, почему незначительные различия будут отбрасывать ваши мультитач-жесты гораздо больше, чем другие. Слишком специфичные алгоритмы? - person Duncan Babbage; 04.11.2011
comment
спасибо @ Ducan-Babbage, я на самом деле пытался использовать пример проекта Apple под названием Touches, и я все еще мог воспроизвести проблему на разных устройствах. Думаю, я не могу так много с этим поделать. - person Marco Fucci; 05.11.2011