【发布时间】:2017-07-01 22:45:39
【问题描述】:
UIView 的动画应该在视图添加到父视图后立即开始:
class myView: UIView {
override func didMoveToSuperview() {
super.didMoveToSuperview()
UIView.animate(
withDuration: duration,
delay: 0,
options: .curveLinear,
animations: {
CATransaction.begin()
CATransaction.setAnimationDuration(duration)
self.layer.colors = [color1, color2]
CATransaction.commit()
},
completion: nil
)
}
}
但是,结果是当视图在父视图中可见时动画已经结束。 UIView.animate 没有动画,而是立即设置self.layer.colors,可能是因为调用didMoveToSuperview 时视图还不可见。
如何让动画正常启动?
【问题讨论】:
-
在视图控制器的生命周期中,您的
MyView实例添加到视图层次结构中的哪个位置? -
@thefredelement 覆盖两个绘图函数都没有帮助,结果相同。
-
@beyowulf 在
super.viewDidAppear(animated)之后。 -
您是否要为
CAGradientLayer制作动画? -
@beyowulf 是的..
标签: ios swift uiview uiviewanimation catransaction