1

touchesBeganからtouchesMovedまでの個別のタッチ シーケンスを追跡したいと思いtouchesEndedます。シングル タッチ イベントの座標を取得していますが、どのタッチ イベントがどのタッチ イベント シーケンスに対応しているか知りたいです。

たとえば、最初の指を画面上で動かしているときに、2 番目の指で画面に触れて最初の指を離した場合、最初の指の座標を赤色で表示し、2 番目の指の座標を青色。

これは可能ですか?はいの場合、どのイベントを「赤」にし、どのイベントを「青」にするかをどのように判断すればよいですか?

これは私のコードです:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self handleTouches:[event allTouches]];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [self handleTouches:[event allTouches]];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self handleTouches:[event allTouches]];
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [self handleTouches:[event allTouches]];
}

- (BOOL)handleTouches: (NSSet*)touches {
    for (UITouch* touch in touches) {
        // ...
    }
}
4

2 に答える 2

6

タッチ オブジェクトはイベント全体で一貫しているため、赤と青のタッチを追跡する場合は、それぞれに iVar を宣言し、タッチが開始されたら、その ivar に必要なタッチを割り当ててから、ループして、タッチが保存したポインターと同じかどうかを確認します。

UITouch *red;
UITouch *blue;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch* touch in touches) {
        if(something) red = touch;
        else blue = touch;
    }
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [self handleTouches:touches];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch* touch in touches) {
        if(red == touch) red = nil;
        if(blue == touch) blue = nil;
    }
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch* touch in touches) {
        if(red == touch) red = nil;
        if(blue == touch) blue = nil;
    }
}

- (BOOL)handleTouches: (NSSet*)touches {
    for (UITouch* touch in touches) {
        if(red == touch) //Do something
        if(blue == touch) //Do something else
    }
}
于 2012-06-10T20:11:14.827 に答える