如何让UIView关键帧动画仅用指定颜色数组,去除初始白色背景
解决UIView关键帧动画初始白色背景问题
你的问题出在动画启动前,view的背景色是默认白色,第一个关键帧会从这个白色过渡到colors数组的第一个颜色,所以出现了不需要的白色初始状态。按下面的方法修改就能解决:
修改步骤
- 提前设置初始背景色:在动画代码执行前,把view的背景色直接设为
colors数组的第一个元素,让动画起始状态就是目标颜色。 - 保持关键帧逻辑:关键帧的相对时长和顺序不变,确保动画全程在数组内的颜色之间过渡。
修改后的完整代码
var color1 = UIColor.purple var color2 = UIColor.blue var color3 = UIColor.green var color4 = UIColor.yellow var color5 = UIColor.orange extension UIViewController { func viewDidLoad() { let colors = [color1, color2, color3, color4, color5] // 提前设置初始背景色,跳过默认白色 view.backgroundColor = colors.first let totalDuration = 5.0 let relDuration = 1.0 / Double(colors.count) var relStartTime: TimeInterval = 0.0 UIView.animateKeyframes(withDuration: totalDuration, delay: 0.0, options: [.repeat, .allowUserInteraction, .autoreverse, .calculationModeCubicPaced], animations: { colors.forEach { c in UIView.addKeyframe(withRelativeStartTime: relStartTime, relativeDuration: relDuration) { self.view.backgroundColor = c } relStartTime += relDuration } }) } }
额外说明
因为你用了.autoreverse选项,修改后动画会从第一个颜色开始,依次过渡到最后一个颜色,再反向过渡回来,全程不会出现初始白色。之前的停顿和白色初始帧都会消失,完全使用你定义的颜色数组完成动画。
内容的提问来源于stack exchange,提问作者user19409159
相关产品推荐
相关产品推荐

