如何在 UIScrollView 上检测“Drag Enter”
Posted
技术标签:
【中文标题】如何在 UIScrollView 上检测“Drag Enter”【英文标题】:How to detect "Drag Enter" on UIScrollView 【发布时间】:2013-05-10 23:32:30 【问题描述】:想象一个 UIButton 和一个用户点击按钮外部的某个地方然后滑到它上面。如果我想让按钮检测到此类触摸,我可以将其注册为任何“Touch Drag Enter”事件。
我的问题:有什么方法可以为 UIScrollView 实现同样的效果吗? 即,我点击滚动视图之外的某个位置,将手指拖到滚动视图上,一旦我进入滚动视图框架,它就会开始平移? (因为默认情况下它没有,我必须在滚动视图内开始触摸才能平移)
【问题讨论】:
【参考方案1】:如果您想这样做,您必须使用 -touchesBegan、-touchesMoved 和 -touchesEnded 进行自定义实现
允许您执行此操作的 UIResponder 类(所有 ViewController 都继承自该类)的文档是 here。
希望您能从这里弄清楚该怎么做。 :)
作为额外提示,您很可能还需要使用此功能
bool contains = CGRectContainsPoint(CGRect rect, CGPoint point);
【讨论】:
【参考方案2】:想象一个 UIButton 和一个用户点击按钮外部的某个地方然后滑到它上面。如果我希望按钮检测到此类触摸,我可以将其注册为任何“Touch Drag Enter”事件
实际上,不,你不能。 UIControl 不会获得任何 的控件事件,除非触摸在控件中开始。
这与您在滚动视图中看到类似效果的原因相同。这是 ios 上触控交付的全部基础。触摸“属于”最初被触摸的视图。
毕竟,运行时不可能知道您要将拖入滚动视图...
【讨论】:
以上是关于如何在 UIScrollView 上检测“Drag Enter”的主要内容,如果未能解决你的问题,请参考以下文章
如何检测来自两个 UIScrollView(超子)的滚动事件
如何检测用户是不是在 UIScrollView 中回滚了一个视图?
如何检测 UIScrollView 的下一页编号为'scrollView.pagingEnabled' = YES?在'scrollViewDidEndDragging'?