美文网首页
frame与bounds的关系

frame与bounds的关系

作者: oneday527 | 来源:发表于2018-03-19 20:20 被阅读0次

frame与bounds是我们UI开发中最常用到的,只知道frame使用父类坐标系bounds使用本身坐标系,理解的并不够深入,本文通过几个小栗子来总结一下frame与bounds的关系,以及修改之后有哪些变化。

- (void)viewDidLoad {
       [super viewDidLoad];
    UIView * superView = [[UIView alloc] initWithFrame:CGRectMake(30, 70, 350, 350)];
    superView.backgroundColor = [UIColor lightGrayColor];
//    superView.bounds = CGRectMake(0, 0, 350, 350);
    NSLog(@"center:%@",NSStringFromCGPoint(superView.center));
    [self.view addSubview:[self showLableForView:superView]];
    [self.view addSubview:superView];
    
    UIView * view1 = [[UIView alloc] initWithFrame:CGRectMake(10, 70, 100, 100)];
    view1.backgroundColor = [UIColor redColor];
    [superView addSubview:[self showLableForView:view1]];
    [superView addSubview:view1];
    
    UIView * view2 = [[UIView alloc] initWithFrame:CGRectMake(50, 230, 100, 100)];
    view2.backgroundColor = [UIColor yellowColor];
    [superView addSubview:[self showLableForView:view2]];
    [superView addSubview:view2];
    
}
2018-03-19 00:09:39.813150+0800 Frame&Bounds[20817:2256742] center:{205, 245}
创建三个view
1、修改superView的bounds,只改origin不改size
    superView.bounds = CGRectMake(35, 10, 350, 350);
2018-03-19 18:18:28.535299+0800 Frame&Bounds[78184:2186954] center:{205, 245}
修改superView的bounds,只改origin不改size

结果:superView的bounds变化,子类frame与bounds无变化。
结论:bounds的origin标注本地坐标系统的原点。
superview的center无变化

2、修改superView的bounds,只改size不改origin
    superView.bounds = CGRectMake(0, 0, 200, 200);
2018-03-19 18:18:56.586907+0800 Frame&Bounds[78220:2188217] center:{205, 245}
修改superView的bounds,只改size不改origin

结果:superView的frame与bounds变化,其center不变superView以center为中心缩放,子类frame与bounds无变化。
结论:修改bounds的size影响frame的size。superview的center未变。

3、修改superView的frame
    superView.frame = CGRectMake(0, 100, 200, 350);
2018-03-19 00:12:44.073041+0800 Frame&Bounds[21206:2268036] center:{100, 275}
修改superView的frame
结果:superView的frame与bounds变化,子类frame与bounds无变化。
结论:修改frame会影响bounds的size但是不会影响origin。
superview的center改变!
4、旋转superView
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    view.center = self.view.center;
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];
    
    NSLog(@"view.frame = %@",NSStringFromCGRect(view.frame));
    NSLog(@"view.bounds = %@\n",NSStringFromCGRect(view.bounds));
    view.transform = CGAffineTransformMakeRotation(M_PI_4);
    NSLog(@"view.frame = %@",NSStringFromCGRect(view.frame));
    NSLog(@"view.bounds = %@\n",NSStringFromCGRect(view.bounds));
}
2018-03-19 17:39:14.114521+0800 Frame&Bounds[76157:2132120] 旋转前view.frame = {{137.5, 283.5}, {100, 100}}
2018-03-19 17:39:14.114631+0800 Frame&Bounds[76157:2132120] 旋转前view.bounds = {{0, 0}, {100, 100}}

2018-03-19 17:39:14.114724+0800 Frame&Bounds[76157:2132120] 旋转后view.frame = {{116.78932188134526, 262.78932188134524}, {141.42135623730951, 141.42135623730951}}
2018-03-19 17:39:14.114817+0800 Frame&Bounds[76157:2132120] 旋转后view.bounds = {{0, 0}, {100, 100}}
旋转superView

view的frame变化,bounds无变化。仔细观察旋转后的frame ,origin的位置如图所示。并且frame的size不等于bounds的size。
结论:frame是view所占的位置的边框(外切红色矩形的矩形),bounds是view的边界。

总结如下:
1、frame采用父类的坐标系统。
2、bounds使用本身坐标系统,默认以原点为起点坐标。
3、修改frame的origin不会影响bounds,只表示改变本身位于父类坐标系统的位置。
4、修改bounds的origin,即修改本地坐标系统的原点,会影响子view的显示位置。
5、frame与bounds的size不一定相等(旋转情况)。
6、修改bounds的size,是以center为中心缩放。
7、修改frame的size,是以原点为中心缩放。

相关文章

  • frame与bounds的关系

    frame与bounds是我们UI开发中最常用到的,只知道frame使用父类坐标系bounds使用本身坐标系,理解...

  • iOS中bounds和frame的理解

    frame,bounds,center之间的关系 Frame A (CGRect)表示其在superview的坐标...

  • iOS纪录

    (1)View的Frame与Bounds区别 摘自 ios view的frame和bounds之区别(位置和大小)...

  • UI总结

    一.控件 1.属性 1> frame和bounds的区别 frame:可表示尺寸和位置,与父视图坐标系的关系,位置...

  • UI

    一.控件 1.属性 1> frame和bounds的区别 frame:可表示尺寸和位置,与父视图坐标系的关系,位置...

  • bounds、scrollView滚动原理

    bounds本质:修改内容原点位置。frame和bounds都是描述的一个矩形。frame:可视范围bounds:...

  • iOS中View的位置和大小

    frame bounds center frame bounds center是View的属性,定义了View的位...

  • 考试题

    一、 1.frame与bounds的区别: (1) Frame: frame的view是在父视图的view坐标...

  • frame bounds center的区别

    来源:UIView frame, bounds and center 首先明确一个问题:frame, bounds...

  • bounds frame center

    frame bounds center 之间有着微妙的联系 他们的关系详细见表格

网友评论

      本文标题:frame与bounds的关系

      本文链接:https://www.haomeiwen.com/subject/cferqftx.html