iOS基础---UIView的frame和bounds属性

一、首先在UIViewController的view上添加一个橙色窗口。如下图所示。

    UIView * view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 200, 200);
    view.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:view];
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 10.34.46.png

打印出frame和bounds的值如下:
po view.frame
(origin = (x = 100, y = 100), size = (width = 200, height = 200))
po view.bounds
(origin = (x = 0, y = 0), size = (width = 200, height = 200))
网上也有个图很好的说明了两者之间的关系


1364058232_8785.jpg

frame: 该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。(参照点是本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)
center:该view的中心点在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

二、修改view的frame

  view.frame = CGRectInset(view.frame, 50, 50);
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 11.16.31.png

po view.frame
(origin = (x = 150, y = 150), size = (width = 100, height = 100))
po view.bounds
(origin = (x = 0, y = 0), size = (width = 100, height = 100))
可以看到CGRectInset使x方向和y方向的2边都减少了50个点。这个结果我们也比较容易理解。

三,修改view的bounds

    view.bounds = CGRectInset(view.bounds, 50, 50);
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 11.16.31.png

po view.frame
(origin = (x = 150, y = 150), size = (width = 100, height = 100))
po view.bounds
(origin = (x = 50, y = 50), size = (width = 100, height = 100))
这样修改后,view的frame跟上面一样。但bound的origin却不再是(0,0)了。这代表什么意思呢?

四,再给view添加一个绿色的子view

    UIView * view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 200, 200);
    view.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:view];

    view.bounds = CGRectInset(view.bounds, 50, 50);

    UIView * subView =  [[UIView alloc] init];
    subView.frame = CGRectMake(0, 0, 30, 30);
    subView.backgroundColor = [UIColor greenColor];
    [view addSubview:subView];
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 11.58.31.png

由此可以看出,如果修改view的bounds,会对添加到其上的子subview的位置产生影响。view的bounds.origin修改了,则其左上角不再是(0,0),这里变成(50,50),如果subview的frame是(0, 0, 30, 30);则其会向左上角偏移50个点。

五、综合几个例子看看

1.给橙色的view添加一个绿色的subView

    UIView * view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 200, 200);
    view.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:view];
    
    UIView * subView =  [[UIView alloc] init];
    subView.frame = CGRectMake(0, 0, 30, 30);
    subView.backgroundColor = [UIColor greenColor];
    [view addSubview:subView];

打印一下可以知道现在的view.center是(200,200)!


Simulator Screen Shot - iPhone 8 - 2021-11-17 at 16.05.17.png

然后改变view的frame大小位置

    view.frame =  CGRectMake(200, 400, 100, 100);
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 16.05.57.png

因为frame是相对于父窗口的,可以看到view的大小和位置都发生了改变。相对父窗口的位置变为(200,400),大小变为(100,100)。
此时的view.center是(250,450)

下面不改变view的frame,改变view的bounds:

    view.bounds = CGRectMake(100, 50, 100, 100);
Simulator Screen Shot - iPhone 8 - 2021-11-17 at 17.30.27.png

这里打印view.center,依然是(200,200).所以改变view.bounds
不会改变view.center。只是改变了view.bounds.origin(现在是(100,50))的和view.bounds.size(现在是(100,100))。如果添加一个subView其frame(0,0,30,30)则其会向上偏移50,向左偏移100。可以看到subView.frame,是基于父窗口的bounds。

你可能感兴趣的:(iOS基础---UIView的frame和bounds属性)