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
运行程序,将会看到如下效果
这样,我们就将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
注释已经写的很清楚了,就不再赘述了。运行程序,得如下效果
UIView的父子关系
下面再总结一个比较重要的知识点,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
效果如下
我们看一下代码会发现,我们将子视图的初始位置设为了(0,0),但它没有在左上角出现,而是在它的父视图的左上角(0,0)点出现
这就说明,子视图的位置会跟着父视图移动,当我们修改父视图的位置时,子视图也会跟着移动。
这就有了微信朋友圈的那种头像跟着背景一起动的效果。
上一篇: 好几个象你这样的大学生
下一篇: swift--广东麻将简化版