从CGAffineTransform中查找比例值

Mar*_*ong 8 iphone core-graphics objective-c ipad ios

好的,所以我意识到我可以从图层的CATransform3D中找到比例值,如下所示:

 float scale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
Run Code Online (Sandbox Code Playgroud)

但我不能为我的生活弄清楚如何从CGAffineTransform中找到比例值.比方说我有这个名为"cameraTransform"的CGAffineTransform:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
CGAffineTransform *cameraTransform =  imagePicker.cameraViewTransform;
Run Code Online (Sandbox Code Playgroud)

现在如何从cameraTransform获取比例值?

Mar*_*ler 7

我尝试给出各种CGAffineTransforms的一般答案,甚至是旋转的.

假设您的CGAffineTransform包含(可选)

  • 回转
  • 翻译
  • 缩放

  • 没有歪斜

然后有一个通用的公式,给你比例因子:

CGAffineTransform transform = ...;
CGFloat scaleFactor = sqrt(fabs(transform.a * transform.d - transform.b * transform.c));
Run Code Online (Sandbox Code Playgroud)

"镜像"或翻转坐标方向将被忽略,这意味着(x - > -x; y - > y)将导致scaleFactor == 1而不是-1.