美文网首页
UIView坐标&UIView父子视图关系

UIView坐标&UIView父子视图关系

作者: Barry_小闪 | 来源:发表于2016-05-21 22:24 被阅读266次

目录

  • 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];

相关文章

网友评论

      本文标题:UIView坐标&UIView父子视图关系

      本文链接:https://www.haomeiwen.com/subject/hzdorttx.html