@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的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生了改变。