我是 iOS 开发和 Swift 的新手,遇到以下问题:
我想从屏幕上捕捉触摸事件。我对常规视图执行此操作没有任何问题。不幸的是,我遇到了该UIScrollView
组件的问题。当用户点击屏幕、长按屏幕或水平移动手指时,我可以捕捉触摸,但是当用户垂直移动手指并同时激活垂直滚动时,我无法捕捉到触摸捕捉倒数。
我在 StackOverflow 上发现了一些关于类似问题的线程,但那里提供的解决方案并没有解决我的问题。
我的观点结构如下:
+- View (top-level view)
|
|
+--- UIScrollView
|
|
+-- other views inside...
这是我的代码:
class MyViewController : UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(myRecognizer)
}
}
手势识别器被添加到顶层视图中。
我也有基本的自定义实现UIGestureRecognizer
:
class MyRecognizer: UIGestureRecognizer {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesBegan(touches, with: event)
// handle events...
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesMoved(touches, with: event)
// handle events...
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesEnded(touches, with: event)
// handle events...
}
}
我尝试做些什么来解决这个问题?
- 设置参数
scrollView.canCancelContentTouches = false
- 没有帮助 - 设置参数
scrollView.isScrollEnabled = false
- 我能够捕获所有触摸事件,但 scrollView 停止工作 - 没有帮助 - 将手势识别器添加到 scrollView 并将其从顶级视图中删除 - 没有帮助
- 将手势识别器添加到滚动视图和顶级视图 - 没有帮助
- 设置参数
scrollView.isUserInteractionEnabled = false
- 我能够捕获所有触摸事件,但 scrollView 和所有 UI 组件停止工作 - 没有帮助 - 重新排序
MyRecognizer
类中的调用:首先处理事件,然后从上层类调用方法super.touches...
- 没有帮助
现在,我不知道UIScrollView
在用户垂直滚动屏幕时我还能做些什么来捕获触摸事件。
任何建议或帮助表示赞赏!
问候,
彼得