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];

  

  

原文地址:https://www.cnblogs.com/Mr-Lin/p/5098443.html