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)は行っていない。