iPhone如何知道用户何时触摸屏幕而不是移动?

时间:2009-09-08 00:20:58

标签: iphone cocoa-touch ipod-touch

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

基本上,我想模拟一个touchesNotMoved事件 - 无论何时你移动,某个bool都是真的,当你不移动时,它是假的。

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

1 个答案:

答案 0 :(得分:1)

这不是知道什么时候触摸不活跃的答案,但它 是我想要做的合理解决方案。

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

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

然后用那些你可以做到以下几点:
- 在touchesBegan中,通过[触摸计数]增加touchCount - 在touchesEnded中,通过[触摸计数]减少touchCount - 在touchesMoved中,创建一个表示currentTouchPos的向量 - previousTouchPos - 按该向量滚动视图。
- 将scrollDecay向量设置为等于该向量 - 在主计时器或循环中,仅当 touchCount< = 0时,通过scrollDecay 滚动视图。此外,将scrolLDecay向量乘以衰减值。一旦达到非常低的值(比如0.1),将其设置为0.

你已经完成了。它工作得很好,我看不出这与Apple的滚动之间有任何明显的差异。