【发布时间】:2010-10-19 11:19:14
【问题描述】:
好吧,虽然是在漆黑的夜晚,但我不明白为什么会有两个不同的矩形:框架和边界。
据我了解,一个矩形就足以完成所有工作。相对于另一个坐标系定位视图本身,然后将其内容裁剪为指定大小。你还会用两个矩形做什么?它们之间又是如何互动的?
谁有好的解释? Apple 文档中拿着水果的孩子的那句话不太好理解。
【问题讨论】:
好吧,虽然是在漆黑的夜晚,但我不明白为什么会有两个不同的矩形:框架和边界。
据我了解,一个矩形就足以完成所有工作。相对于另一个坐标系定位视图本身,然后将其内容裁剪为指定大小。你还会用两个矩形做什么?它们之间又是如何互动的?
谁有好的解释? Apple 文档中拿着水果的孩子的那句话不太好理解。
【问题讨论】:
这是备忘单:
frame 是视图所在的位置(相对于父视图)bounds 是视图允许绘制(相对于自身)的位置更多说明:
如果您将视图定位在其父视图中,您几乎总是会更改框架原点。
如果你在 UIView 绘制的地方进行剪辑,你几乎总是会修改它的边界。
请注意,您可以使用大于框架的边界。也就是说,你可以画出你所在位置的“界限之外”。
【讨论】:
The size of the bounds rectangle is coupled to the size of the frame rectangle, so that changes to one affect the other.developer.apple.com/library/ios/documentation/uikit/reference/…
Frame在superview的坐标系中,bounds在view的坐标系中。从我的角度来看,两者兼而有之很方便。框架似乎是两者中更有用的,除非在某些情况下我不知道子视图在哪里可以具有与父视图完全不同的坐标系(例如像素缩放不同)。
【讨论】:
我最近遇到了边界问题,并做了一些实验。 bounds 属性确实限制了 UIView 可以绘制的位置,但 不 限制其子视图。限制控件的另一件事是触摸事件分派。据我所知,视图不会接收超出其范围的触摸事件。此外,任何超出父视图边界的子视图也不会接收到触摸事件。在这些情况下,您必须非常小心地更新容器视图的边界,因为它的子视图的大小和位置发生了变化。一切都会正常绘制(因为子视图不会被其父视图的边界剪裁)但不会收到触摸。
(这确实应该是对之前帖子的回复,但是由于我还不能回复,所以卡在这里......)
【讨论】:
clipsToBounds 属性,可以防止其子视图在线条之外着色。