目录
- UIView坐标(frame,center,bounds)
- UIView父子视图关系
创建视图对象
UIView * view1 = [[UIView alloc] init];
显示在界面上
[self.window addSubview:view1];
设置背景颜色
view1.backgroundColor = [UIColor redColor];
1.frame
- 每个想要显示在界面上需要通过frame属性来确定坐标和大小 (默认:(0,0;0,0))
view1.frame = CGRectMake(50, 50, 50, 50);
2.center
- 当前这个视图的中心点的坐标
- 确定了视图的frame,那么视图的center就确定
CGPoint center = view1.center;
NSLog(@"center:%@", NSStringFromCGPoint(center));
//设置中心点 , 会改变frame的坐标
view1.center = CGPointMake(200, 200);
3.bounds
- 1.视图一旦确定了frame,就确定了bounds的值;bounds坐标是(0,0),大小是frame的size
CGRect bounds = view1.bounds;
NSLog(@"bounds:%@", NSStringFromCGRect(bounds));
- 2.改变bounds的坐标,不会影响视图的frame的坐标;但是会影响当前这个视图的子视图坐标原点(一般不会去设置bounds的值,只是通过bounds快速获取坐标是(0,0)大小是当前视图大小的frame值)
view1.bounds = CGRectMake(0, 0, 100, 100);
- 3.改变bounds的size会影响frame的size,也会影响frame的坐标,但是视图的中心点不会变
view1.bounds = CGRectMake(-10, -10, 200, 200);
NSLog(@"%@", NSStringFromCGPoint(view1.center));
UIView父子视图关系
1.一个视图只能有一个父视图;一个视图可以有多个子视图
创建一个视图对象
UIView * redView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
redView.backgroundColor = [UIColor redColor];
将红色视图添加到window上
[self.window addSubview:redView];
创建一个绿色视图对象
UIView * greenView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 50, 50)];
greenView.backgroundColor = [UIColor greenColor];
将绿色视图添加到window上
[self.window addSubview:greenView];
```
一个视图被多次添加到其他视图上,最后一次添加有效
```objc
[redView addSubview:greenView];
2.获取一个视图的父视图,保存在数组
@property(nonatomic,readonly) UIView *superview;
UIView * greenSuper = [greenView superview];
greenSuper.backgroundColor = [UIColor yellowColor];
3.获取视图上所有的子视图
注意:有的时候可能会获取到一些我们意料以外的视图,
@property(nonatomic,readonly,copy) NSArray *subviews;
NSArray * array = [self.window subviews];
NSLog(@"%@", array);
4.获取window(应用程序中,程序启动后界面上所有的视图都是直接或者间接的添加到window,所以可以通过界面上所有的视图拿到当前应用的window)
前提:获取window的时候,已经显示出来
@property(nonatomic,readonly) UIWindow *window;
通过greenView视图获取window
UIWindow * twindow = [greenView window];
5.将视图从父视图上移除
移除(将视图从父视图上移除)
一旦视图从父视图上移除,那么父视图就不能再通过viewWithTag:和subViews来获取到当前视图
[greenView removeFromSuperview];
已经从父视图上移除的视图,在内存中还是存在的;
移除只是不让这个视图显示在父视图上而已,还可以重写添加
[redView addSubview:greenView];