2012-03-10 4 views
1

я реализовал следующие обработчик событий в моей UIView:touchesEnded иногда не называется

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
    {  
     self.multipleTouchEnabled = YES; 
    } 
    return self; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSArray* touchObjects = [[event allTouches] allObjects]; 
    for(int i=0; i<[touchObjects count]; i++) 
    { 
     touch = (UITouch*)[touchObjects objectAtIndex:i]; 
     curPoint = [touch locationInView:self]; 
     NSLog([NSString stringWithFormat:@"begin = %f,%f",curPoint.x,curPoint.y]); 
    }  
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint curPoint; 
    for (UITouch *touch in touches) 
    { 
     curPoint = [touch locationInView:self]; 
     NSLog([NSString stringWithFormat:@"ended = %f,%f",curPoint.x,curPoint.y]); 
    } 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //logging touches 
} 

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //logging touches 
} 

Проблема заключается в том, я иногда не получаю «touchesEnded» (или touchedCancelled) события. Я всегда получаю события «touchhesBegan» и «touchedMoved».

У меня есть вход в эти методы, поэтому я на 100% уверен, что время от времени я не получаю события «touchhesEnded» (или touchsCancelled), которые я ожидаю.

multiTouch включен.

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

Есть ли работа для этого? Можно ли запросить представление (или окно) для текущих касаний?

+0

Было бы лучше, если бы вы показали нам свой * фактический * исходный код, так как он может содержать проблему, которую не имеет ваш поддельный исходный код. –

+0

Обновленный код. Это действительно так просто. BTW: iPhone 4, iOS 5.0.1. Его легче воспроизводить с несколькими касаниями, но это все равно будет происходить изредка одним касанием. – PleaseHelp

+0

Есть ли вообще запрос UIView, UIWindow или иначе для текущих касаний? – PleaseHelp

ответ

0

Ваш метод touchesBegan:withEvent: неверен. Он говорит, что это:

NSArray* touchObjects = [[event allTouches] allObjects]; 

Проблема заключается в том [event allTouches] возвращает все прикосновения, а не только прикасается в начальной фазе. Поэтому, когда первый палец касается экрана, вы запишете сообщение begin = %f,%f. Затем, когда второй палец коснется экрана, вы запишете два сообщенияbegin = %f,%f, один из которых на ощупь, который вы видели раньше.

Ваш метод touchesEnded:withEvent: правильно перечисляет аргумент touches, который содержит только штрихи в фазе завершения. Итак, для прикосновения с двумя пальцами вы запишете три сообщения «начать», но только два «завершенных» сообщения.

Я не знаю, как можно просить о текущих касаниях вне методов сенсорного управления.

+0

Я попробую переключить его и сообщить, что я вижу. Благодарю. – PleaseHelp

+0

По-прежнему такое же поведение. Зачастую я не получаю прикосновений. Не прикасался к соответствующим касаниям. Это может быть довольно просто. Я касаюсь экрана, он записывает начальное касание, я поднимаю палец, касается. Его гораздо более частые с несколькими касаниями, но это может произойти даже при одном касании. Совершенно необходимо знать, когда пользователь больше не касается экрана. Является ли код распознавателя жестов более стабильным? Куда идут эти события, если мой взгляд не получает их? – PleaseHelp

+0

Я знаю, что я не единственный, кто видит это, просто Google скажет вам это. Если я не могу получить текущие штрихи через запрос, есть ли способ, которым я могу сказать системе переоценить касания и повторно отправить их? – PleaseHelp

0

вы думаете использовать вместо этого - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event?

Смежные вопросы