これら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;
ご覧のとおり、このアプローチには制限がありますが、常に の 1 つのインスタンスのみを使用MyTransform
してあらゆる種類の変換を適用し、そのインスタンスをどこかに (または、そのような変換のコレクションとして) 格納できます。
クラスでスケールや変換などの他の変換を保存/公開することもできMyTransform
ますが、ここからどこに行くべきかがわかると思います。
*間違っていたら遠慮なく訂正してください