Запрос текущего количества касаний на экране без использования событий на iPhone - PullRequest
4 голосов
/ 18 апреля 2010

У меня есть приложение, которое начинает воспроизводить звук, когда пользователь касается uiview, и переключается на другие тона, когда пользователь проводит пальцем по экрану. Звук прекращается, когда пользователь поднимает палец.

Для этого я использую события touchesBegan, Moved и Ended.

Моя проблема в том, что касания. Заканчивается (и / или отменяется), иногда не срабатывает должным образом, и звук продолжает воспроизводиться даже после того, как палец поднят с экрана.

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

Я искал какой-нибудь код, который мог бы дать мне количество прикосновений, например

UITouch * touch = [self getAllTouchesonScreen];

или что-то:)

Ответы [ 3 ]

3 голосов
/ 01 июня 2010
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
    UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
    if([touch phase] != UITouchPhaseCancelled)
    {
        CGPoint touchPoint = [touch locationInView:self];
        //do something with touchPoint that has state [touch phase]
    }
}

Вы можете использовать этот код во всех функциях событий касания (touchesBegan, touchesEnded, touchesMoved), и вы можете считать касания и знать их состояния.

3 голосов
/ 19 апреля 2010

Событие Touches Ended иногда не срабатывает.

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

попробуйте пример программы GLPaint с веб-сайта Apple и попробуйте NSLog в конце, сделайте несколько быстрых рисунков на экране и быстро поднимите палец, как, например, сбросив палец с экрана.

Вы поймете, что я имею в виду. Мое текущее решение для этого включает акселерометр:)

Подсказка: я использую это, чтобы найти все события: (void) sendEvent: (UIEvent *) event

1 голос
/ 07 июля 2010

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

Если вы ищете количество нажатий - постукивание в одном и том же месте более одного раза без сильных движений пальца - вы можете получить его с помощью:

-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];

Но я также делаю это вручную, используя touchesMoved, чтобы увидеть, как FAR он переместился, и отменить возможность двойного / тройного касания, если какой-либо из касаний переместился слишком далеко, и подсчета касаний, пока вы находитесь в действительном состоянии касания.

...