Запрос текущего количества касаний на экране без использования событий на iPhone
-
27-09-2019 - |
Вопрос
У меня есть приложение, которое начинает воспроизводить звук, когда пользователь касается UIView и меняется на разные тона, так как пользователь скользит пальцем на экране. Звук останавливается, когда пользователь поднимает палец.
Я использую TouchesBegan, переехал и закончил события для этого.
Моя проблема заключается в прикосновении, законченные (и / или отмененные) иногда не уволены должным образом, и звук продолжает играть, даже после того, как палец поднят с экрана.
Таким образом, как обходной путь, который я хотел бы реализовать таймер, который проверил бы количество касаний на экране, и если оно равен нулю, он будет проверять и остановить аудиоплазер, если играть.
Я искал какой-код, который мог бы получить мне количество штрихов, как
UITouch * касается = [Self GetallTouchesonscreen];
или что-то :)
Решение
Прикосновения к концу события иногда не уволяются.
Я попробовал настроить точки разрыва для прикосновения, отмененные и касаются окончания событий, и иногда он не попадает.
Попробуйте пробую образец GLAPAINT с веб-сайта Apple и попробуйте NSLog в Toches завершился и сделайте несколько быстрых рисунков на экране и быстро поднимите пальцем, например, бросать пальцем на экране.
Вы будете знать, что я имею в виду. Мое нынешнее решение для этого включает в себя акселерометр :)
Подсказка: я использую это, чтобы найти все события: (void) sendEvent: (UIEETECT *) событие
Другие советы
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, TouchSended, TouchesMed), и вы можете подсчитать касания и знать их состояния.
Не забывайте о придежденном. Добавьте эту функцию / метод и NSLOG, когда прикосновение заканчивается там, я думаю, вы найдете недостающие прикосновения.
Если вы ищете подсчет TAP - нажав в том же месте более одного раза, не двигая пальцем, - вы можете получить его через:
-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];
Но я также делаю это вручную, используя TouchesMed, чтобы увидеть, как далеко он перемещался и отменил возможность двойного / тройного крана, если какая-либо из крана перемещена слишком далеко, и подсчитывая краны, пока вы находитесь в действительном состоянии.