UIScrollView 触摸处理

Posted

技术标签:

【中文标题】UIScrollView 触摸处理【英文标题】:UIScrollView touch handling 【发布时间】:2011-05-11 21:18:17 【问题描述】:

我正在从 Apple UIScrollView 类参考文档中阅读有关 UIScrollView 的以下内容:

因为滚动视图没有滚动 吧,一定要知道摸一摸 表示打算滚动而不是 意图跟踪 内容。为了做出这个决定, 它暂时拦截了触地得分 事件通过启动一个计时器,之前 计时器触发,看看是否 触摸手指做出任何动作。如果 计时器触发没有显着 位置变化,滚动视图 向被触摸者发送跟踪事件 内容视图的子视图。如果 用户然后将他们的手指拖得很远 在计时器过去之前足够了, 滚动视图取消任何跟踪 子视图并执行滚动 本身。子类可以覆盖 touchesShouldBegin:withEvent:inContentView:, pagingEnabled 和 touchesShouldCancelInContentView: 方法(由 滚动视图)来影响滚动方式 视图处理滚动手势。

我不明白以“如果用户在计时器结束之前将手指拖得足够远......”开头的句子我认为计时器已经按照前一句触发了。它是在谈论这个中的另一个计时器吗?

【问题讨论】:

【参考方案1】:

这令人困惑。我相信有 2 种可能的行为取决于您的 scrollView 是否设置了 delaysContentTouches 属性(或者设置了 canCancelContentTouches 属性)

如果设置了delaysContentTouches

当用户点击滚动视图时,它会通过启动计时器来临时拦截触摸事件,并在计时器触发之前查看触摸手指是否有任何移动。如果计时器在位置没有显着变化的情况下触发,则滚动视图将跟踪事件发送到内容视图的触摸子视图。如果用户在计时器结束之前将手指拖得足够远,则滚动视图开始滚动。

如果计时器已触发:

如果设置了canCancelContentTouches,则滚动视图取消并触摸传递给其子视图并开始滚动。否则,不滚动。

如果在用户拖动手指之前计时器尚未到期,则会发生滚动。

我想我是对的......(有人可能想仔细检查)

HTH

【讨论】:

以上是关于UIScrollView 触摸处理的主要内容,如果未能解决你的问题,请参考以下文章

带有 UIButtons 的 UIScrollview - 如何重新创建跳板?

UIScroll 视图 + UIView + UITableview 问题

UIScrollView 触摸处理

UIScrollView 事件处理

如何让 UIScrollView 忽略单次触摸?

调整容器 uiscrollview 中所有 uiscrollview 的大小