我有一个帖子的集合视图。我希望能够跟踪当前用户查看的帖子。如何避免某些问题,例如快速滚动,这些问题不允许我使用末端减速。
我们的想法是了解所有已通过屏幕用户可见区域的单元格。我的收集细胞是全屏的。 有什么想法吗?
答案 0 :(得分:0)
我认为您可以使用willDisplay
来跟踪开始时间显示单元格
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
// Save start time view at indexPath.
}
使用didEndDisplaying
跟踪结束时间显示单元格
func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
// End time at indexPath
// End - Start time > "time of view" => Viewed
}
答案 1 :(得分:0)
这对我有类似的功能,currentVisibleIndex保存已查看的collectionView单元格的索引值。对于您的实现,您可以维护一个数组,其中包含已查看的单元格的索引
func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>){
/* set pagewidth to collectionview cell width*/
let pageWidth = Float(collectionView.bounds.width)
let currentOffset : Float = Float(scrollView.contentOffset.x)
let targetOffset = Float(targetContentOffset.memory.x)
var newTargetOffset : Float = 0.0
if targetOffset > currentOffset {
newTargetOffset = ceilf(currentOffset/(pageWidth)) * pageWidth
/* if collectionview swipped right increment the curentlyVisibleIndex*/
if currentlyVisibleIndex != (arrayOfModelForCollectionView.count - 1) {
currentlyVisibleIndex += 1
}
}
else{
newTargetOffset = floorf(currentOffset/(pageWidth)) * pageWidth
/*if collectionview swipped left decrement the currentlyVisibleCounter */
if currentlyVisibleIndex != 0 {
currentlyVisibleIndex -= 1
}
}
if newTargetOffset < 0{
newTargetOffset = 0
}else if newTargetOffset > Float(scrollView.contentSize.width){
newTargetOffset = Float(scrollView.contentSize.width)
}
targetContentOffset.memory.x = CGFloat(currentOffset)
scrollView.setContentOffset(CGPoint(x: CGFloat(newTargetOffset), y: 0), animated: true)
}
答案 2 :(得分:0)
由于您的UICollectionViewCell
是全屏,因此您可以执行UIScrollView
委托方法scrollViewDidScroll
并计算当前可见的单元格。像这样:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let index = scrollView.contentOffset.y/view.bounds.size.height
}
这将显示当前向用户显示的索引。由于将始终调用scrollViewDidScroll
,因此您可以使用此方法来确定用户当前所在的索引。