iOS - scrollViewDidEnd减速运行,适用于 scrollView 和 collectionView



我有一个包含collectionViewscrollView的VC。我把这段代码放在滚动视图中来更改pageController的当前页面:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    self.pageController.currentPage = Int(pageNumber)
}

它对scrollView很好用,但问题是当我甚至滚动collectionView它声明并导致pageController中不必要的更改时!

我该怎么办?

除了上面发布的答案之外,您还可以使用视图的 tag 属性。

只需在 xib 中或通过代码为您的滚动视图分配一个标签 (Int(。

yourScrollView.tag = 10

在滚动视图委托方法中检查此标记:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if scrollView.tag == 10 { 
      ///Your scrollview was scrolled
    } else {
      // Collection view was scrolled
    }
}
if scrollView == yourScrollView{
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    self.pageController.currentPage = Int(pageNumber)
}

检查运行该方法的实例是否实际上是您的 scrollView

首先,您必须了解有关UICollectionView的细节。该UICollectionView是从 UIScrollView 的子类。这就是为什么它同时被调用滚动(滚动集合视图和滚动滚动视图(的原因。您可以这样做来区分它是什么类型的滚动,

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if scrollView == "Your scrollView outlet name" { // Scroll view
        let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
        self.pageController.currentPage = Int(pageNumber)
    } else {
      // Collection view
    }
}

谢谢。

您需要

检查scrollViewDidEndDecelerating内的scrollView是滚动视图还是集合视图。只需在执行您拥有的 2 行代码之前添加一个if scrollView == myScrollView

您的代码应如下所示

函数

scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if scrollView == myScrollView {
        let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
        self.pageController.currentPage = Int(pageNumber)
    }
}

相关内容

  • 没有找到相关文章

最新更新