@UI视图的层级管理
UI中几乎所有的可视化控件都是UIView的子类,而且当多个控件或UIView的对象出现在同一个窗口上时,实际上这些控件以及对象之间是具有一定的层级关系的,所以下面简单说下UI视图的层级管理
用编译来举例说明一下:
//首先创建3个不同色块的UIView对象
UIView * blueView = [[UIView alloc]initWithFrame:CGRectMake(60, 60, 100, 100)];
blueView.backgroundColor = [UIColor blueColor];
blueView.tag = 100;
[self.window addSubview:blueView];
[blueView release];
UIView * yellowView = [[UIView alloc]initWithFrame:CGRectMake(80, 80, 100, 100)];
yellowView.backgroundColor = [UIColor yellowColor];
[self.window addSubview:yellowView];
[yellowView release];
//红色视图,作为蓝色视图的子视图,位置在蓝色视图和黄色视图的交集位置
UIView * redView = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];
redView.backgroundColor = [UIColor redColor];
[blueView addSubview:redView];
[redView release];
[self.window bringSubviewToFront:blueView];
[self.window sendSubviewToBack:blueView];
[self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
NSLog(@"subviews = %@",self.window.subviews);
//黄色视图从父视图上移除,子视图执行removeFromSuperview方法.
// [yellowView removeFromSuperview];
NSLog(@"subviews = %@",self.window.subviews);
//viewWithTag不是只能搜索子视图
// UIView * blueView = [self.window.subviews objectAtIndex:0];
UIView * findBlueView = [self.window viewWithTag:100];
NSLog(@"%@",findBlueView);
//设置tag值(标签),是为了能够访问到你所设置tag值的那个视图对象.注:tag值最好设置100+,这样是为了避免和系统内的已有控件所占用的标签相重复
接下来,再创建一个UIView的对象,即一个色块,来演示一下额外的层级管理操作
UIView * cyanView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
cyanView.backgroundColor = [UIColor cyanColor];
// [self.window insertSubview:cyanView aboveSubview:yellowView];
[self.window insertSubview:cyanView belowSubview:yellowView];
[self.window insertSubview:cyanView atIndex:0];
[cyanView release];
//隐藏蓝色视图默认是NO
// blueView.hidden = YES;
//修改蓝色视图的透明度默认是1,父视图的alpha会影响子视图
blueView.alpha = 0.2;
//注:透明度的范围:0~1
@用视图来加深UI视图层级管理的理解
@视图层级管理的总结
/*****
1.一个视图作为父视图时,可以添加多个子视图.
2.一个视图作为子视图时,只能有一个父视图.
3.新添加的(后添加的)子视图,永远显示在其他同级的子视图的前面(上面)
4.父视图使用数组管理所有的子视图subViews
5.视图使用树形结构,管理所有子视图
6.父视图可以修改已存在的所有子视图的关系:提前,置后,交换.子视图可以从父视图上移除.以上操作均会影响subViews.
7.父视图可以直接添加子视图.插入子视图:根据索引值,显示在指定子视图上面;显示在指定子视图的下面.
8.viewWithTag:通过tag值搜索本视图及所有子视图.tag值默认为0
*****/
@运行模拟器实现的截图: