我正在实现这样的旋转数字视图: https://github.com/jonathantribouharet/JTNumberScrollAnimatedView
但是,我不想从1到9滚动,而是希望动画继续滚动(1到9然后再回到1到9),直到我手动停止它。
我通过添加垂直堆叠的UILabel子视图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()
}
}
}
答案 0 :(得分:1)
默认情况下,UIView动画使用ease-in, ease-out
动画计时,动画平滑加速,运行,然后减速停止。
您需要使用更长形式的UIView.animate,animate(withDuration:delay:options:animations:completion:)
,它采用选项参数,并指定.curveLinear
的时间曲线。
只需为延迟指定0.0,并options: .curveLinear