虽然现在是深夜,但我不明白为什么会有两个不同的矩形:frame和bounds中的至少一个。就像我理解的那样,一个矩形就足够做所有的事情了。相对于另一个坐标系定位视图本身,然后将其内容裁剪为指定的大小。你还能用两个长方形做什么?他们是如何互相交流的呢?有人有好的解释吗?来自苹果的那个,孩子拿着水果,不是很好的理解。
frame
bounds
pbpqsu0x1#
下面是备忘录:
更多澄清:如果在其超级视图中定位视图,则几乎总是要更改框架原点。如果在UIView正在绘制的位置进行剪裁,则几乎总是要修改其边界。请注意,允许您的边界大于框架。也就是说,你可以画出你所在的“线外”。
50pmv0ei2#
框架在超级视图的坐标系中,边界在视图的坐标系中。从我的Angular 来看,两者都有是一种方便。Frame似乎是两者中更有用的一个,除非有一些我不知道的情况,子视图可以有一个完全不同的坐标系(例如:不同地缩放的像素)。
a0zr77ik3#
我最近在边界上遇到了麻烦,做了一些实验。bounds属性确实限制了UIView可以绘制的位置,但 * 并不 * 限制其子视图。边界控制的另一件事是触摸事件调度。据我所知,视图不会接收超出其边界的触摸事件。此外,父视图边界之外的任何子视图也不会接收触摸事件。在这些情况下,您必须非常仔细地更新容器视图的边界,因为其子视图的大小和位置发生了变化。所有的东西都会画得很好(因为子视图不会被其父视图的边界所裁剪),但是触摸不会被接收。(This真的应该是对之前帖子的回复,但因为我还不能回复,所以它被卡在这里了...)
3条答案
按热度按时间pbpqsu0x1#
下面是备忘录:
frame
是视图所在的位置(相对于超级视图)bounds
是视图允许绘制的位置(相对于其自身)更多澄清:
如果在其超级视图中定位视图,则几乎总是要更改框架原点。
如果在UIView正在绘制的位置进行剪裁,则几乎总是要修改其边界。
请注意,允许您的边界大于框架。也就是说,你可以画出你所在的“线外”。
50pmv0ei2#
框架在超级视图的坐标系中,边界在视图的坐标系中。从我的Angular 来看,两者都有是一种方便。Frame似乎是两者中更有用的一个,除非有一些我不知道的情况,子视图可以有一个完全不同的坐标系(例如:不同地缩放的像素)。
a0zr77ik3#
我最近在边界上遇到了麻烦,做了一些实验。bounds属性确实限制了UIView可以绘制的位置,但 * 并不 * 限制其子视图。边界控制的另一件事是触摸事件调度。据我所知,视图不会接收超出其边界的触摸事件。此外,父视图边界之外的任何子视图也不会接收触摸事件。在这些情况下,您必须非常仔细地更新容器视图的边界,因为其子视图的大小和位置发生了变化。所有的东西都会画得很好(因为子视图不会被其父视图的边界所裁剪),但是触摸不会被接收。
(This真的应该是对之前帖子的回复,但因为我还不能回复,所以它被卡在这里了...)