如何判断 CollectionViewCell 是否位于屏幕中央

问题描述 投票:0回答:1

我有一个水平滚动的

UICollecitonView
。我有一个要求,当用户向右或向左滚动时,屏幕水平中心的集合视图单元格的颜色不同。当每个颜色穿过中心时,颜色需要更新。

我们的 UICollectionView 在启动时显示三个

UICollectionViewCell
,因此“center”被定义为第二个
UICollectionViewCell
的 CGRect。

如何检测?是否有在滚动结束时触发的事件?另外,如何判断一个 CGRect 矩形是否在另一个 CGRect 矩形的边界内?

ios swift uicollectionview
1个回答
6
投票

这个答案会让你大致了解

  1. 如何获取scrollView事件回调。
  2. 如何将点或矩形从一个视图坐标转换为另一个视图坐标。
  3. 如何在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
停止滚动时,将调用这些方法。

© www.soinside.com 2019 - 2024. All rights reserved.