我正在创建一个iPad应用,并希望使用当前视图大小更新用户。我曾经这样做是通过计算CGAffineTransform的比例并将xScale乘以(相关视图的)宽度和yScale乘以高度来实现的。我想继续这样做,但我不再进行二维转换了,我确定用什么方程从CATransform3D中提取比例信息。
你能帮忙吗?
答案 0 :(得分:19)
要获取图层的当前比例,您只需在图层上执行valueForKeyPath:
:
CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
中找到
答案 1 :(得分:8)
我不熟悉API,但CATransform3D
看起来像是用于进行3D变换的常规4x4变换矩阵。
假设它只代表比例,旋转和平移的组合,可以通过计算左上角3x3的行或列的大小来提取比例因子,具体取决于CATransform3D
是否为行或分别为专业。
例如,如果是行主要,则x方向上的标度是(m11 * m11)+(m12 * m12)+(m13 * m13)的平方根。 y和z标度同样是第二和第三行的大小。
从CATransform3DMakeTranslation
的文档中可以看出CATransform3D
确实是行专业。
答案 2 :(得分:0)
这是快速4+的更新答案
guard let currentScaleX = view.layer.value(forKeyPath: "transform.scale.x") as? CGFloat {
return
}
print ("the scale x is \(currentScaleX)")
guard let currentScaleY = view.layer.value(forKeyPath: "transform.scale.y") as? CGFloat {
return
}
print ("the scale y is \(currentScaleY)")