在iOS中设置框架的原点

我试图以编程方式设置框架的原点。

方法一:

button.frame.origin.y = 100; 

方法2:

 CGRect frame = button.frame; frame.origin.y = 100; 

我试过方法1,但它不工作(显示一个错误说,expression式是不可转让的)。 方法2正在工作。 这是为什么?

需要指导我在做什么权利。

你不能做方法#1的原因是因为一个框架的个别属性是只读的。 但是,整个帧本身是可写/可分配的,因此您可以执行方法#2。

你甚至可以这样做:

 CGRect newFrame = button.frame; newFrame.origin.y += 100; // add 100 to y's current value button.frame = newFrame; 

你知道button.frame.origin.y返回一个值。

如果你使用这个,所以你会得到这个错误…

expression式不可分配。

 button.frame.origin.y = 100; 

所以这是正确的方法

 CGRect frame = button.frame; frame.origin.y = 100; 

否则你可以这样做…

 button.frame = CGRectMake(button.frame.origin.x, 100, button.frame.size.width, button.frame.size.height) 

这是因为如果你能够直接改变一个框架的原点或大小,你可以绕过UIView框架属性的setter方法。 这会因为多种原因而不好。

UIView将没有机会被通知有关框架的变化。 但它必须知道这些更改才能更新其子视图或重绘本身。

 button.frame.origin.y = 100; 

等于下面的调用:

 [button getFrame].origin.y = 100; 

[button getFrame]给你复制的CGRect

您正试图设置一个结构的结构variables。 从UIView没有指针结构(因为它是一个基本的C struct所以不能指出)。 因此,被复制。

所以基本上,你正在复制结构并设置它。 但是,那不行。