的UIView的框架,边界,中心,产地,什么时候用什么呢?
题
UIView
具有属性frame
,bounds
,center
,和origin
,并且它们似乎都是相互关联的。大多数时候,我设置frame
的位置和大小,当处理UIView
。据我所知,frame
使用全球坐标系和bounds
使用本地视图(因此它的x和y是0,但不总是)的协调,但它仍然混乱,我当用什么。
在什么上下文(和什么是正确的时间)的其它性质(bounds
,center
,origin
)应使用
解决方案
以上Marco的答案是正确的,但只是对问题展开“在什么样的情况下” ......
架 - 这是你最经常使用的财产进行正常的iPhone应用程序。大多数控制将被布局相对于“含有”控制,因此frame.origin将直接对应于其中控制需要显示,和frame.size将决定有多大使控制。
中心 - 这是你可能会专注于基于精灵的游戏和可能发生移动或缩放动画财产。默认情况下,动画和轮换将基于UIView的中心。它很少有意义的尝试和由框架属性管理这样的对象。
<强>边界强> - 此属性不定位属性,但定义了UIView“相对”的帧的可绘制区域。默认情况下此特性通常为(0,0,宽度,高度)。更改此属性将可以绘制文本框外或限制绘制的框架内较小的区域。这方面的一个很好的讨论可以在下面的链接中找到。这是罕见的这个属性被操纵,除非有特殊需要调整绘图区域。唯一的例外是,大多数程序将使用[[UIScreen mainScreen] bounds]
在启动时来确定所述应用和设置它们的初始的UIView的相应帧中的可视区域。
希望这有助于阐明其中可能会使用各个属性的情况。
其他提示
它们(使用的事实,帧是一个纯粹的合成值,而不是由实际的实例变量的支持和)相关的值,并且保持在由属性setter / getter方法是一致的。
的主要方程是:
frame.origin = center - bounds.size / 2
(其是相同的)
center = frame.origin + bounds.size / 2
(还有还有)
frame.size = bounds.size
这不是代码,只是方程来表达这三个特性之间的不变量。这些公式还假设您的视图的变换身份,它是默认。如果不是,那么边界和中心保持相同的意思,但框可以改变。除非你在做非直角旋转,该框架将始终处于上海华盈的坐标中的转化视图。
这个东西是所有更详细地有用的小型图书馆这里解释:
属性center
,bounds
和frame
互锁:改变一个将更新别人,所以使用它们不过你想要的。例如,而不是修改frame
的X / Y PARAMS回到中心的视图,只是更新center
属性。