2

我想知道用户何时触摸屏幕但没有移动。以伪方式执行它很简单——我知道我只使用 touchesBegan 和 touchesEnded 有多少次触摸,但问题是只有 touchesMoved 发送事件。如果您移动,则不会发送任何事件。这被用来有一个很好的滑动滚动 - 你可以甩动滚动,即使你释放它也会继续滚动,但如果你的手指向下但没有移动,它会立即停止。我不能只在 touchesMoved 中设置一个 fingerDown 布尔值,然后在我的循环(滚动和滑动发生的地方)中将其设置为 false,因为它们不同步。

基本上,我想模拟一个 touchesNotMoved 事件——当你移动时,某个 bool 为真,当你不移动时,它为假。

另外请不要问我为什么我不只是使用 Apple 的滚动 - 有一个很好的理由与这个问题无关。:-)

4

1 回答 1

1

这不是知道何时触摸不活跃的答案,但无论如何它我想做的一个合理的解决方案。

因此,如果其他人试图模拟 Apple 的滚动视图(像素完美的滚动加上漂亮的滑动和滑动),那么您将需要以下内容:

跟踪触摸次数的整数。
与触摸事件分开的循环或计时器。
存储滚动“衰减”量的向量(或两个浮点数)。
一个恒定的浮点衰减值,例如 0.95。

然后,您可以执行以下操作:
- 在 touchesBegan 中,将 touchCount 增加 [touches count]。
- 在 touchesEnded 中,将 touchCount 递减 [touches count]。
- 在 touchesMoved 中,创建一个表示 currentTouchPos - previousTouchPos 的向量。
- 按该向量滚动您的视图。
- 将您的 scrollDecay 向量设置为等于该向量。
- 在您的主计时器或循环中,仅当touchCount <= 0 时才通过 scrollDecay 滚动视图。此外,将 scrollLDecay 向量乘以衰减值。一旦达到非常低的值(例如 0.1),将其设置为 0。

你完成了。它工作得很好,我看不出这和苹果的滚动有任何明显的区别。

于 2009-09-08T01:46:13.630 回答