我正在尝试使UICollectionView捕捉回到附近任何项目单元格的中心, 但是问题是,当我将其稍微移动一点时,它会迅速回弹到看起来不光滑的单元格中心, 是否可以忽略或禁用滚动,除非用户滑动到下一个项目并且不使scrollview将其捕捉为同一项目?
这是我要捕捉的代码
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
let cellWidthIncludingSpacing = layout.itemSize.width + layout.minimumLineSpacing
var offset = targetContentOffset.pointee
let index = (offset.x + scrollView.contentInset.left ) / cellWidthIncludingSpacing
let roundedIndex = round(index)
self.lastContentOffset = scrollView.contentOffset.x
offset = CGPoint(x: roundedIndex * cellWidthIncludingSpacing - scrollView.contentInset.left, y: -scrollView.contentInset.top)
targetContentOffset.pointee = offset
}
编辑: 这就是它从物理设备恢复的方式。 它在这里比较慢,因为它是gif
答案 0 :(得分:0)
它会回弹,因为您直接设置了contentOffset。相反,您应该在动画为true的情况下调用UIScrollViewMethod setContentOffset(_:animated:)。如果您仍然不喜欢结果,则可以考虑实施UICollectionLayout方法targetContentOffsetForProposedContentOffset:withScrollingVelocity:,然后布局将自动对齐到您返回的位置。