Как сделать действительно эксклюзивное прикосновение для просмотра внутри uiscrollview? - PullRequest
0 голосов
/ 28 мая 2019

Я собираюсь показать диаграмму в представлении прокрутки, что при перетаскивании диаграммы представление прокрутки не работает.

Я уже пытался использовать isExclusiveTouch, но не работает так, как ожидалось.

Когда я коснусь графика и проведу пальцем по нему, чтобы отобразить другие значения, представление прокрутки поймает мое событие касания и произойдет прокрутка.

1 Ответ

0 голосов
/ 02 июня 2019

Я нашел свой ответ.Надеюсь это поможет.

Если вы хотите отключить прокрутку 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
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...