0

-touches{Began,Moved,Ended,Cancelled}:withEvent:メソッドを使用してドラッグとタップを追跡する UIView サブクラスを作成しています。(タップだけを認識しないため、パン ジェスチャ レコグナイザーは使用していません。タップとパン レコグナイザーは、同じようにフェーズを移動していないように見えるため、使用していません。信じてください。すでに 2 ~ 3 回試しました。) ドラッグの最後に速度を確認し、画面がまだ動いているときに指が画面から離れた場合に、実行中の操作を微調整したいと思います。 .

問題は、速度計算コードから奇妙な動作が発生することです。私のタッチ処理メソッドはすべて、この単純な速度計算メソッドを呼び出すことになります。

- (void)updateDraggingVelocityWithTouch:(UITouch*)touch {
    NSTimeInterval timespan = touch.timestamp - self.lastDraggingTimestamp;

    CGPoint pt = [touch locationInView:self];

    CGPoint v;
    v.x = (pt.x - self.lastDraggingLocation.x)/timespan;
    v.y = (pt.y - self.lastDraggingLocation.y)/timespan;
    self.draggingVelocity = v;

    NSLog(@"Velocity: %@", NSStringFromCGPoint(v));

    self.lastDraggingLocation = pt;
    self.lastDraggingTimestamp = touch.timestamp;
}

ただし、何らかの理由で、速度を正確に知りたいときに、パンの最後で異常に高い速度を計算しているようです。例えば:

2012-11-10 20:38:02.603 Alef[32850:907] Velocity: {0, 0}
2012-11-10 20:38:02.747 Alef[32850:907] Velocity: {-8.35417, 5.0125}
2012-11-10 20:38:02.763 Alef[32850:907] Velocity: {-30.2068, 0}
2012-11-10 20:38:02.780 Alef[32850:907] Velocity: {-29.7612, 0}
2012-11-10 20:38:02.796 Alef[32850:907] Velocity: {-30.2924, 0}
2012-11-10 20:38:02.863 Alef[32850:907] Velocity: {-7.48297, 0}
2012-11-10 20:38:02.930 Alef[32850:907] Velocity: {-7.526, 0}
2012-11-10 20:38:03.030 Alef[32850:907] Velocity: {-4.99497, 0}
2012-11-10 20:38:03.432 Alef[32850:907] Velocity: {-40.5009, 40.5009}

場合によってはそれ以上になることもあります。他の方法では 15 に達しないスワイプで 100 を超える終了速度を見たことがあります。

なぜこれが起こるのでしょうか?ここで示した単純な違いとは異なるアルゴリズムを使用する必要がありますか?

4

0 に答える 0