ios - 为什么 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:)
将接近但不完全正确!
解决方案
这可能是因为读出的值与整个 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"
推荐阅读
- macos - 使用 pip3 卸载 TensorFlow
- c# - 什么时候在 C# 中回收字符串池?
- apache - 为什么 Apache Shiro 的 [anon] 过滤器不能正常工作?
- ionic-framework - 如何更改 app.component.ts 中的项目?
- php - 无法通过 php (shell_exec) 访问 tmux 会话
- c# - 如何将我的 C# 代码转换为 LINQ 查询?
- r - 如何在整洁的数据框中映射自举样本的平均值
- python - 通过 Series.value_counts() 使用标准化数字设置小数位数
- javascript - 创建 4 个(开和关)按钮,每个按钮用于修改一个段落
- python - 在linregress python中重新排列标题