Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 松开滚动后将UICollectionView滚动到特定点_Ios_Swift_Uiscrollview_Uicollectionview - Fatal编程技术网

Ios 松开滚动后将UICollectionView滚动到特定点

Ios 松开滚动后将UICollectionView滚动到特定点,ios,swift,uiscrollview,uicollectionview,Ios,Swift,Uiscrollview,Uicollectionview,当用户放弃在UICollectionView中滚动时,我希望它滚动到相关点。在本例中,我将使用CGPoint(x:0,y:100) 我以前尝试过这样做: func scrollViewWillBeginDecelerating(scrollView: UIScrollView) { self.collectionView.setContentOffset(CGPoint(x: 0, y: 100), animated: true) } 但这会产生一个以曲线开始的动画。如果用户在拖动时松

当用户放弃在UICollectionView中滚动时,我希望它滚动到相关点。在本例中,我将使用
CGPoint(x:0,y:100)

我以前尝试过这样做:

func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {
    self.collectionView.setContentOffset(CGPoint(x: 0, y: 100), animated: true)
}
但这会产生一个以曲线开始的动画。如果用户在拖动时松开,这将产生一种奇怪的外观,因为当他们抬起手指时,拖动突然停止,然后再次开始移动

所以我试着用我自己的动画来做这件事:

UIView.animateWithDuration(
    0.3,
    delay: 0,
    options: UIViewAnimationOptions.CurveEaseOut,
    animations: {
        () -> Void in
        self.collectionView.setContentOffset(CGPoint(x: 0, y: 100), animated: false)
    }, completion: nil)
动画就像我想要的那样发生,但是动画结束时屏幕外的细胞会立即消失。如果我用
contentOffset=
替换
setContentOffset()
,也会发生同样的情况

因此有人建议我改为使用
ScrollViewWillendDraging:withVelocity:targetContentOffset:
方法。所以我做了:

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffset.memory = CGPoint(x: 0, y: 100)
}
func ScrollViewWillendDraging(scrollView:UIScrollView,withVelocity:CGPoint,targetContentOffset:UnsafemeutablePointer){
targetContentOffset.memory=CGPoint(x:0,y:100)
}

现在的情况是,动画以给定的速度出现,因此如果用户抬起手指,它就会以0的速度缓慢地到达所需的位置。

问题是什么?问题是:如何使其动画化到特定的点,就像在我的第二个代码示例中一样,但不会使集合视图单元消失。