什么是UIView
- UIView是iOS中最基础的视图类,管理界面的一定区域的内容展示。
- UIView是各种视图类型的父类,提供最基础的功能。像UILabel、UIImageView都是它子类。
- UIView作为容器,布局和管理子视图。
- UIview响应相应位置的事件。
UIView主要处理的两件事
1.布局
- 设置大小、位置(frame)
- 添加子视图(addSubview)
2.管理子View
- 子视图根据addSubview的顺序确定入栈的顺序,位置重叠的展示最后入栈的
- 可以通过改变frame,来改变view在视图中的位置
- 添加到指定的位置
代码展示
//创建视图1
UIView*view1 = [[UIView alloc]init];
//视图1添加红色背景
view1.backgroundColor = [UIColor redColor];
//确定视图1的位置
view1.frame = CGRectMake(100, 100, 100, 100);
//添加到父视图
[self.view addSubview:view1];
//创建视图2
UIView*view2 = [[UIView alloc]init];
//视图2添加绿色背景
view2.backgroundColor = [UIColor greenColor];
//确定视图2的位置
view2.frame = CGRectMake(150, 150, 100, 100);
//添加到父视图
[self.view addSubview:view2];
显示效果.png
从图片可以看出先添加view1再添加view2,view1先入栈,view2再入栈,view和view2重叠的位置,显示view2的。位置重叠的展示最后入栈的
UIView生命周期
1.UIView类方法
iOS UIView类扩展方法.png上图所示iOS中UIView的类方法。其中包括之前说的添加子视图(addSubview)等。对于UIView生命周期我们只需关注以下四个方法
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(nullable UIWindow *)newWindow;
- (void)didMoveToWindow;
为了更好的展示UIView从创建到被展示的内部流程。用TestView继承UIView
@interface TestView : UIView
@end
@implementation TestView
@end
重载一下UIView 生命周期的方法,为了更好的观察执行顺序,将方法名称在控制台打印出来。(最好使用断点来观察方法执行顺序)
@interface TestView : UIView
@end
@implementation TestView
- (instancetype)init
{
self = [super init];
if (self) {
}
NSLog(@"init");
return self;
}
- (void)willMoveToSuperview:(nullable UIView *)newSuperview{
[super willMoveToSuperview:newSuperview];
NSLog(@"willMoveToSuperview");
}
- (void)didMoveToSuperview{
[super didMoveToSuperview];
NSLog(@"didMoveToSuperview");
}
- (void)willMoveToWindow:(nullable UIWindow *)newWindow{
[super willMoveToSuperview:newWindow];
NSLog(@"willMoveToWindow");
}
- (void)didMoveToWindow{
[super didMoveToWindow];
NSLog(@"didMoveToWindow");
}
@end
初始化一个TestView
//创建视图1
TestView*view1 = [[TestView alloc]init];
//视图1添加红色背景
view1.backgroundColor = [UIColor redColor];
//确定视图1的位置
view1.frame = CGRectMake(100, 100, 100, 100);
//添加到父视图
[self.view addSubview:view1];
运行程序观察控制台打印结果
观察控制台可知UIView的生命周期:
init
willMoveToSuperview
didMoveToSuperview
willMoveToWindow
didMoveToWindow
UIView的生命周期按照上面顺序执行,并且willMoveToSuperview和didMoveToSuperview、willMoveToWindow和didMoveToWindow成对出现。
网友评论