的UIView的框架,边界,中心,产地,什么时候用什么呢?的UIView的框架,边界,中心,产地,什

2019-05-14 10:34发布

UIView有属性frameboundscenter ,以及origin ,他们都似乎是相互关联的。 大多数时候,我处理frame设置的位置和大小时UIView 。 据我所知, frame采用全球坐标系和bounds使用本地视图坐标(因此它的x和y是0,但并非总是如此),但它仍然混乱,我当用什么。

在什么情况下(和什么是正确的时间)的其他属性( boundscenterorigin )应使用?

Answer 1:

上述马可的答案是正确的,但只对“在什么情况下”的问题,扩大...

框架 -这是你最经常使用的财产进行正常的iPhone应用程序。 大多数控制将被布局相对于“含有”控制,因此frame.origin将直接对应于其中控制需要显示,和frame.size将决定有多大使控制。

中心 -这是你可能会专注于基于精灵的游戏和可能发生移动或缩放动画财产。 默认情况下,动画和轮换将基于UIView的中心。 它很少有意义的尝试,并通过框架财产管理这样的对象。

边界 -此属性不定位属性,但定义了UIView“相对”的帧的可绘制区域。 默认情况下此特性通常为(0,0, 宽度高度 )。 更改此属性将可以绘制文本框外或限制绘制的框架内较小的区域。 这方面的一个很好的讨论可以在下面的链接中找到。 这是罕见的这个属性被操纵,除非有特殊需要调整绘图区域。 唯一的例外是,大多数程序将使用[[UIScreen mainScreen] bounds]上启动以确定该应用程序,并相应地设置其初始的UIView的帧中的可见区域。

为什么会出现一个矩形框和一个UIView的一个边界矩形?

希望这有助于阐明其中可能会使用各个属性的情况。



Answer 2:

它们相关的值,并且保持在由属性setter / getter方法(以及使用该事实,即帧是一个纯粹的合成值,而不是由实际的实例变量支持)是一致的。

主要公式为:

frame.origin = center - bounds.size / 2

(这是一样的)

center = frame.origin + bounds.size / 2

(有也)

frame.size = bounds.size

这不是代码,只是方程来表达三个特性之间不变。 这些公式还假设您的视图的变换身份,它是默认。 如果不是,那么边界和中心保持相同的意思,但框可以改变。 除非你在做非直角旋转,该框架将始终处于上海华盈的坐标中的转化视图。

这东西是一个有用的小型图书馆这里有详细的解释:

http://bynomial.com/blog/?p=24



Answer 3:

性能centerboundsframe互锁:改变一个将更新别人,所以使用它们不过你想要的。 例如,而不是修改的X / Y PARAMS frame回到中心的视图,只需更新center属性。



文章来源: UIView's frame, bounds, center, origin, when to use what?