是否可以同时滚动两个集合视图,如果是,怎么样?
我有这个类,包含两个集合视图 - 一个带有日期,另一个带有tableview,其元素与第一个集合视图中的日期相匹配。 当我滚动日期或元素时,我希望它们相互跟随。
这是一些代码,到目前为止我尝试过的,但没有运气:
我将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)
}
}
这种方法可以解决一些问题,但是滚动视图只是精神上的,当它们第一次开始滚动时似乎无法停止滚动..
我也试过这个:
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)
}
}
}
}
这是迄今为止最好的解决方案 - 但它仍然不是我想要的 - 这个滚动,当另一个集合视图完成滚动..但我希望它们同步滚动: - )
有什么建议吗?
答案 0 :(得分:1)
事实上,方法scrollViewDidScroll(_:)
是处理这种体验的最佳方法。
这里似乎发生的是为第一个CollectionView调用了委托方法scrollViewDidScroll,当contentOffset应用于另一个CollectionView时,再次调用委托方法并将scroll应用于原始collectionView。您需要识别当时正在滚动哪些collectionView。
为此,您可以使用UIScrollView的isDragging
属性。
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)
}
}