Я нашел свой ответ.Надеюсь это поможет.
Если вы хотите отключить прокрутку 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
}
}