例如,我可以像这样访问它们:
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会识别矩阵中的所有这些字段。
答案 0 :(得分: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
答案 1 :(得分: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;
答案 2 :(得分: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