我有一个水平滚动的
UICollecitonView
。我有一个要求,当用户向右或向左滚动时,屏幕水平中心的集合视图单元格的颜色不同。当每个颜色穿过中心时,颜色需要更新。
我们的 UICollectionView 在启动时显示三个
UICollectionViewCell
,因此“center”被定义为第二个 UICollectionViewCell
的 CGRect。
如何检测?是否有在滚动结束时触发的事件?另外,如何判断一个 CGRect 矩形是否在另一个 CGRect 矩形的边界内?
这个答案会让你大致了解
- 如何获取scrollView事件回调。
- 如何将点或矩形从一个视图坐标转换为另一个视图坐标。
- 如何在CollectionView中的某个点获取CollectionViewCell。
您可以根据您的要求更改代码。
1。创建一个方法如下
func scrollViewDidEndScrolling(_ scrollView: UIScrollView) {
let centerPoint = CGPoint(x: UIScreen.main.bounds.midX, y: UIScreen.main.bounds.midY)
let collectionViewCenterPoint = self.view.convert(centerPoint, to: collectionView)
if let indexPath = collectionView.indexPathForItem(at: collectionViewCenterPoint) {
let collectionViewCell = collectionView.cellForItem(at: indexPath)
collectionViewCell?.backgroundColor = UIColor.red
}
}
在上面的方法中,我们试图找到位于
CollectionViewCell
中心的 CollectionView
。我们正在尝试获取 CollectionViewCell
的索引路径并更新其背景颜色。
2。实现下面给出的
ScrollViewDelegate
方法
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
self.scrollViewDidEndScrolling(scrollView)
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
self.scrollViewDidEndScrolling(scrollView)
}
}
我们必须从这些
ScrollViewDelegate
方法中调用我们的方法。当 collectionView
停止滚动时,将调用这些方法。