iOS关于UIView的一些知识点

nd | | 访问(121)

  /*

  图层关系

  子视图 - 嵌套在父视图之上的视图

  父视图 - 被嵌套的视图

  视图和视图之间可以层层嵌套

  */

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