如何在 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 中回滚了一个视图?

如何检测 UIScrollView 的下一页编号为'scrollView.pagingEnabled' = YES?在'scrollViewDidEndDragging'?

如何在 iOS 中检测 UITextView (UIScrollView) 故障的底部

如何检测UIScrollView何时完成滚动在Swift中