不确定这些xx
和xy
所有其他类似成员的确切含义,但我的猜测*是您将无法仅使用这些值来追溯应用的转换(这就像1+2+3+4
只知道您从1
和结束了10
-我认为*)。
在这种情况下,我的建议是派生CGAffineTransform
并存储所需的值,但由于它是一个结构你不能这样做,所以在我看来你最好的选择是编写一个包装类,如下所示:
class MyTransform
{
//wrapped transform structure
private CGAffineTransform transform;
//stored info about rotation
public float Rotation { get; private set; }
public MyTransform()
{
transform = CGAffineTransform.MakeIdentity();
Rotation = 0;
}
public void Rotate(float angle)
{
//rotate the actual transform
transform.Rotate(angle);
//store the info about rotation
Rotation += angle;
}
//lets You expose the wrapped transform more conveniently
public static implicit operator CGAffineTransform(MyTransform mt)
{
return mt.transform;
}
}
现在定义的运算符让您可以像这样使用这个类:
//do Your stuff
MyTransform t = new MyTransform();
t.Rotate(angle);
view.Transform = t;
//get the rotation
float r = t.Rotation;
//unfortunately You won't be able to do this:
float r2 = view.Transform.Rotation;
正如您所看到的,这种方法有其局限性,但您始终可以只使用一个实例MyTransform
来应用各种转换并将该实例存储在某处(或者,可能是此类转换的集合)。
您可能还想在课堂上存储/公开其他转换,例如缩放或翻译MyTransform
,但我相信您会知道从这里去哪里。
*如果我错了,请随时纠正我