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

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

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

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

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

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. myView是一个Objective-C对象。
  2. 所以myView.frame是一个发送的属性存取方法。
  3. 它返回一个CGRecttypes的C结构。
  4. frame.origin.x = 1修改您的代码的本地返回的临时结构。

你的意图是通过发送消息来告诉对象。 而是你问对象的数据,然后修改这些数据。 该对象将永远不会。

编译器应该警告你这个错误。