Как определить, когда пользовательский UICollectionViewCell составляет 100% на экране

введите описание изображения здесь

Из диаграммы выше у меня есть UICollectionView с 4 пользовательскими ячейками. В любой момент на экране могут отображаться 2 или три ячейки. Как я могу узнать, когда «ячейка 1» или «ячейка 2» равна 100% на экране?

И то и другое

 collectionView.visibleCells collectionView.indexPathsForVisibleItems 

возвращают массивы и не сообщают вам, какая ячейка 100% на экране.

В случае изображения будет отображаться следующее: didSelectItemAt

collectionView.visibleCells

 [<Shot_On_Goal.MainCollectionViewCell: 0x101f525c0; baseClass = UICollectionViewCell; frame = (190 7.66667; 454 350); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0237300>>, <Shot_On_Goal.HeaderCollectionViewCell: 0x101f4d580; baseClass = UICollectionViewCell; frame = (10 0; 170 365); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0236800>>, <Shot_On_Goal.TheirHockeyNetCollectionViewCell: 0x101f55520; baseClass = UICollectionViewCell; frame = (654 7.66667; 454 350); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0238fe0>>] 

collectionView.indexPathsForVisibleItems

 [[0, 1], [0, 0], [0, 2]] 

Это вернет массив IndexPaths для полностью видимых ячеек:

 func fullyVisibleCells(_ inCollectionView: UICollectionView) -> [IndexPath] { var returnCells = [IndexPath]() var vCells = inCollectionView.visibleCells vCells = vCells.filter({ cell -> Bool in let cellRect = inCollectionView.convert(cell.frame, to: inCollectionView.superview) return inCollectionView.frame.contains(cellRect) }) vCells.forEach({ if let pth = inCollectionView.indexPath(for: $0) { returnCells.append(pth) } }) return returnCells } @IBAction func test(_ sender: Any) { let visCells = fullyVisibleCells(self.collectionView) print(visCells) } 

Вы можете отфильтровать свой массив visibleCells, чтобы проверить, включен ли кадр вашей ячейки в фрейме вашей коллекцииView:

  var visibleCells = self.collectionView?.visibleCells visibleCells = visibleCells?.filter({ cell -> Bool in return self.collectionView?.frame.contains(cell.frame) ?? false }) print (visibleCells) 
Interesting Posts
Давайте будем гением компьютера.