/* 圖層關係 子視圖 - 嵌套在父視圖之上的視圖 父視圖 - 被嵌套的視圖 視圖和視圖之間可以層層嵌套 */ UIView *red = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)]; red.backgr...
/*
圖層關係
子視圖 - 嵌套在父視圖之上的視圖
父視圖 - 被嵌套的視圖
視圖和視圖之間可以層層嵌套
*/
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];