为什么我们不能直接改变UIView框架的大小或来源?

时间:2012-02-23 10:43:21

标签: objective-c ios

对于知道这一点的人来说,这可能听起来很愚蠢,但我对iOS很陌生。 我想知道,为什么我们不能修改原点或大小,或者可能是UIView框架的这些属性的x,y或高度宽度?

frame是一个CGRect结构,原点和大小又是CGPoint和CGSize结构。 当我们可以访问它们时,为什么我们不能修改它们?

在CGRect中没有这样的东西,我们可以修改它的属性,所以为什么我们不能用于框架或边界。

2 个答案:

答案 0 :(得分:21)

我认为你的意思是为什么你不能做这样的事情:

myView.frame.origin.x = 23.0;

这是一个很好的问题,对此毫无愚蠢。问题是框​​架被保持为视图的属性,而不是框架的各个组件(尺寸和原点,甚至更深,宽度,长度,x和y)。

框架是视图的基础,因此如果视图的框架被修改,视图需要执行许多操作。如果您要直接进入并修改origin.x,那么您将绕过可能发生所有这种魔法的setFrame方法。

当您访问view.frame时,您将获得一个与view.frame,具有相同值的CGRect,但实际上不是框架,因此对它的任何修改都不会影响视图。

您可以分步执行:

CGRect frame = view.frame;
frame.origin.x = 23.0;
view.frame = frame;

答案 1 :(得分:9)

答案在于(稍微混淆)语言语法:

  1. myView是一个Objective-C对象。
  2. 因此myView.frame是要发送的属性访问方法。
  3. 它返回CGRect类型的C结构。
  4. frame.origin.x = 1修改返回的代码本地临时结构。
  5. 您的意图是通过向对象发送消息来告诉对象。但相反,您向对象询问数据,然后修改此数据。该对象现在永远不会。

    编译器应警告您此错误。