我正在尝试写一个闪烁的动画,但它的时间感觉不合适。我在操场上做了一个简单的版本:
import UIKit
import XCPlayground
let v = UIView()
v.frame.size = CGSize(width: 200, height: 200)
v.backgroundColor = UIColor.redColor()
v.layer.cornerRadius = 100
UIView.animateKeyframesWithDuration(1, delay: 0, options: .Repeat, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0.5, animations: {
v.alpha = 0.0
})
UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
v.alpha = 0.5
})
}, completion: nil)
XCPlaygroundPage.currentPage.liveView = v
视图从0渐变为0.5,然后在恢复动画之前看起来在完整的alpha值下停顿一秒钟。我在模拟器中注意到了同样的事情。
关于关键帧应该如何工作,我有什么遗漏吗?
答案 0 :(得分:2)
经过检查,我认为v
视图alpha
的默认设置为1.0
。这意味着在动画结束一瞬间后,它再次处于完全alpha
,然后重复动画。为了弥补这一点并获得您想要的效果,您可以考虑在运行alpha
之前将0.0
设置为XCPlaygroundPage.currentPage.liveView = v
。
<强>更新强>
您可以将代码的动画分解为4种状态。
alpha
为1.0
。alpha
更改为0.0
。alpha
更改为0.5
。v
视图会恢复为状态 1 并重复播放动画。 状态 4 是完整alpha
闪烁的地方,因为v
视图在{{1}中从0.5
转到1.0
秒但是,计算机无法在0.0
秒内发生任何事情(由于复杂的物理原因,实际上不可能),因此当计算机试图接近{{{{}}时,结果是完全0.0
的瞬间闪烁。 1}}秒尽可能。
为了避免这种情况,您可以将原始alpha
设置为0.0
,这样动画的状态 1 将与其状态的结果相同3 ,或者您可以在动画结束前添加另一个将alpha
带回0.5
的关键帧:
示例:
选项1:
alpha
选项2:
0.0