【发布时间】:2014-10-30 23:22:47
【问题描述】:
我尝试使用下面的代码在屏幕上创建一个连续旋转的正方形。但我不知道为什么转速会发生变化。如何更改代码以使转速不变?我尝试了不同的UIViewKeyframeAnimationOptions,但似乎它们都不起作用。
override func viewDidLoad() {
super.viewDidLoad()
let square = UIView()
square.frame = CGRect(x: 55, y: 300, width: 40, height: 40)
square.backgroundColor = UIColor.redColor()
self.view.addSubview(square)
let duration = 1.0
let delay = 0.0
let options = UIViewKeyframeAnimationOptions.Repeat
UIView.animateKeyframesWithDuration(duration, delay: delay, options: options, animations: {
let fullRotation = CGFloat(M_PI * 2)
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 1/3, animations: {
square.transform = CGAffineTransformMakeRotation(1/3 * fullRotation)
})
UIView.addKeyframeWithRelativeStartTime(1/3, relativeDuration: 1/3, animations: {
square.transform = CGAffineTransformMakeRotation(2/3 * fullRotation)
})
UIView.addKeyframeWithRelativeStartTime(2/3, relativeDuration: 1/3, animations: {
square.transform = CGAffineTransformMakeRotation(3/3 * fullRotation)
})
}, completion: {finished in
})
}
【问题讨论】:
-
1/3 给出了与 1.0/3.0 不同的结果。是这个问题吗?
-
试图将第 9 行更改为
let options = UIViewKeyframeAnimationOptions.CalculationModeLinear|UIViewKeyframeAnimationOptions.Repeat但没有帮助 -
尝试将所有 1/3 更改为 1.0/3.0 。但无济于事
-
您使用关键帧是否有原因?将 UIView.animateWithDuration(duration:delay:options:animations:completion:) 工作。我也遇到了关键帧版本的问题,但让这个版本可以工作。
-
@JMFR 我正在使用关键帧,因为我发现 animateWithDuration 不起作用。因为一个完整的 360 度旋转的开始和结束状态是等价的,Swift 没有在两者之间插入任何东西。如果您获得了 animateWithDuration 版本,能否提供更多详细信息?
标签: ios animation swift rotation repeat