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