let animatedLayer = CAShapeLayer()
// animatedLayerの設定
let anim = CABasicAnimation(keyPath: "path")
anim.fromValue = (animatedLayer.presentationLayer() as? CAShapeLayer)?.path
anim.toValue = toPath
anim.duration = 0.25
anim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
anim.removedOnCompletion = false
anim.fillMode = kCAFillModeForwards
animatedLayer.addAnimation(anim, forKey: "MyPathAnimation")
補足
-addAnimation:forKey:
でkeyをnilにするかどうかでfromValue
を設定するかが決まる。
- keyを
nil
にする場合は、fromValue
は設定しない - keyに何か設定する場合は、
presentationLayer
を利用してfromValue
を設定する
これに加えて、animatedLayer
に追加したanim
とその状態を残すようにする。
また、animatedLayer
はアニメーション終了後、非表示にすることを想定しているため、実際にレイヤーの値の更新(animatedLayer.path = toPath
)は行っていない。