contentoffset UIScrollView Swift的平滑移动

问题描述 投票:20回答:4

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

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

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

如果您可以向我提供操作说明(文档或快速示例),那将是很好的:)谢谢!

enter image description here

swift animation uiscrollview contentoffset
4个回答
27
投票

您可以使用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)
    }
  }

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)
}

5
投票

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

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

希望有帮助。


1
投票

Swift 4:

DispatchQueue.main.async {
    UIView.animate(withDuration: 1, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: {
            self.scrollView.contentOffset.x = 200
    }, completion: nil)
}
© www.soinside.com 2019 - 2024. All rights reserved.