2009-07-24 35 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

您訪問屬性叫做「變換」(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