NSView的边界与帧

时间:2011-12-13 21:57:27

标签: objective-c cocoa nsview

边界和边框之间有什么区别?事实上,为什么“界限”甚至存在? 'bounds'的大小等于帧的大小,而bound的起源应始终为0,0。

4 个答案:

答案 0 :(得分:91)

来自View and Window Architecture iOS编程指南:

  

视图对象使用其框架,边界跟踪其大小和位置,   和中心属性:

     

frame 属性包含框架矩形,用于指定   超视图坐标系中视图的大小和位置。

     

bounds 属性包含bounds矩形,用于指定   视图的大小(及其内容来源)在视图本身的本地   坐标系。

     

中心属性包含已知视图的中心点   superview的坐标系。

这是对该解释的良好可视化:

enter image description here

答案 1 :(得分:8)

第一个答案中的苹果文档没有涵盖旋转到横向方向后框架和边界发生的情况。所以为了更完整,你应该知道窗口的框架和根视图在旋转后不会改变,但边界确实如此。 See this article了解更多细节,并谨慎使用框架作为纵向方向以外的任何参考。

来自文章:

  

如果您的视图控制器具有顶级非窗口视图(即,它是   最底层的视图控制器),然后

self.frame
     

始终处于纵向方向。世界卫生大会?是的,总是在肖像 -   你的观点转变了什么变化。所以你的

self.bounds
     

总是准确的(记住最后一点),但

self.frame
     

可能会或可能不会给出用户真正看到的宽高比,   因为每个视图的帧都是根据superview的报告   坐标,并考虑应用于的任何变换   图。

答案 2 :(得分:1)

视图框是它可以完全适合的矩形的大小。似乎边界和框架似乎相同,但情况并非如此。 考虑一个旋转大约45度的正方形!

这里旋转的方块的框架将是完全填充它的矩形,因此它将与此对象的边界不同。

P.S主要是在旋转的对象框架和边界往往不同。

答案 3 :(得分:0)

frame是超视图坐标系中的坐标值

绘图系统使用

边界绘制视图的内容,绘图完成后,系统将使用变换操作将内容分配给视图的框架