在放弃滚动时将UICollectionView滚动到特定点

时间:2015-03-05 11:01:09

标签: ios swift uiscrollview uicollectionview

当用户放开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。

0 个答案:

没有答案