2010-04-18 3 views
4

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

Я использую для этого события TouchBegan, Moved and Ended.

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

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

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

UITouch * прикасается = [само getAllTouchesonScreen];

или что-то :)

+1

Что вы подразумеваете под штрихами, которые не были уволены должным образом? Вы проверяли свой код, а не предполагали, что структура отвечает? touchsBegan, Moved and Ended дает вам NSSet * всех штрихов на экране, поэтому вы можете проверить, что он соответствует количеству штрихов, которые ваше приложение считает своим ... –

ответ

3

Прикосновения Закончилось событие иногда не уволят.

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

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

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

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

3
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] 
    } 
} 

Вы можете использовать этот код во всех сенсорных функциях событий (затрагиваетBegan, touchedEnded, touchMMoved), и вы можете подсчитывать штрихи и знать их состояния.

1

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