私はタッチの動きの速度を検出しようとしています。私はいつも期待していた結果を得ているわけではありません。 (追加:スピードがあまりにも急上昇)私が何かファンキーなことをしている、またはそれをやるより良い方法を提案してくれる人はいますか?UITouch移動速度検出
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
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 = distanceBetweenPoints(location,prevLocation);
NSTimeInterval timeSincePrevious = event.timestamp - self.previousTimestamp;
CGFloat speed = distanceFromPrevious/timeSincePrevious;
self.previousTimestamp = event.timestamp;
NSLog(@"dist %f | time %f | speed %f",distanceFromPrevious, timeSincePrevious, speed);
}
ねえ...これを実装するのに問題があります。ラムダ関数はobjective-cの一部ですか?それを実装するためには何が必要ですか? tia – dizy
いいえ...あなたが指定する定数です。 1に近ければ近いほど、最新の値に重点を置きます。 n値の算術平均と比較します。それぞれの新しい値は1/nの重みを取得します。 指数関数の場合、lambda = 2 /(n + 1)を設定します。ここで、nは等価算術値です。したがって、新しい値は1/nの代わりに2 /(n + 1)の重み付けされ、既存の移動平均は(1-λ)=(n-1)/(n + 1)追加されました。 もっと明瞭ですか? – Jim