【iOS_Development】frame VS bounds

1. frame

frame表示的是该view在父坐标系统中的位置和大小(参照父坐标系统),frame的(frame.origin.x, frame.origin.y)是相对于父坐标系的偏移量

- (CGRect)frame {
    return CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
}

2. bounds

bounds表示的是该view在本地坐标系统中的位置和大小(参照本地坐标系统,就相当于View自己的坐标系统,以(0, 0)点为起点)

- (CGRect)bounds {
    return CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
  • bounds特点:可以通过修改自己坐标系的原点位置,进而影响到“子view”的显示位置;可以改变的frame,如果bounds>frame,那么frame也会跟着变大
注意

在实际使用中可以通过.bounds或者setBounds可以自定义视图的bounds,当然在自定义之后,其内部的子控件位置也会发生相关变化,具体变化的规律我做了一下简单的总结,下面就通过一个伪代码的式子来描述一下(获取子控件位置的y同理)

/** 获取子控件最终frame.origin.x(相对于根视图)
 *  superView.bounds.origin.x:父view自定义bounds的x
 *  superView.frame.size.width:父view原本的width
 *  superView.bounds.size.width:父view自定义bounds的width
 *  superView.frame.origin.x:父view原本的x
 ***********************  华丽的分割线  ***********************
 *  subView.bounds.origin.x:子view自定义bounds的x
 *  subView.frame.size.width:子view原本的width
 *  subView.bounds.size.width:子view自定义bounds的width
 *  subView.frame.origin.x:子view原本的x
 */
lastX = (-(superView.bounds.origin.x) + (superView.frame.size.width - superView.bounds.size.width) / 2.0 + superView.frame.origin.x) + (- subView.bounds.origin.x + (subView.frame.size.width - subView.bounds.size.width) / 2.0 + subView.frame.origin.x))

3. Demo

有兴趣的话大家可以亲测一下

UIView *v1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 350, 350)];
v1.backgroundColor = [UIColor redColor];
v1.bounds = CGRectMake(20, 20, 250, 250);
[self.view addSubview:v1];
NSLog(@"%lf~~~~%lf~~~~%lf~~~~%lf", v1.frame.origin.x, v1.frame.origin.y, v1.frame.size.width, v1.frame.size.height);

UIView *v2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
v2.backgroundColor = [UIColor orangeColor];
[v1 addSubview:v2];
NSLog(@"%lf~~~~%lf", v2.frame.origin.x, v2.frame.origin.y);



GitHub地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值