内容偏移UIScrollView Swift的平滑移动

时间:2015-11-25 14:25:44

标签: swift animation uiscrollview contentoffset

我想以编程方式设置我的scrollview的contentOffset,当contentOffset在两点之间时(请参见下图)和Swift。

问题是,我想为移动添加一个平滑过渡,但我没有为此找到文档。我试图做一个循环,以逐渐减少内容偏移,但结果不是那么好。

使用此示例,如果内容偏移在滚动结束时小于150像素,则它会平滑(动画的持续时间为1秒)到偏移量等于100的点。最多150像素,它达到200px。

如果你能为我提供指导(文件或快速示例),那将会很棒:)谢谢!

enter image description here

4 个答案:

答案 0 :(得分:25)

您可以使用UIView.animations

  func goToPoint() {
    dispatch_async(dispatch_get_main_queue()) {
      UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
        self.scrollView.contentOffset.x = 200
        }, completion: nil)
    }
  }

答案 1 :(得分:10)

这是fatihyildizhan代码的Swift 3版本。

       DispatchQueue.main.async {
        UIView.animate(withDuration: 0.2, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: {
            self.myScrollView.contentOffset.x = CGFloat(startingPointForView)
            }, completion: nil)
    }

答案 2 :(得分:3)

现在,您可以简单地调用方法setContentOffset(_ contentOffset: CGPoint, animated: Bool),而不用先前的解决方法调用混乱的动画块。参见:

x = CGFloat(startingPointForView)
myScrollView.setContentOffset(CGPoint(x: x, y: 0), animated: true)

希望有帮助。

答案 3 :(得分:0)

快捷键4:

DispatchQueue.main.async {
    UIView.animate(withDuration: 1, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: {
            self.scrollView.contentOffset.x = 200
    }, completion: nil)
}