在没有平移手势的情况下获得平移的速度

时间:2012-11-11 04:45:52

标签: ios cocoa-touch uiview uikit uitouch

我正在编写一个UIView子类,它使用-touches{Began,Moved,Ended,Cancelled}:withEvent:方法来跟踪拖动和点击。 (我没有使用平移手势识别器,因为它不能识别只是一个水龙头,我不使用水龙头加一个平底锅识别器,因为它们似乎没有以相同的方式穿过阶段。相信我,我已经尝试了两三次了。)在拖动结束时,我想检查速度并对我正在执行的操作做一个小调整,如果他们的手指离开屏幕仍在移动时

问题是,我从速度计算代码中得到了一些奇怪的行为。我的触摸处理方法最终都称为这种简单的速度计算方法:

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

有时甚至更高 - 我看到滑动的结束速度超过100,否则从未达到15。

知道为什么会这样吗?我应该使用的算法不同于我在这里展示的简单差异吗?

0 个答案:

没有答案