当动画为假时,如何检测UIScrollView已完成滚动?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当动画为假时,如何检测UIScrollView已完成滚动?相关的知识,希望对你有一定的参考价值。
我有一个名为timeline的collectionView,它在这里的第二行到最后一行以编程方式滚动:
internal func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if !onceOnly {
let indexToScrollTo = IndexPath(row: self.posts.count - 1, section: 0)
collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
let firstPost = posts.first?.timeStamp
let firstOfFirstMonth = firstPost?.startOfMonth()
let diff = posts.last?.timeStamp.months(from: firstOfFirstMonth!)
//self.currentPostMonth = diff
let monthCellIndexPath = IndexPath(row: diff!, section: 0)
timeline.scrollToItem(at: monthCellIndexPath, at: .centeredHorizontally, animated: false)
onceOnly = true
}
}
稍后..我试图检测到这已完成滚动
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView == timeline {
print("Did finish")
}
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
if scrollView == timeline {
print("Did finish")
}
}
滚动完成后,两个print语句都不会触发。我认为部分原因是因为动画=假。当我将其设置为true时,它会打印正确完成 - 我认为特别是scrollViewDidEndScrollingAnimation打印,即使scrollViewDidEndDecelerating仍然无效,因为它以编程方式滚动。
如何检测此卷轴已完成?
答案
我想因为你将collectionView与scrollView进行比较
if scrollView == timeline
这是false
,BTW你可以使用
func scrollViewDidScroll(_ scrollView: UIScrollView)
如果没有动画,则在下一行之后
timeline.scrollToItem(at: monthCellIndexPath, at: .centeredHorizontally, animated: false)
运行你想要的,因为它会在滚动成功结束时连续发生,无需在scrollView的委托方法中设置它是否被调用
以上是关于当动画为假时,如何检测UIScrollView已完成滚动?的主要内容,如果未能解决你的问题,请参考以下文章
当“objectCaching”为假时,使用“globalCompositionOperation”设置为“source-atop”的屏蔽不起作用