У меня не получается заставить UIView
ответить, как я хочу, несколькими прикосновениями.По сути, UITouch
находятся в UITouchPhaseBegan
, но никогда не доходят до UITouchPhaseEnded
или UITouchPhaseCancelled
.Вот код, который я использую для обработки касаний, который вызывается из touchesBegan:withEvent
, touchesMoved:withEvent
, touchesEnded:withEvent
и touchesCancelled:withEvent
.Если я опущу один палец, затем другой, переместу их и одновременно отпущу, вывод NSLog
иногда Начался!Началось!Закончено! , а не Началось!Началось!Закончилось!Закончилось! .Эти штрихи где-то теряются?Как я могу отследить их?
- (void) handleTouchEvent:(UIEvent *)event {
for( UITouch* touch in [event allTouches] ) {
if( touch.phase == UITouchPhaseBegan ) {
NSLog(@"Began!");
if( ![m_pCurrentTouches containsObject:touch] )
[m_pCurrentTouches addObject:touch];
uint iVoice= [m_pCurrentTouches indexOfObject:touch];
CGPoint location = [touch locationInView:self];
m_pTouchPad->SetTouchPoint( location.x, location.y, iVoice );
m_pTouchPad->SetIsTouching( true, iVoice );
}
else if( touch.phase == UITouchPhaseMoved ) {
uint index= [m_pCurrentTouches indexOfObject:touch];
CGPoint location = [touch locationInView:self];
m_pTouchPad->SetTouchPoint( location.x, location.y, index );
}
else if( touch.phase == UITouchPhaseEnded || touch.phase == UITouchPhaseCancelled ) {
uint index= [m_pCurrentTouches indexOfObject:touch];
[m_pCurrentTouches removeObject:touch];
NSLog(@"Ended!");
m_pTouchPad->SetIsTouching( false, index );
}
}
}
РЕДАКТИРОВАТЬ:
Я предлагаю вознаграждение, потому что я действительно хочу хорошее решение для этого.Подводя итог: мне нужна система, в которой каждое касание, которое начинается, также заканчивается , поэтому, если пользователь кладет один палец, а затем другой в другое место, я вижу, что оба касания начинаются, и к тому времени, когда в нем нет пальцевконтакт с устройством больше, я видел конец обоих касаний.
Я преследую неправильную стратегию для достижения этой цели?