У меня есть быстрый вопрос касательно отслеживания касаний iPhone, и я, похоже, не могу прийти к выводу об этом, поэтому любые предложения и идеи очень ценятся:
Я хочу отслеживать и идентифицировать штрихи на iphone, т.е. в основном каждое касание имеет начальную позицию и текущую/перемещенную позицию. Прикосновения сохраняются в std::vector, и они должны быть удалены из контейнера после их окончания. Их положение должно обновляться после их перемещения, но я все же хочу отслеживать, откуда они начали (распознавание жеста).
Я получаю штрихи от [event allTouches], дело в том, что NSSet является несортированным, и я, похоже, не могу идентифицировать касания, которые уже хранятся в std::vector, и ссылаются на штрихи в NSSet ( поэтому я знаю, какие из них были закончены, и они будут удалены или перемещены и т.д.)
Вот мой код, который отлично работает с одним пальцем на сенсорном экране, конечно, но с более чем одним я получаю непредсказуемые результаты...
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) handleTouches:(NSSet*)allTouches
{
for(int i = 0; i < (int)[allTouches count]; ++i)
{
UITouch* touch = [[allTouches allObjects] objectAtIndex:i];
NSTimeInterval timestamp = [touch timestamp];
CGPoint currentLocation = [touch locationInView:self];
CGPoint previousLocation = [touch previousLocationInView:self];
if([touch phase] == UITouchPhaseBegan)
{
Finger finger;
finger.start.x = currentLocation.x;
finger.start.y = currentLocation.y;
finger.end = finger.start;
finger.hasMoved = false;
finger.hasEnded = false;
touchScreen->AddFinger(finger);
}
else if([touch phase] == UITouchPhaseEnded || [touch phase] == UITouchPhaseCancelled)
{
Finger& finger = touchScreen->GetFingerHandle(i);
finger.hasEnded = true;
}
else if([touch phase] == UITouchPhaseMoved)
{
Finger& finger = touchScreen->GetFingerHandle(i);
finger.end.x = currentLocation.x;
finger.end.y = currentLocation.y;
finger.hasMoved = true;
}
}
touchScreen->RemoveEnded();
}
Спасибо!