欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-06 17:45:09
...

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以及它的继承,层级关系
这样,我们就将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以及它的继承,层级关系

UIView的父子关系

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

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

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

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

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

只有将头像的图片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以及它的继承,层级关系

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

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

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

相关标签: iOS