Соедините два ScrollView вместе с различными значениями смещения контента - PullRequest
0 голосов
/ 02 июля 2018

Чтобы прокрутить 2 разных scrollView вместе, на многие вопросы уже был дан ответ относительно использования метода scrollViewDidScroll и передачи смещения содержимого одного scrollview другому.

Но Мой Вопрос здесь немного другой, допустим, у меня есть 2 ScrollView A и B, оба с горизонтальной прокруткой.

Когда представление загружается, ScrollView A имеет, например, contentOffSet (x, y) и смещение содержимого B scrollview: (m, n).

Согласно моему пониманию, смещение - это новое значение (x, y) при прокрутке.

Теперь я не могу передать значение смещения содержимого от A до B, чтобы прокрутить их вместе, поскольку они загружаются в разных точках из-за требования к содержимому. Мне нужны точные точки смещения, смещенные при прокрутке в A, затем может быть передано его до Б.

Я также пытался получить скорость от укола A и передать ее B, что не работает гладко.

Как мне добиться плавной прокрутки для обоих видов?

1 Ответ

0 голосов
/ 02 июля 2018

Не совсем понятно, что вы пытаетесь сделать. Но если вы хотите получать информацию о том, когда представление прокрутки A меняет contentOffset, вы можете создать подкласс UIScrollView и передать данные через делегат или замыкание.

class ScrollView: UIScrollView {
    var contentOffsetChanged: ((CGPoint)->())?

    override var contentOffset: CGPoint {
        didSet {
            if let contentOffsetChanged = contentOffsetChanged {
                contentOffsetChanged(contentOffset)
            }
        }
    }
}

Обновление

После прочтения комментария, который вы оставили мне и тому, что вы написали в iOS Geek, это кажется противоречивым. Есть несколько вариантов того, как сработает ваша математика, так что не принимайте мое точное решение в качестве ответа, а скорее дизайн. Я думаю, что это дизайн, который вас интересует.

class Controller: UIViewController, UIScrollViewDelegate {
    let scrollView = UIScrollView()
    var scrollViewB: UIScrollView?
    var initialOffset: CGPoint = .zero

    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView.delegate = self
    }

    func loadScrollViewB() {
        initialOffset = scrollView.contentOffset
        scrollViewB = UIScrollView()
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView == self.scrollView {
            var contentOffset: CGPoint = .zero
            contentOffset.x = initialOffset.x - scrollView.contentOffset.x
            scrollViewB?.contentOffset = contentOffset
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...