2つの連続した変換アニメーションを実装しようとしています。最初のアニメーションが終了すると、2番目のアニメーションが完了ハンドラを介して呼び出されます。これは変換アニメーションなので、最初のアニメーションが終了すると、レイヤーが元のサイズに戻ってから2番目のアニメーションが開始されます。 2番目のアニメーションが最初の変換アニメーションの後に新しいレイヤーサイズで始まるようにしたいと思います。この投稿Objective-C - CABasicAnimation applying changes after animation?は、最初のアニメーションを開始する前にレイヤーをサイズ変更/変形しなければならないので、最初のアニメーションが終了するとレイヤーは実際に新しいサイズになります。私は境界を変更するか、実際にレイヤーにトランスフォームを適用することによってそれをしようとしましたが、まだ動作していません。変換アニメーション後にCALayerの元のサイズに戻す
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")
}
これで補完ハンドラを使用することはできますか?私は2つのアニメーションの間に何かをしようとしているのですが、なぜ私は完了ハンドラを持っているのですか? – Brosef
ハム、いいえ、キーフレームアニメーションの特定のポイントに達するとコールバックはありません。完了ハンドラを使用できるように、2つの異なるアニメーションで私の答えを延長してください。 – tomahh
@Brosef 1分が12になりましたが、回答が更新されました:) – tomahh