简而言之,我想为svg图像设置动画(用动画绘制svg),在完成动画后,将另一个svg图像设置为我的视图背景,但遗憾的是UI不会更新,背景也不会改变。 使用此代码绘制零件没有问题:
@override func viewDidLoad() {
animateLogo()
}
func animateLogo()
let bezierPath = UIBezierPath(svgPath : mySvgPath)
let shapeLayer= CAShapeLayer()
shapeLayer.path = bezierPath.CGPath
shapeLayer.strokeColor = UIColor.white.cgColor
shapeLayer.fillColor = UIColor.red.cgColor
view.layer.addSublayer(shapeLayer)
let animation = CABasicAnimation(keyPath: “strokeEnd”)
animation.fromValue = 0.0
animation.toValue = 1.0
animation.duration = 3
animation.delegate = self
shapeLayer.addAnimation(animation, forKey: “drawLineAnimation”)
}
3秒后触发animationDidStop()
方法,但经过长时间延迟背景会发生变化。
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
print(#function)
let bezierPath = UIBezierPath(svgPath : anotherSvgPath)
let shapeLayer= CAShapeLayer()
shapeLayer.path = bezierPath.CGPath
shapeLayer.strokeColor = UIColor.white.cgColor
shapeLayer.fillColor = UIColor.red.cgColor
view.layer.addSublayer(shapeLayer)
}
为什么UI不会立即更新?我做错了什么?
我也打电话给setNeedsDisplay
刷新用户界面但没有任何事情发生。