У меня есть представление коллекции, где размер ячейки соответствует размеру коллекции, поэтому каждая ячейка должна занимать весь экран. Я реализовал функциональность, при которой ячейка привязывается к полному виду всякий раз, когда она перетаскивается или замедляется при прокрутке. Вот как работает UX.
https://drive.google.com/open?id=1v8-WxCQUzfu8V_k9zM1UCWsf_-Zz4dpr
Что я хочу:
Как видно из клипа, ячейка привязывается ко всему экрану. Теперь я хочу выполнить метод после его привязки. Не раньше или нет, когда он частично отображается.
Ниже приведен код, который я написал для эффекта привязки:
func scrollToMostVisibleCell(){
let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)!
collectionView.scrollToItem(at: visibleIndexPath as IndexPath, at: .top, animated: true)
print("cell is ---> ", visibleIndexPath.row)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollToMostVisibleCell()
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
scrollToMostVisibleCell()
if !decelerate {
scrollToMostVisibleCell()
}
}
Если я использую метод willDisplayCell
, то он просто вернет меня, как только ячейка окажется в виде, даже если она просто заглядывает в collectionView
.
Есть ли способ, где я могу проверить, полностью ли видна ячейка, и затем я могу выполнить функцию?
Я перебрал Интернет по этому вопросу, но не смог найти удовлетворительного ответа.