【发布时间】:2017-07-20 04:39:22
【问题描述】:
我正在尝试实现两个连续的变换动画。当第一个动画结束时,通过完成处理程序调用第二个动画。因为这是一个变换动画,所以我的问题是当第一个动画结束时,图层会调整回原来的大小,然后第二个动画开始。我希望第二个动画在第一个转换动画之后以新的图层大小开始。这篇帖子Objective-C - CABasicAnimation applying changes after animation? 说我必须在开始第一个动画之前调整图层的大小/变换,这样当第一个动画结束时,图层实际上是新的大小。我尝试通过更改边界或将变换实际应用于图层来做到这一点,但它仍然无法正常工作。
override func viewDidAppear(_ animated: Bool) {
buildBar()
}
func buildBar(){
progressBar1.bounds = CGRect(x: 0, y: 0, width: 20, height: 5)
progressBar1.position = CGPoint(x: 0, y: 600)
progressBar1.backgroundColor = UIColor.white.cgColor
view.layer.addSublayer(progressBar1)
extendBar1()
}
func extendBar1(){
CATransaction.begin()
let transform1 = CATransform3DMakeScale(10, 1, 1)
let anim = CABasicAnimation(keyPath: "transform")
// self.progressBar1.bounds = CGRect(x: 0, y: 0, width: 200, height: 5)
// self.progressBar1.transform = transform1
anim.isRemovedOnCompletion = false
anim.fillMode = kCAFillModeForwards
anim.toValue = NSValue(caTransform3D:transform1)
anim.duration = 5.00
CATransaction.setCompletionBlock {
self.extendBar2()
}
progressBar1.add(anim, forKey: "transform")
CATransaction.commit()
}
func extendBar2(){
let transform1 = CATransform3DMakeScale(2, 1, 1)
let anim = CABasicAnimation(keyPath: "transform")
anim.isRemovedOnCompletion = false
anim.fillMode = kCAFillModeForwards
anim.toValue = NSValue(caTransform3D:transform1)
anim.duration = 5.00
progressBar1.add(anim, forKey: "transform")
}
【问题讨论】:
标签: ios swift3 calayer cabasicanimation