UIView
/*
图层关系
子视图 - 嵌套在父视图之上的视图
父视图 - 被嵌套的视图
视图和视图之间可以层层嵌套
*/
UIView *red = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)];
red.backgroundColor = [UIColor redColor];
//1.在父视图上嵌套一个子视图
[self.window addSubview:red];
//2.如何获取父视图(仅有一个)
UIView *window = [red superview];
//通过地址相同可知道,这是同一个window
NSLog(@"%p",self.window);
NSLog(@"%p",window);
// 3.获取子视图(可以有多个)[注意]返回值是一个数组
NSArray *subViews = [self.window subviews];
NSLog(@"%lu",[subViews count]);
//4.删除一个视图
//[red removeFromSuperview];
UIView *blue = [[UIView alloc]initWithFrame:CGRectMake(60, 110, 100, 100)];
blue.backgroundColor = [UIColor blueColor];
[self.window addSubview:blue];
//5.将一个视图放在父视图前面
//[self.window bringSubviewToFront:red];
//6.将一个视图放在父视图后面
//[self.window sendSubviewToBack:blue];
UIView *yellow = [[UIView alloc]initWithFrame:CGRectMake(70, 120, 100, 100)];
yellow.backgroundColor = [UIColor yellowColor];
//可以用以下4种方法将yellow视图添加到window中
//[self.window addSubview:yellow];
//7.在某个视图的后面插入一个视图
//[self.window insertSubview:yellow belowSubview:red];
//8.在某个视图的前面插入一个视图
//[self.window insertSubview:yellow aboveSubview:red];
//9.利用下标在指定位置插入
//坐标index是从内部算起
[self.window insertSubview:yellow atIndex:2];
//***************分割线*******************
//10.交换两个视图
//[self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:2];
//检查某个视图是否为子孙视图或本身
BOOL is = [red isDescendantOfView:self.window];
NSLog(@"%d",is);
//黄色视图的左上角为原点
UIView *green = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];
green.backgroundColor = [UIColor greenColor];
[yellow addSubview:green];
//将黑色视图作为子视图放在黄色父视图中
UIView *black = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)];
black.backgroundColor = [UIColor blackColor];
[yellow addSubview:black];
//11.裁剪超出父视图之外的部分
yellow.clipsToBounds = YES;
NSLog(@"%ld",[self.window subviews].count);
//12.隐藏一个视图
//black.hidden = YES;
//倘若父视图被隐藏了,那么它的子视图也将要被隐藏
//yellow.hidden = YES;
//13.透明度:如果父视图被设置透明度,父视图上的所有子视图也会被一起设置透明度
//yellow.alpha = 0.6;
//以下方式可以设置父视图的透明度,子视图不受影响
yellow.backgroundColor = [[UIColor yellowColor] colorWithAlphaComponent:0.5];
//14.用户交互的设置
//YES 用户交互打开 (用户可以操作这个UI控件)
//NO 用户交互关闭 (用户不可以操作这个UI控件)
/*
UIView 默认情况交互打开
UIButton 默认用户交互打开
UIImageView 默认用户交互关闭
UILabel 默认用户交互关闭
*/
//先访问 window屏幕
//再访问 self.view (根控制器) -- 实际上也是UIView
//之后访问 self.view 中的子视图 myImageView
//最后访问 子视图myImageView中嵌套的子视图 myUIView
//如果其中一个环节关闭了用户交互 那么下面的子视图都不能访问到
window.userInteractionEnabled = YES;
/*
【注】
1⃣️用户交互层层传递,其中有一个视图的用户交互关闭,则不会继续往下传递
2⃣️子视图不要超过父视图的边界 否则也会改层终止传递 用户交互也是无效的(即使你已经在父视图打开用户交互)
*/
//15.销毁一个视图(removeFromSuperview)
//将一个控件从其父视图中移除
//[注意] 移除是有跟随性的 子视图也会全部移除
[yellow removeFromSuperview];