从CATransform3D获取“比例”

时间:2010-12-14 22:28:08

标签: iphone math scale catransform3d

我正在创建一个iPad应用,并希望使用当前视图大小更新用户。我曾经这样做是通过计算CGAffineTransform的比例并将xScale乘以(相关视图的)宽度和yScale乘以高度来实现的。我想继续这样做,但我不再进行二维转换了,我确定用什么方程从CATransform3D中提取比例信息。

你能帮忙吗?

3 个答案:

答案 0 :(得分:19)

要获取图层的当前比例,您只需在图层上执行valueForKeyPath:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];

其他密钥可在Apples Core Animation Programming Guide

中找到

答案 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)")