首页 > 解决方案 > 为什么 CALayer 的“transform.scale”的值与其变换比例不匹配?

问题描述

想象一下,您正在尝试缩放一个图层,然后再读取该比例(例如:在更改比例的动画期间)。

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"

使用读取的比例值value(forKeyPath:)将接近但不完全正确!

标签: iosuikitcalayercatransform3d

解决方案


这可能是因为读出的值与整个 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"

推荐阅读