【问题标题】:iPhone how do I know when the user is touching the screen but not moving?iPhone如何知道用户何时触摸屏幕但没有移动?
【发布时间】:2010-11-26 08:35:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch ipod-touch


    【解决方案1】:

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

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

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

    然后,您可以执行以下操作:
    - 在 touchesBegan 中,将 touchCount 增加 [touches count]。
    - 在 touchesEnded 中,将 touchCount 递减 [touches count]。
    - 在 touchesMoved 中,创建一个表示 currentTouchPos 的向量 - previousTouchPos.
    - 按该向量滚动您的视图。
    - 将您的 scrollDecay 向量设置为等于该向量。
    - 在您的主计时器或循环中,仅当 touchCount

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

    【讨论】:

    • 有趣。您只需要处理边缘的“反弹”和滚动指示符,并且您几乎克隆了 Apple 的 UIScrollView 的行为
    • 不错,这种方法确实缺少漂亮的弹力,而且多拖也不会越过边缘。
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多