iOS bounds和frame的区别

@interface ViewController (){
    UIView *_viewA;
    UIView *_viewB;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _viewA = [[UIView alloc] initWithFrame:CGRectMake(50, 200, 200, 200)];
    _viewA.backgroundColor = [UIColor redColor];
    [self.view addSubview:_viewA];
    
    _viewB = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
    _viewB.backgroundColor = [UIColor yellowColor];
    [_viewA addSubview:_viewB];

}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    _viewA.bounds = CGRectMake(-100, 0, 200, 200);
}

上面这段简单的代码运行效果是:

点击前效果                      点击后的效果

由此我们可以得出,修改viewA的bounds的x时,改变的子视图viewB的x,x为正,则向左移动;x为负,则向右移动。

同理我们也可以得出,修改viewA的bounds的y时,改变的是子视图viewB的y,y为正,则向上移动;y为负,则向下移动。

如果我们改变bounds的大小时;

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    _viewA.bounds = CGRectMake(0, 0, 100, 100);
}

得出的效果是:

他改变的是viewA的大小,而且viewA的中心点并没有发生编发,看起来就像是viewA放大或者缩小

 

总结:

  修改bounds的x, y,只会更改它的子视图的位置,x为正,则左移动, x为负,则右移动;y为正,则向上移动,y为负,则向下移动。

    修改bounds大小改变时,当前视图的中心点不会改变,当前视图的大小发生改变,看起来效果就像缩放和放大一样。

    frame不管对于位置还是大小,改变的都是自己本身,

    frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置。

    frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生了改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值