从CGAffineTransform获取比例和旋转角度?

时间:2014-07-18 08:09:36

标签: ios iphone animation rotation scale

我希望获得比例因子和旋转角度视图。我已经将CGAffineTransform应用于该视图。

3 个答案:

答案 0 :(得分:30)

UIView的当前转换存储在其transform属性中。这是CGAffineTransform结构,您可以在此处详细了解:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

你可以从变换得到弧度的角度,如下所示:

CGFloat angle = atan2f(yourView.transform.b, yourView.transform.a);

如果你想要以度为单位的角度,你需要像这样转换它:

angle = angle * (180 / M_PI);

获得如下比例:

CGFloat scaleX = view.transform.a;
CGFloat scaleY = view.transform.d;

答案 1 :(得分:0)

在Swift 3中:

let rotation = atan2(view.transform.b, view.transform.a)

答案 2 :(得分:0)

我遇到了同样的问题,找到了解决方案,但是它只能部分解决我的问题。 实际上,提出的用于从变换中提取比例的解决方案:

(所有代码均迅速输入)

scaleX = view.transform.a
scaleY = view.transform.d

仅在旋转为0时有效。

当旋转不是0时,transform.atransform.d受旋转影响。要获取正确的值,您可以使用

scaleX = sqrt(pow(transform.a, 2) + pow(transform.c, 2))
scaleY = sqrt(pow(transform.b, 2) + pow(transform.d, 2))

请注意,结果始终是肯定的。如果您还对缩放的符号(视图已翻转)感兴趣,则缩放的符号是transform.a(对于x翻转)和transform.d(对于y翻转)的符号。继承符号的一种方法。

scaleX = (transform.a/abs(transform.a)) * sqrt(pow(transform.a, 2) + pow(transform.c, 2))
scaleY = (transform.d/abs(transform.d)) * sqrt(pow(transform.b, 2) + pow(transform.d, 2))