当用户放开UICollectionView中的滚动时,我希望它滚动到相关点。在此示例中,我将使用CGPoint(x: 0, y: 100)
。
我之前尝试过这样做:
func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {
self.collectionView.setContentOffset(CGPoint(x: 0, y: 100), animated: true)
}
但是这会产生一个以CurveEaseIn开头的动画。如果用户在拖动时放手,这会产生奇怪的外观,因为当他们抬起手指时拖动突然停止,然后再次开始移动。
所以我尝试用自己的动画来做这件事:
UIView.animateWithDuration(
0.3,
delay: 0,
options: UIViewAnimationOptions.CurveEaseOut,
animations: {
() -> Void in
self.collectionView.setContentOffset(CGPoint(x: 0, y: 100), animated: false)
}, completion: nil)
动画就像我想要的那样发生,但动画结束时屏幕外的单元格会立即消失。如果我将setContentOffset()
替换为contentOffset =
,则会发生同样的事情。
那么有人建议我使用scrollViewWillEndDragging:withVelocity:targetContentOffset:
方法。所以我做了:
func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
targetContentOffset.memory = CGPoint(x: 0, y: 100)
}
现在发生的是动画以给定的速度发生,所以如果用户抬起他们的手指,那么它会慢慢地移动到所需的位置,速度为0。