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

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

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

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

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

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

UITouch *touch =[self getAllTouchesonScreen];

или что-то:)

3 ответа

Решение

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

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

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

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

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

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), и вы можете считать касания и знать их состояния.

Не забывайте о прикосновениях. Добавьте эту функцию / метод и 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 перемещается, и отменить возможность двойного / тройного касания, если какой-либо из касаний переместился слишком далеко, и подсчета касаний, пока вы находитесь в действительном состоянии касания.

Другие вопросы по тегам