我将在滚动视图中显示一个图表,当我在图表上拖动时,滚动视图不起作用。
我已经尝试在视图上使用isExclusiveTouch
,但无法按预期工作。
当我要触摸图表并在其上拖动手指以显示其他值时,滚动视图会捕获我的触摸事件并发生滚动。
答案 0 :(得分:0)
我找到了答案。希望这可以帮助。
如果要禁用UIScrollView
滚动,则应重写gestureRecognizerShouldBegin
方法。检测触摸了哪个视图,以及是否要停止滚动return false
,否则必须调用super.gestureRecognizerShouldBegin(gestureRecognizer)
。
在我的情况下,我在类中定义了一个常量变量,并在要禁用其滚动的视图中将其用作标记。
class CustomScrollView: UIScrollView {
static let EXCEPTION_FOR_SCROLLING = 1
var exceptionViews: [UIView]?
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let view = gestureRecognizer.view {
if shouldCancelTouch(view, gestureRecognizer) {
return false
}
}
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
private func shouldCancelTouch(_ view: UIView, _ gestureRecognizer: UIGestureRecognizer) -> Bool {
if (exceptionViews?.contains(view) ?? false) || view.tag == CustomScrollView.EXCEPTION_FOR_SCROLLING {
return true
} else {
for i in 0..<view.subviews.count {
if view.subviews[i].frame.contains(gestureRecognizer.location(in: view)) {
if shouldCancelTouch(view.subviews[i], gestureRecognizer) {
return true
}
}
}
}
return false
}
}