我有一个包含collectionView
和scrollView
的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
中的不必要的更改!
我该怎么办?
答案 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
的详细信息。 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
}
}
感谢。
答案 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)
}
}