2009-07-24 10 views
0

は、私はこのようにそれらにアクセスすることができます。トランスフォームの値を変更するにはどうすればよいですか?例えば

self.layer.transform.m32 

が、私はそれが無効な割り当てを言う

self.layer.transform.m32 = 0.3f; 

のように、それに値を割り当てることはできません。しかし、それは実際に働くべきではありませんか?

struct CATransform3D 
    { 
    CGFloat m11, m12, m13, m14; 
    CGFloat m21, m22, m23, m24; 
    CGFloat m31, m32, m33, m34; 
    CGFloat m41, m42, m43, m44; 
}; 

少なくともXcodeは、これらのフィールドをすべてマトリックスで認識します。

答えて

4

"transform"(CALayerクラス)というプロパティ、つまりCATransform3D引数型のコールセッター関数にアクセスします。 したがって、CATransform3D構造体のメンバーに直接アクセスすることはできません。

一時変数を最初に初期化(CATransform3Dタイプ)し、それを完全にプロパティに割り当てる必要があるかもしれません。

このようにアクセスしようとするプロパティで同じことが起こります。例えば

:(一時変数を経由して)

view.frame.origin.x = 0; //will **not** work for UIView* view 

勤務サンプル:

CATransform3D temp = self.layer.transform; //create temporary copy 
temp.m32 = 0.3f; 
self.layer.transform = temp; //call setter [self.layer setTransform:temp]- mean the same 
0

私は何の問題このようにアクセスし、変換の設定を持っていないように見えます。

CATransform3D t = view.transform; 
NSLog(@"t.m32 = %f, t.m34 = %f", t.m32, t.m34); 
t.m34 = 100.5; 
NSLog(@"t.m32 = %f, t.m34 = %f", t.m32, t.m34); 
view.transform = t; 
0

self.layer.transform.m32 = 0.3f;レイヤのトランスフォームには何も行われません。

self.layer.transformは、オブジェクトではないCATransform3Dを返します。これはコピーされたことを意味し、.m32を変更すると、レイヤのCATransform3Dではなくコピーが変更されます。

これは(「コードサンプルをmahboudzと同様)に動作します:

CATransform3D t = self.layer.transform; // t is a copy of self.layer.transform 
t.m32 = 0.3f; // modify the copy 
self.layer.transform = t; // copy it back into self.layer.transform 
関連する問題