【问题标题】:Connect Two ScrollView’s Together with different Content Offset Values用不同的内容偏移值连接两个 ScrollView
【发布时间】:2018-12-10 05:42:54
【问题描述】:

要一起滚动 2 个不同的滚动视图,关于使用 scrollViewDidScroll 方法并将一个滚动视图的内容偏移量传递给另一个滚动视图的许多问题已经得到解答。

但我的问题有点不同,假设我有 2 个 ScrollView A 和 B 都只有水平滚动。

当视图加载 ScrollView A 有 contentOffSet 说 (x,y) 和 B 滚动视图的内容偏移量:(m,n)。

根据我的理解内容偏移是滚动时的新 (x,y) 值。

现在我无法将 A 的内容偏移值传递到 B 以将它们一起滚动,因为它们由于内容要求而在不同点加载。我需要在 A 中滚动时移动的确切 x 点,然后可以传递它给B。

我也尝试过从 A 的手势获取速度并将其传递给 B,但效果并不顺利。

如何实现两个视图的平滑滚动?

【问题讨论】:

  • 只是一个问题,为什么需要使用 2 个不同的滚动视图?在一个滚动视图中获取内容,在慢速滚动过程中可能会滞后一点
  • 我无法在单个滚动视图中获取内容,A 是 CollectionView,它的滚动视图的偏移量在 viewDidLoad 处设置为 (9000,0)。视图 B 是滚动视图,内容完全不同,偏移量为 (0,0)。现在,当用户滚动 A 时,它会转到 (9999,0),所以现在我不能真正将此偏移量传递给 B,我需要将 999 x 点传递给 B,这样我就可以添加到它的偏移量 x 值。基本上我只是想知道是否可以通过任何方式让 x 点在滚动时移动,就像通过用当前偏移量减去先前的偏移量一样。我无法获取那些确切的值。

标签: ios cocoa-touch uiscrollview


【解决方案1】:

目前还不完全清楚您要做什么。但是,如果您想了解滚动视图 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
        }
    }
}

【讨论】:

  • 在这里感谢您的帮助,这件事我知道如何获取有关偏移量变化的更新,但让我弄清楚我想要做什么。假设我有一个 ScrollView A,用户水平滚动/拖动它。最初它的内容偏移量是 (0,0),滚动后它继续到 (60,0)。所以我想得到 x=60,即 x 上的点。否则是的,正如 ios Geek 在上面的评论中提到的那样,我可以切换到替代路线来实现同样的目标。
猜你喜欢
  • 1970-01-01
  • 2017-02-04
  • 2017-06-17
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多