gpt4 book ai didi

ios - 如何控制UIView动画的速度?

转载 作者:行者123 更新时间:2023-11-28 15:37:28 29 4
gpt4 key购买 nike

我正在实现这样的旋转数字 View : https://github.com/jonathantribouharet/JTNumberScrollAnimatedView

但是,我希望动画继续滚动(1 到 9,然后回到 1 到 9),而不是从 1 到 9 滚动,直到我手动停止它。

我通过添加 UILabel subview 1-9、垂直堆叠并在底部为数字 1 添加额外标签来实现此目的。当旋转到底部(显示底部标签 1)时,在动画完成闭包中,我将变换设置回原点,显示顶部标签 1,然后重新开始旋转动画。

这很好用,但由于每个旋转 (1-9-1) 都是分开的,因此 1-9 的动画会加速,然后停在 1,并在下一次迭代时加快速度。这不是我想要的,我希望旋转在迭代之间保持恒定的速度。

如何使用 UIView 动画实现这一点?

代码如下:

 public func startAnimation(){
UIView.setAnimationCurve(UIViewAnimationCurve.easeIn)
UIView.animate(withDuration: TimeInterval(self.loopDuration), animations: { [unowned self] in
self.container!.transform = CGAffineTransform(translationX: 0, y: CGFloat(-(self.endNumber-self.startNumber+1)*(self.size)))
}) { [unowned self] (completed) in
if self.isAnimationStopped {
self.container!.transform = CGAffineTransform(translationX: 0, y: 0)
UIView.setAnimationCurve(UIViewAnimationCurve.easeOut)
UIView.animate(withDuration: TimeInterval(self.loopDuration), animations: {
self.container!.transform = CGAffineTransform(translationX: 0, y: CGFloat(-self.targetY))
})
} else {
self.container!.transform = CGAffineTransform(translationX: 0, y: 0)
self.startAnimation()
}
}

}

最佳答案

默认情况下,UIView 动画使用ease-in, ease-out 动画计时,动画平稳地加速、运行,然后减速停止。

您需要使用更长形式的 UIView.animate,animate(withDuration:delay:options:animations:completion:) 接受一个选项参数,并指定 的时序曲线.curveLinear.

只需为延迟和选项指定 0.0:.curveLinear

编辑:

请注意,如果您需要指定多个选项,例如 .curveLinear.allowUserInteraction,您将使用 OptionSet 语法,例如 选项:[.curveLinear, .allowUserInteraction]

关于ios - 如何控制UIView动画的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44135647/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com