Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 制作两个UICollectionView';s在启用分页的情况下同步滚动_Ios_Swift_Uiscrollview_Uicollectionview_Scroll Paging - Fatal编程技术网

Ios 制作两个UICollectionView';s在启用分页的情况下同步滚动

Ios 制作两个UICollectionView';s在启用分页的情况下同步滚动,ios,swift,uiscrollview,uicollectionview,scroll-paging,Ios,Swift,Uiscrollview,Uicollectionview,Scroll Paging,是否可以使两个CollectionView同步滚动?如果可以,如何滚动 我有一个类,包含两个collectionview,一个包含日期,另一个包含tableview,元素与第一个collectionview中的日期匹配。 当我滚动日期或元素时,我希望它们彼此跟随 以下是一些代码,以及我到目前为止尝试过的代码,但没有任何运气: 我将ScrollViewDelegate添加到我的类中,并尝试此委托方法: func scrollViewDidScroll(scrollView: UIScrollVie

是否可以使两个CollectionView同步滚动?如果可以,如何滚动

我有一个类,包含两个collectionview,一个包含日期,另一个包含tableview,元素与第一个collectionview中的日期匹配。 当我滚动日期或元素时,我希望它们彼此跟随

以下是一些代码,以及我到目前为止尝试过的代码,但没有任何运气:

我将ScrollViewDelegate添加到我的类中,并尝试此委托方法:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.isEqual(dayCollectionView) {
        var offset = contentCollectionView.contentOffset
        offset.x = dayCollectionView.contentOffset.x
        contentCollectionView.setContentOffset(offset, animated: true)
    } else {
        var offset = dayCollectionView.contentOffset
        offset.x = contentCollectionView.contentOffset.x
        dayCollectionView.setContentOffset(offset, animated: true)
    }
}
这种方法有一定的效果,但是scrollview的第一次开始滚动时,它只是处于精神状态,似乎无法停止滚动

我也试过:

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

    if scrollView.isEqual(dayCollectionView) {
        // Days
        for cell in self.dayCollectionView.visibleCells() {
            if let indexPath = dayCollectionView.indexPathForCell(cell) {
                contentCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .None, animated: true)
            }
        }
    } else {
        // Classes
        for cell in self.contentCollectionView.visibleCells() {
            if let indexPath = contentCollectionView.indexPathForCell(cell) {
                dayCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .None, animated: true)
            }
        }
    }
}
这是迄今为止最好的解决方案-但它仍然不是我想要的-这一个滚动,当其他collectionview完成滚动。。但我希望它们同步滚动:-)


有什么建议吗?

的确,scrollViewDidScroll(:)方法是处理此类体验的最佳方法

这里似乎发生的是,委托方法scrollViewDidScroll被调用用于第一个CollectionView,当contentOffset应用于另一个CollectionView时,委托方法再次被调用,scroll被应用于原始CollectionView。您需要识别此时正在滚动哪个CollectionView

为此,可以使用UIScrollView的属性

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.isEqual(dayCollectionView), scrollView.isDragging {
        var offset = contentCollectionView.contentOffset
        offset.x = dayCollectionView.contentOffset.x
        contentCollectionView.setContentOffset(offset, animated: true)
    } else if scrollView.isEqual(contentCollectionView), scrollView.isDragging {
        var offset = dayCollectionView.contentOffset
        offset.x = contentCollectionView.contentOffset.x
        dayCollectionView.setContentOffset(offset, animated: true)
    }
}

谢谢你,伙计!我没有完全工作,但我想这是因为我启用了分页功能。。因此,我想我会坚持使用ScrollViewDiEnd减速,即使这不是我想要的——但我想这是我能得到的最接近的结果:/但如果你有解决方案,我正在听;)