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

3 に答える 3

4

「transform」(CALayerクラス)と呼ばれるプロパティにアクセスします。つまり、CATransform3D引数タイプを使用してsetter関数を呼び出します。したがって、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
于 2009-07-24T23:47:38.853 に答える
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;
于 2009-11-04T05:50:24.900 に答える
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
于 2009-11-04T06:04:06.183 に答える