2012-04-22 10 views
11

Touchmoved関数でフィンガーの動きの速度と方向を取得するにはどうすればよいですか?UITouch touchesMovedフィンガーの方向と速度

指の速度と指の方向を取得し、UIViewクラスの方向とアニメーションの速度で適用したいと思います。

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

UITouch movement speed detection

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

-(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); 
} 

答えて

17

方向はtouchesMovedの "location"と "prevLocation"の値から決定されます。具体的には、位置にはタッチの新しい点が含まれます。例:

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の値とを比較するのがコードの鍵になります。

+0

これをチェックしてくださいとしてだけではなく、以下、私もタッチを比較していますが、その速度が遅いとなってhttp://stackoverflow.com/questions/21952274/how-効果的な処理 - マルチタッチシーケンスのuituitches – Ranjit

+0

方向の上下に関するコメントを編集してください、彼らは反対です – Garnik

5

なぜ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 
     } 
} 
+0

'[super touchesMoved:touches withEvent:event]'を忘れないでください! :D – taber

関連する問題