Реализовать профиль Twitter как вид с помощью прокрутки параллакса - PullRequest
0 голосов
/ 28 мая 2019

Я хочу реализовать следующий вид представления, в котором представление может быть полностью прокручено и содержит 2 различных вида прокрутки (основной и дополнительный) с бесконечным прокручиваемым содержимым. Это именно то, что я хочу.

enter image description here

  1. красный вид - суперпредставление - должен прокручиваться вертикально
  2. зеленый вид имеет высоту текущего вида и является просто статичным. Это не прокрутка
  3. Представление синий представляет собой горизонтальную прокрутку, где для каждой метки имеется желтый представление коллекции бесконечности с вертикальной прокруткой
  4. метки прокручиваются как в данном видео. под каждой этикеткой есть вид коллекции, о котором я упоминал в пункте 3

Синяя рамка - это вид прокрутки, и я хочу, чтобы прокрутка происходила горизонтально с параллаксом, как это.

enter image description here

Я могу правильно реализовать вышеуказанный параллакс, но каждый заголовок содержит свой собственный collectionview. Когда я реализую это, я не могу иметь бесконечный свиток. Ниже приведен код для этого:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == containerScrollView {
        for i in 0..<shotsData.count {
            let label = scrollView.viewWithTag(i + tagValueL) as! UILabel
            let view = scrollView.viewWithTag(i + tagValueV) as! ShotsMediaView
            let scrollContentOffset = scrollView.contentOffset.x + scrollView.frame.width
            let viewOffset = (view.center.x - scrollView.bounds.width/4) - scrollContentOffset
            label.center.x = scrollContentOffset - ((scrollView.bounds.width/4 - viewOffset)/2)
        }
    }
}

Как я могу точно достичь того же поведения с бесконечной прокруткой по вертикали ? Я хочу, чтобы у каждого из этих заголовков был вид коллекции, который имеет динамическую высоту.

1 Ответ

1 голос
/ 07 июня 2019

Я сделал грубую реализацию этого.

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == colorsCollectionView {
        let newContentOffSetX = scrollView.contentOffset.x
        let distance = contentOffSetX + newContentOffSetX
        // Scroll the text collection view proportinately
        let titleScrollDistance = (distance/colorsCollectionView.frame.width * 75.0)
        titlesCollectionView.contentOffset = CGPoint(x: titleScrollDistance, y: titlesCollectionView.contentOffset.y)
        contentOffSetX = newContentOffSetX
    }
}

contentOffSetX - это свойство класса (ViewController), которое я использую для отслеживания расстояния прокрутки в нижнем виде коллекции.Первоначально это установлено в 0. Когда пользователь прокручивает представление коллекции внизу, вызывается вышеуказанный метод делегата.Затем я использую contentOffSet, чтобы получить расстояние, которое было прокручено вдоль оси X.Я сопоставляю это с шириной надписей заголовка (жестко закодированных как 75.0), чтобы вычислить расстояние, которое должна быть прокручена коллекция.Надеюсь, что это может быть улучшено, чтобы служить вашей цели, но я уверен, что есть лучшие методы там:)

enter image description here

...