13

touchmoved関数で指の動きの速度と方向を取得するにはどうすればよいですか?

指の速度と指の方向を取得し、UIView クラスの方向の動きとアニメーションの速度に適用したいと考えています。

私はこのリンクを読みましたが、答えを理解できません。さらに、方向を検出する方法を説明していません:

UITouchの移動速度検出

これまでのところ、私はこのコードを試しました:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *anyTouch = [touches anyObject];
    CGPoint touchLocation = [anyTouch locationInView:self.view];
    //NSLog(@"touch %f", touchLocation.x);
    player.center = touchLocation;
    [player setNeedsDisplay];
    self.previousTimestamp = event.timestamp;    
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self.view];
    CGPoint prevLocation = [touch previousLocationInView:self.view];
    CGFloat distanceFromPrevious = [self distanceBetweenPoints:location :prevLocation];
    NSTimeInterval timeSincePrevious = event.timestamp - previousTimestamp;

    NSLog(@"diff time %f", timeSincePrevious);
}
4

2 に答える 2

21

方向は、touchesMoved の「location」と「prevLocation」の値から決定されます。具体的には、location には新しいタッチ ポイントが含まれます。例えば:

if (location.x - prevLocation.x > 0) {
    //finger touch went right
} else {
    //finger touch went left
}
if (location.y - prevLocation.y > 0) {
    //finger touch went upwards
} else {
    //finger touch went downwards
}

touchesMoved は、特定の指の動きに対して何度も呼び出されるようになりました。指が最初に画面に触れたときの初期値と、動きが最終的に完了したときの CGPoint の値を比較することがコードの鍵となります。

于 2012-04-22T20:57:46.437 に答える
8

obusemeの応答のバリエーションとして、以下だけではないのはなぜですか

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

         UITouch *aTouch = [touches anyObject];
         CGPoint newLocation = [aTouch locationInView:self.view];
         CGPoint prevLocation = [aTouch previousLocationInView:self.view];

         if (newLocation.x > prevLocation.x) {
                 //finger touch went right
         } else {
                 //finger touch went left
         }
         if (newLocation.y > prevLocation.y) {
                 //finger touch went upwards
         } else {
                 //finger touch went downwards
         }
}
于 2012-10-19T22:04:07.343 に答える