为什么CALayer的“ transform.scale”值与它的转换比例不匹配?

问题描述 投票:0回答:1

想像您要缩放图层,然后稍后再读出该缩放比例(例如:在更改缩放比例的动画中)。

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

使用value(forKeyPath:)读出的刻度值将接近,但不太正确!

ios uikit calayer catransform3d
1个回答
0
投票

这可能是因为读出的值与整个3D比例有关(考虑x,y和z)。专门读取x或y比例尺将返回正确的值:

let desiredScale = 0.5
layer.transform = CATransform3DMakeScale(desiredScale, desiredScale, 1)
let wholeScale = layer.value(forKeyPath: "transform.scale") as? NSNumber)?.floatValue
let xScale = layer.value(forKeyPath: "transform.scale.x") as? NSNumber)?.floatValue
print("scale: \(wholeScale)") // "scale: 0.6666666"
print("scale: \(xScale)") // "scale: 0.5"
© www.soinside.com 2019 - 2024. All rights reserved.