UICollectionView의 중앙에 위치하고 싶은 Cell의 IndexPath 값을 가져와야 되는 상황이 있다.
예를 들어 컨텐츠가 비디오인 리스트에서 중앙에 위치한 비디오 셀을 알아내서 플레이를 시켜야 되는 상황같은???
유튜브 리스트 스크롤 하다보면 자동으로 리스트에서 한개의 비디오가 재생되는 것을 봤을 것이다.
extension UICollectionView {
/**
UICollectionView Visible 상태의 Cell 의 indexPath 값 호출
- Returns: IndexPath?
# Example #
```
let indexPath = collectionView.indexPathForVisibleCenter()
```
*/
func indexPathForVisibleCenter() -> IndexPath? {
var visibleRect = CGRect()
visibleRect.origin = self.contentOffset
visibleRect.size = self.bounds.size
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY - 200.0)
// let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
// let visiblePoint = CGPoint(x: self.center.x + self.contentOffset.x,y: self.center.y + self.contentOffset.y)
return self.indexPathForItem(at: visiblePoint)
}
}
사용방법
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
// 현재 보여지고 있는 중앙에 있는 셀의 indexPath를 구해온다.
if let indexPath = self?.collectionView?.indexPathForVisibleCenter() {
// 구해온 indexPath로 셀 정보를 가져온다.
if let cell = self?.collectionView?.cellForItem(at: indexPath) as? VideoCell {
cell.play()
}
}
'Swift > UICollectionView' 카테고리의 다른 글
[SWIFT]UICollectionView register 단순화 하기 (0) | 2023.06.15 |
---|---|
[SWIFT]UICollectionViewCell Extention IndexPath 구하기 (0) | 2023.04.26 |
[SWIFT]UICellectionView RefreshControl 추가하기 (0) | 2023.04.26 |
[SWIFT]UICollectionView 백그라운드 Empty Message 추가 (0) | 2023.04.26 |
[SWIFT]register / dequeueReusableCell 편하게 사용하기 (0) | 2023.04.26 |