ピクセル単位で移動したタッチの速度を追跡したい/秒
これについてアイデアを持っているバディ
PanGestureメソッドを除く
ピクセル単位で移動したタッチの速度を追跡したい/秒
これについてアイデアを持っているバディ
PanGestureメソッドを除く
一連の動きの平均ではなく、連続する動きの間の速度を知りたいと仮定します。ただし、他の要件がある場合、理論は簡単に適応できるはずです。
次の3つのことを知っておく必要があります。
次に、ピタゴラスを使用して距離を取得し、時間で割って速度を求めます。
touchesMovedイベントを取得すると、現在および以前の位置が提供されます。次に追加する必要があるのは、時間の測定です。
そのためには、クラスのNSDateプロパティが時間間隔の計算に役立つようにする必要があります。viewDidLoad / viewDidUnload、または同様の場所で初期化して解放できます。私の例では、私のものはlastTouchTimeと呼ばれ、保持され、次のように初期化されています。
self.lastTouchTime = [NSDate date];
そして私はそれを予測可能な方法でリリースします。
touchesMovedイベントは、次のようになります。
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray *touchesArray = [touches allObjects];
UITouch *touch;
CGPoint ptTouch;
CGPoint ptPrevious;
NSDate *now = [[NSDate alloc] init];
NSTimeInterval interval = [now timeIntervalSinceDate:lastTouchTime];
[lastTouchTime release];
lastTouchTime = [[NSDate alloc] init];
[now release];
touch = [touchesArray objectAtIndex:0];
ptTouch = [touch locationInView:self.view];
ptPrevious = [touch previousLocationInView:self.view];
CGFloat xMove = ptTouch.x - ptPrevious.x;
CGFloat yMove = ptTouch.y - ptPrevious.y;
CGFloat distance = sqrt ((xMove * xMove) + (yMove * yMove));
NSLog (@"TimeInterval:%f", interval);
NSLog (@"Move:%5.2f, %5.2f", xMove, yMove);
NSLog (@"Distance:%5.2f", distance);
NSLog (@"Speed:%5.2f", distance / interval);
}
申し訳ありませんが、メモリ管理を使って偽物を作ったとしても、ObjectiveCのやり方にはまだあまり慣れていません。必要に応じて誰かが修正できると確信しています!
頑張って、凍えそうに。