UIView的frame与bounds

一、首先列一下公认的资料:

先看到下面的代码你肯定就明白了一些:
-(CGRect)frame{
return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
很明显,bounds的原点是(0,0)点(就是view本身的坐标系统,默认永远都是0,0点,除非认为setbounds),而frame的原点却是任意的(相对于父视图中的坐标位置)。

frame与bounds

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

二、我的demo


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    //view1
    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 250)];
    //这里的setBounds只是改变‘view1自身’坐标系的起点,并不会影响frame
    [view1 setBounds:CGRectMake(-50, -50, 200, 250)];
    view1.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:view1];//添加到self.view
    NSLog(@"view1 frame:%@====view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));


    //view2
    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 150)];
    view2.backgroundColor = [UIColor yellowColor];
    [view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-50,-50)]
    NSLog(@"view2 frame:%@====view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));
}
/*
结果
2017-11-12 22:34:52.706 frame_bounds demo[849:36333] view1 frame:{{50, 50}, {200, 250}}====view1 bounds:{{-50, -50}, {200, 250}}
2017-11-12 22:34:52.706 frame_bounds demo[849:36333] view2 frame:{{0, 0}, {100, 150}}====view2 bounds:{{0, 0}, {100, 150}}
*/

对应效果如下
这里写图片描述


三、我的理解:

1.frame指父子间相对的orgin和绝对大小size;
2.bounds指自身的基准orgin(默认为0,0)和绝对大小size;如果设置了bounds的起点,受影响的仅仅是自身的“亲儿子视图”的“起点”, 但不会改变自身的frame,如View1;
(bounds注意点:log输出日志表明,每个新的view默认的bounds其实都是(0,0))
3.center,参考的坐标系同frame一个原理。
4. frame 是CGRect frame的origin是相对于父视图的左上角原点(0,0)的位置,改变视图的frame会改变center

center 是CGPoint 指的就是整个视图的中心点,改变视图的center也会改变frame

bounds 是CGRect 是告诉子视图本视图的原点位置, 但是本视图与本视图的‘父亲’的相对位置frame不会改变的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值