iOS学习之UIView以及它的继承,层级关系

UIVIew是iOS中的视图对象,显示在屏幕上的所有对象的基础类,所有显示在屏幕上的对象都是一定都继承于UIView。


屏幕上能看到的对象都是UIView的子类,UIView是一个矩形对象,有背景颜色, 可以显示, 有层级关系


先上代码

//
//  ViewController.m
//  UIView
//
//  Created by 开朗的男子 on 2018/7/20.
//  Copyright © 2018年 开朗的男子. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //创建一个UIView对象
    //UIView 是iOS中的视图对象
    //显示在屏幕上的所有对象的基础类
    //所有显示在屏幕上的对象都是一定都继承于UIView
    //屏幕上能看到的对象都是UIView的子类
    //UIView是一个矩形对象,有背景颜色, 可以显示, 有层级关系
    UIView * view = [[UIView alloc] init];

    //设置UIView的位置,以及大小
    view.frame = CGRectMake(130, 150, 150, 150);

    //设置view实例的背景颜色
    view.backgroundColor = [UIColor orangeColor];

    //将新建的视图添加到父视图上
    //1:将新建的视图显示到屏幕上
    //2:将视图作为父视图的子视图管理起来
    [self.view addSubview: view];

    //是否隐藏视图对象
    //YES:不显示
    //NO: 显示,默认值为显示
    view.hidden = NO;

    //设置视图的透明度
    //alpha = 1, 0, 0.5
    view.alpha = 0.5;

    //设置视图的背景颜色
    self.view.backgroundColor = [UIColor yellowColor];

    //将自己从父视图删除掉
    //1:从父视图管理中删除
    //2:不会显示在屏幕上
    //[view removeFromSuperview];

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

运行程序,将会看到如下效果
iOS学习之UIView以及它的继承,层级关系_第1张图片
这样,我们就将view添加到了父视图上了。

视图的层级关系

还有一个就是视图的层级关系,当视图出现需要覆盖情况时候,就要考虑到这个。

它的规则为,先添加谁,谁就在最下面,意思就是,它是按照代码的顺序来添加的,你先加哪个,它就会先显示哪个,从而使后添加的覆盖开始添加的

下面我上一个demo

//
//  ViewController.m
//  UIView层级关系
//
//  Created by 开朗的男子 on 2018/7/20.
//  Copyright © 2018年 开朗的男子. All rights reserved.
//

//---------------------------------------------------
/*
 学习内容

 1. UIView的subviews
 2.UIView的superview
 3.UIView的视图管理函数


 */
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //创建三个视图对象
    UIView* view01 = [[UIView alloc] init];
    view01.frame = CGRectMake(100, 100, 150, 150);
    view01.backgroundColor = [UIColor yellowColor];

    UIView* view02 = [[UIView alloc] init];
    view02.frame = CGRectMake(125, 125, 150, 150);
    view02.backgroundColor = [UIColor orangeColor];

    UIView* view03 = [[UIView alloc] init];
    view03.frame = CGRectMake(150, 150, 150, 150);
    view03.backgroundColor = [UIColor greenColor];

    //将三个视图对象显示到屏幕上
    //并且添加到父亲视图上
    //哪一个视图被先添加到父亲视图中,就先绘制哪一个视图
    //根据先后关系来添加
    [self.view addSubview: view01];
    [self.view addSubview:view02];
    [self.view addSubview:view03];

    //将某一个视图调整到最前面显示
    //参数: UIView对象,调整哪一个视图到最前方
    //[self.view bringSubviewToFront: view02];

    //将某一个视图调整到最后面显示
    //参数: UIView对象,调整哪一个视图到后前方
    //这里写图片描述[self.view sendSubviewToBack: view01];

    //subviews管理所有self.view的子视图的数组
    UIView * viewFront = self.view.subviews[2];

    //将view01从父视图上移除
    //[view01 removeFromSuperview];

    //新建一个视图,让它等于subviews数组中的第一个视图
    UIView * viewBack = self.view.subviews[0];

    //我们将会看到屏幕下方打印这句话
    if(viewBack == view01){
        puts("Equal!");
    }


}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

注释已经写的很清楚了,就不再赘述了。运行程序,得如下效果

iOS学习之UIView以及它的继承,层级关系_第2张图片

UIView的父子关系

下面再总结一个比较重要的知识点,UIView的父子关系,我们先上一张图片。这是我模仿的微信朋友圈的一个界面

iOS学习之UIView以及它的继承,层级关系_第3张图片

微信相信我们每个人都会玩,所以我们先思考一个问题。

那么我们想一下,如果只单纯的将头像视图添加到屏幕上,当背景滑动的时候,头像是不是也会跟着动呢?

当然不会,头像还是会在那里不动

只有将头像的图片view添加在背景图片的view上面,当我们滑动的时候,头像和背景图片才会一起滑动的

那么,再上一个demo

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //创建一个视图对象
    UIView *view01 = [[UIView alloc] init];
    view01.frame = CGRectMake(100, 100, 150, 150);
    view01.backgroundColor = [UIColor yellowColor];

    //创建一个该视图的子视图
    UIView *childView = [[UIView alloc] init];
    childView.frame = CGRectMake(0, 0, 30, 30);
    childView.backgroundColor = [UIColor redColor];

    //将view01添加到视图上
    [self.view addSubview:view01];

    //注意!!!这里是将childView添加到view01上
    [view01 addSubview:childView];

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

效果如下

iOS学习之UIView以及它的继承,层级关系_第4张图片

我们看一下代码会发现,我们将子视图的初始位置设为了(0,0),但它没有在左上角出现,而是在它的父视图的左上角(0,0)点出现

这就说明,子视图的位置会跟着父视图移动,当我们修改父视图的位置时,子视图也会跟着移动。

这就有了微信朋友圈的那种头像跟着背景一起动的效果。

你可能感兴趣的:(iOS学习)