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

hmd*_*eep 11 iphone animation rotation scale ios

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

Cor*_*ius 34

a的当前转换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);
Run Code Online (Sandbox Code Playgroud)

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

angle = angle * (180 / M_PI);
Run Code Online (Sandbox Code Playgroud)

得到这样的比例:

CGFloat scaleX = view.transform.a;
CGFloat scaleY = view.transform.d;
Run Code Online (Sandbox Code Playgroud)

  • 我想知道为什么 CGAffineTransform 类没有这种东西的属性? (5认同)

gab*_*bbo 7

我遇到了同样的问题,找到了这个解决方案,但它只能部分解决我的问题。事实上,从变换中提取比例的建议解决方案:

(所有代码都在swift中)

scaleX = view.transform.a
scaleY = view.transform.d
Run Code Online (Sandbox Code Playgroud)

仅在旋转为 时有效0

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

scaleX = sqrt(pow(transform.a, 2) + pow(transform.c, 2))
scaleY = sqrt(pow(transform.b, 2) + pow(transform.d, 2))
Run Code Online (Sandbox Code Playgroud)

请注意,结果始终为正。如果你也对缩放的符号(视图翻转)感兴趣,那么缩放的符号就是transform.afor x flip 和transform.dfor y flip的符号。一种继承标志的方法。

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))
Run Code Online (Sandbox Code Playgroud)


cle*_*bit 5

在斯威夫特 3 中:

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