CAValueFunction should be used.
let scaleAnimation = CABasicAnimation(keyPath: "transform.scale")
->
let scaleAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
scaleAnimation.valueFunction = CAValueFunction(name: kCAValueFunctionScale)
and
let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")
->
let rotationAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
rotationAnimation.valueFunction = CAValueFunction(name: kCAValueFunctionRotateZ)
etc.
rotation.x
-> kCAValueFunctionRotateX
rotation.y
-> kCAValueFunctionRotateY
rotation.z
-> kCAValueFunctionRotateZ
rotation
-> kCAValueFunctionRotateZ
scale.x
-> kCAValueFunctionScaleX
scale.y
-> kCAValueFunctionScaleY
scale.z
-> kCAValueFunctionScaleZ
scale
-> kCAValueFunctionScale
translation.x
-> kCAValueFunctionTranslateX
translation.y
-> kCAValueFunctionTranslateY
translation.z
-> kCAValueFunctionTranslateZ
translation
-> kCAValueFunctionTranslate