iOS - scrollViewDidEndDecelerating为scrollView和collectionView运行

时间:2017-06-09 10:28:29

标签: ios objective-c swift scrollview collectionview

我有一个包含collectionViewscrollView的VC。我通过滚动scrollView:

将此代码更改为pageController的当前页面
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    self.pageController.currentPage = Int(pageNumber)
}

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

我该怎么办?

4 个答案:

答案 0 :(得分:1)

if scrollView == yourScrollView{
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    self.pageController.currentPage = Int(pageNumber)
}

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

答案 1 :(得分:1)

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

只需在xib中或通过代码将标记(Int)分配给滚动视图。

yourScrollView.tag = 10

在scrollview委托方法中检查此标记:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    if scrollView.tag == 10 { 
      ///Your scrollview was scrolled
    } else {
      // Collection view was scrolled
    }

}

答案 2 :(得分:0)

首先,您必须了解有关UICollectionView的详细信息。 UICollectionViewUIScrollView的子类。这就是为什么它被调用滚动(滚动集合视图和滚动滚动视图)。你可以这样做来区分它是什么类型的滚动,

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
    }

}

感谢。

答案 3 :(得分:0)

如果是滚动视图或收藏视图,则需要检查scrollView内的scrollViewDidEndDecelerating。 只需在执行2行代码之前添加if scrollView == myScrollView

你的代码看起来像这样

func

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