好的,所以我意识到我可以从图层的CATransform3D中找到这样的比例值:
float scale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
但我不能为我的生活弄清楚如何从CGAffineTransform中找到比例值。比方说我有这个名为“cameraTransform”的CGAffineTransform:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
CGAffineTransform *cameraTransform = imagePicker.cameraViewTransform;
现在如何从cameraTransform获取比例值?
答案 0 :(得分:6)
我尝试给出各种CGAffineTransforms的一般答案,即使是旋转的CGAffineTransforms。
假设您的CGAffineTransform包含(可选)
和
然后是一个通用公式,为您提供比例因子:
CGAffineTransform transform = ...;
CGFloat scaleFactor = sqrt(fabs(transform.a * transform.d - transform.b * transform.c));
“镜像”或翻转坐标方向将被忽略,这意味着(x - > -x; y - > y)将导致scaleFactor == 1而不是-1。
答案 1 :(得分:2)
http://en.wikipedia.org/wiki/Determinant
“可以对具有实数条目的方阵的行列式的值进行几何解释:行列式的绝对值给出在相关线性变换下乘以面积或体积的比例因子,而其符号指示变换是否保留方向。因此,当应用于具有有限区域的平面区域时,具有行列式-2的2×2矩阵将该区域变换为具有两倍面积的区域,同时反转其方向。“
本文接着给出了3x3矩阵和2x2矩阵的行列式的公式。 CGAffineTransforms是3x3矩阵,但它们的右列始终为0 0 1.结果是行列式将等于矩阵的2x2左上方的行列式。因此,您可以使用结构中的值并自行计算比例。
答案 2 :(得分:0)