我找到了。android 为相同(或关闭)位置提供 ACTION_MOVE 然后 ACTION_UP。iPhone根本不这样做!它只是给了一个touchesEnded!因此,如果有动作,我将至少在 android 上始终有 3 个点,但在 iPhone 上是 2 个点(触地,在不同位置触碰)
接下来的事情是 ACTION_MOVE 和 ACTION_UP 不会立即发生,并且在计算采样点的平均速度时它的重要时间间隔。
解决方案:在 ACTION_UP 上,如果存储了所有秒数的 ACTION_MOVE 滑动,那么 ACTION_MOVE 在 ACTION_UP 发生时“发生”。不要将最后的修饰点放在速度计算中。现在像往常一样计算速度。
概括
在 Android 上,如果您移动了手指,则会在 ACTION_UP 之前获得 ACTION_MOVE。并且 ACTION_UP 大致位于 ACTION_MOVE 的相同位置,看起来好像最后的速度大致为 0。iPhone 不这样做,iPhone 不会为最后一次 touchesEnded 提供 touchesMoved(IE 触摸,移动手指,抬起,如果你在 iPhone 上做得足够快,你不会得到 touchesMoved 你的手指的中间事件,就像你在 android 上所做的那样)。
Android / iPhone等效的
- ACTION_UP = touchesEnded
- ACTION_DOWN = touchesBegan
- ACTION_MOVE = touchesMoved
我还注意到在 Android 上有一些点历史功能。我没有使用那些。我在我自己的数组中存储了触摸和时间戳。