为什么UIView中有框架矩形和边界矩形?

时间:2009-04-14 22:11:01

标签: iphone

虽然在漆黑的夜晚很晚,但我不明白为什么有两个不同的矩形:框架和边界。

就像我理解的那样,只需要一个矩形来完成所有事情。将View本身相对于另一个坐标系定位,然后将其内容剪切为指定的大小。你还会用两个矩形做什么?他们如何互相互动?

有没有人有一个很好的解释?来自苹果医生的那个人拿着水果的孩子并不是很好理解。

4 个答案:

答案 0 :(得分:82)

这是备忘单:

  • frame是视图 的位置(相对于超级视图)
  • bounds是允许查看的视图(相对于自身)

更多澄清:

如果要在超视图中定位视图,则几乎总是更改帧原点。

如果你正在绘制UIView绘制的地方,你几乎总是修改它的边界。

请注意,您可以拥有大于帧的边界。也就是说,你可以画出你所在位置的“线外”。

答案 1 :(得分:5)

框架位于superview的坐标系中,边界位于视图的坐标系中。从我的角度来看,两者都很方便。帧似乎是两者中更有用的,除非在某些情况下我不知道子视图在哪里可以有一个完全不同的坐标系(例如,像素缩放不同)比superview。

答案 2 :(得分:2)

我最近遇到了麻烦,并做了一些实验。 bounds属性确实限制了UIView可以绘制的位置,但不会限制其子视图。另一个界限控制是触摸事件调度。据我所知,视图不会接收超出其范围的触摸事件。此外,父视图边界之外的任何子视图也不会接收触摸事件。在这些情况下,当子视图的大小和位置发生变化时,您必须非常仔细地更新容器视图的边界。一切都将永久绘制(因为子视图不会被其父级的边界剪切),但不会接收到触摸。

(这真的应该是对之前帖子的回复,但由于我还不能回复,所以它被困在这里......)

答案 3 :(得分:0)

  

框架(CGRect)是其矩形边框相对于其父视图的坐标和尺寸。

     

边界(CGRect)是其矩形边界相对于其自身视图的坐标和尺寸。

enter image description here

在此处了解更多-https://medium.com/@GanChau/uiview-frame-vs-bounds-195b9688bde3