我有一些UIView,其中有几个用户创建的子视图。用户可以移动和旋转子视图。我正在使用UIView的transform属性来完成此任务。我想保存“文档”以便以后重新创建它。
我目前正在将transform属性写入文件以及其他一些数据。但是transform属性是6个数字集,而不是我想以某种方式获得用户制作的旋转度并保存它。
有没有办法进行变换并退出创建变换的总旋转?显然,当用户在屏幕上移动对象时,会进行许多小变换。
答案 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()的倒数。是矩阵的a
和c
的割线()。我自己没有这样做,但看起来很容易。