Ios 为什么CALayer的“transform.scale”值与其变换比例不匹配?

Ios 为什么CALayer的“transform.scale”值与其变换比例不匹配?,ios,uikit,calayer,catransform3d,Ios,Uikit,Calayer,Catransform3d,假设您尝试缩放一个层,然后稍后读取该比例,例如:在更改比例的动画期间 let desiredScale = 0.5 layer.transform = CATransform3DMakeScale(desiredScale, desiredScale, 1) let readScale = layer.value(forKeyPath: "transform.scale") as? Double print("scale: \(readScale)") // "scale: 0.6666666"

假设您尝试缩放一个层,然后稍后读取该比例,例如:在更改比例的动画期间

let desiredScale = 0.5
layer.transform = CATransform3DMakeScale(desiredScale, desiredScale, 1)
let readScale = layer.value(forKeyPath: "transform.scale") as? Double
print("scale: \(readScale)") // "scale: 0.6666666"

使用valueforKeyPath:读取的比例值将接近但不完全正确

这可能是因为读取的值与整个3D比例有关,比如x、y和z。读取x或y刻度将返回正确的值:

let desiredScale = 0.5
layer.transform = CATransform3DMakeScale(desiredScale, desiredScale, 1)
let wholeScale = layer.value(forKeyPath: "transform.scale") as? Double
let xScale = layer.value(forKeyPath: "transform.scale.x") as? Double
print("scale: \(wholeScale)") // "scale: 0.6666666"
print("scale: \(xScale)") // "scale: 0.5"

那很有趣。顺便说一句,你不必说是?NSNumber?浮点值。这是斯威夫特,不是客观的C!就像?“双倍就行了。”马特今天学到了很多。谢谢