如何在 CATransition 中更改视图淡入淡出的颜色
Posted
技术标签:
【中文标题】如何在 CATransition 中更改视图淡入淡出的颜色【英文标题】:How to change color of view fade in CATransition 【发布时间】:2015-11-01 06:04:55 【问题描述】:我正在实现一个自定义 CATransition,因此我可以从左侧或右侧而不是底部呈现 ViewController,但我遇到了一个有趣的问题,即 CATransition 的作用。
这是我的代码:
let transition:CATransition = CATransition()
transition.duration = 2
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
transition.type = kCATransitionMoveIn
transition.subtype = kCATransitionFromLeft
self.view.window?.layer.addAnimation(transition, forKey: nil)
对于正在呈现的视图,一切都按预期工作,但被替换的视图发生了什么是有趣的。它慢慢变黑,在我的新视图完全动画化之前产生了令人讨厌的黑色闪光。
如下图所示,我的新视图越接近完全动画化,旧视图就越暗。它在视图完全过渡之前达到全黑。
【问题讨论】:
为什么要为 Window 设置动画?为什么不对 self.View.Layer 设置动画。 【参考方案1】:您可以直接传输view.layer并更改窗口颜色。
@IBAction func test(_ sender: Any)
let transition:CATransition = CATransition()
transition.duration = 2
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
transition.type = CATransitionType.moveIn
transition.subtype = CATransitionSubtype.fromLeft
self.view.window?.backgroundColor = UIColor.red
self.view.layer.add(transition, forKey: nil)
如果您希望颜色不闪烁,只需将两个目标颜色设置为相同的值即可:
let transition:CATransition = CATransition()
transition.duration = 2
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
transition.type = CATransitionType.moveIn
transition.subtype = CATransitionSubtype.fromLeft
self.view.window?.backgroundColor = UIColor.green
self.view.layer.backgroundColor = UIColor.green.cgColor
self.view.layer.add(transition, forKey: nil)
您甚至可以添加自定义动画来获得所需的颜色过渡。
@IBAction func test(_ sender: Any)
let transition:CATransition = CATransition()
transition.duration = 2
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
transition.type = CATransitionType.moveIn
transition.subtype = CATransitionSubtype.fromLeft
let colorAnimation = CABasicAnimation.init(keyPath: "backgroundColor")
colorAnimation.duration = 1.5
colorAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
colorAnimation.toValue = UIColor.black.cgColor
colorAnimation.fromValue = UIColor.red.cgColor
self.view.window?.backgroundColor = UIColor.red
self.view.layer.backgroundColor = UIColor.white.cgColor
self.view.window?.layer.add(colorAnimation , forKey: nil)
self.view.layer.add(transition, forKey: nil)
【讨论】:
【参考方案2】:由于 CATransition 的默认功能,它正在发生。你需要改变窗口的颜色来避免这种情况。
【讨论】:
以上是关于如何在 CATransition 中更改视图淡入淡出的颜色的主要内容,如果未能解决你的问题,请参考以下文章