Quartz 2D - 从transform属性中获取旋转度?

时间:2010-04-29 19:46:02

标签: iphone rotation quartz-graphics transform

我有一些UIView,其中有几个用户创建的子视图。用户可以移动和旋转子视图。我正在使用UIView的transform属性来完成此任务。我想保存“文档”以便以后重新创建它。

我目前正在将transform属性写入文件以及其他一些数据。但是transform属性是6个数字集,而不是我想以某种方式获得用户制作的旋转度并保存它。

有没有办法进行变换并退出创建变换的总旋转?显然,当用户在屏幕上移动对象时,会进行许多小变换。

2 个答案:

答案 0 :(得分:2)

有一种比lucius指出的数学更简单的方法。您可以使用Core Animation提供的辅助键路径来提取UIView的支持层的当前旋转:

CGFloat rotationAngle =  [[view.layer valueForKeyPath:@"transform.rotation.z"] floatValue];

这将以弧度为单位为您提供视图的当前旋转。请注意,这会报告第一个顺时针旋转半圆的正值和第二个的负值,因此您需要在计算中考虑该值。

答案 1 :(得分:0)

是的,请阅读The transformation matrix for an affine transformation。所以你需要弄清楚变换的象限(它所在的圆圈的90度部分),并取sin()的倒数(即cosecant())和cos()的倒数。是矩阵的ac的割线()。我自己没有这样做,但看起来很容易。