所以我有一个条形图,其中每个条形都是 CALayer 。我想为每个图层设置不同的延迟动画。
private func drawBar(xPos: CGFloat, yPos: CGFloat, color: UIColor) {
// create animation
let animation = CABasicAnimation(keyPath: "bounds.size.height")
animation.beginTime = CACurrentMediaTime() + StaticVars.delay
animation.fromValue = 0
animation.toValue = mainLayer.frame.height - bottomSpace - yPos
animation.duration = 2.0
StaticVars.delay += 0.1
// create bar
let barLayer = CALayer()
barLayer.anchorPoint = CGPoint(x: 1, y: 1)
barLayer.frame = CGRect(x: xPos, y: yPos, width: barWidth, height: mainLayer.frame.height - bottomSpace - yPos)
barLayer.backgroundColor = color.cgColor
barLayer.add(animation, forKey: nil)
mainLayer.addSublayer(barLayer)
}
这很好用,但是有一个问题:图表已经存在于屏幕上,它等待延迟(0.1),然后开始为每个图层添加延迟动画。
我不明白为什么图表已经显示。我想要的是,当应用程序出现在屏幕上时,条形图应该不可见,只是在第一个延迟之后,图表才开始动画。
答案 0 :(得分:1)
如果您希望图层在开始之前的时间里看起来像是fromValue
(使用beginTime
进行设置),则可以通过设置{{1 }}到.backwards
:
fillMode
否则,动画将在beginTime之前,beginTime +持续时间之后的所有时间显示模型值(图层的实际帧的高度):
进行此更改后,动画将在开始时间之前用animation.fillMode = .backwards
填充任何值(通过将开始时间之前的任何时间限制到动画开始):