Iphone 如何更改变换的值?

Iphone 如何更改变换的值?,iphone,matrix,transform,Iphone,Matrix,Transform,例如,我可以这样访问它们: 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

例如,我可以这样访问它们:

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可以识别矩阵中的所有这些字段。

您可以访问名为“transform”(CALayer类)的属性,即使用CATTransformM3D参数类型调用setter函数。 因此,您无法直接访问CATTransferM3D结构成员

您可能需要首先初始化临时变量(CATTransferM3D类型),然后将其全部分配给属性

通过这种方式访问的任何属性都会发生同样的情况

例如:

view.frame.origin.x = 0; //will **not** work for UIView* view
工作样本(通过临时变量):


您可以访问名为“transform”(CALayer类)的属性,即具有CATTransformM3D参数类型的调用setter函数。 因此,您无法直接访问CATTransferM3D结构成员

您可能需要首先初始化临时变量(CATTransferM3D类型),然后将其全部分配给属性

通过这种方式访问的任何属性都会发生同样的情况

例如:

view.frame.origin.x = 0; //will **not** work for UIView* view
工作样本(通过临时变量):


以这种方式访问和设置转换似乎没有问题

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;

以这种方式访问和设置转换似乎没有问题

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;

self.layer.transform.m32=0.3f不会对层的变换执行任何操作

self.layer.transform
返回不是对象的CATTransferM3D。这意味着它已被复制,如果更改
.m32
,则更改的是副本,而不是图层的CATTransformM3d

这将起作用(类似于mahboudz的代码示例):


self.layer.transform.m32=0.3f不会对层的变换执行任何操作

self.layer.transform
返回不是对象的CATTransferM3D。这意味着它已被复制,如果更改
.m32
,则更改的是副本,而不是图层的CATTransformM3d

这将起作用(类似于mahboudz的代码示例):