首页 > 代码库 > UIView

UIView

   一个UIView的实例就是一个视图,表示屏幕上的一块矩形区域。

    作用 : 负责这块矩形区域的描绘以及和用户的交互。

    第一、UIView的可视化属性

          1. backgroundColor  背景属性

      例如:

        //创建UIView对象                bounds编辑

         UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 220, self.view.bounds.size.height-100)];

         //设置view1的背景颜色

         view1.backgroundColor = [UIColorpurpleColor];

          2. hidden  表示该view是否隐藏,

          hidden属性为YES时视图隐藏,否则不隐藏。

          3. alpha  为0时完全透明,为1时完全不透明
          

         注意事项:        

                当视图完全透明或者隐藏时,不能响应触摸消息。   

               也就是alpha等于0.0或者hidden为YES的时候,但是当alpha<0.01的时候,视图就已经接收不到消息了。

               视图的alpha值会影响子视图的绘制,但是子视图的alpha值不变。

           4.User Interaction Enable: 指定用户能否对此对象操作

           5.Multiple Touch:指定此控件是否接收多点触控

   第二,管理视图的层次

          一个UIView只有一个superview,我们可以通过-(UIView*)superview来得到视图的父视图;

          一个UIView有零或者多个superview,我们通过方法-(NSArray*)subviews来得到当前视图的所有子视图,这些子视图

          都放在了一个数组中,然后把数组返回出来。

          NSArray *arr = self.view.subviews;//得到所有的视图

         1. insertSubview:atIndex:插入视图

         2.insertSubview:aboveSubview:插入视图在某个子视图的上面

         3.insertSubview:belowSubview:插入视图在某个子视图的下面

         4.bringSubviewToFront:把子视图放到最前面

         5.sendSubviewToBack:把子视图放到最后

         6.exchangeSubviewAtIndex:withSubviewAtIndex:变换两个视图的前后顺序

         7.removeFormSuperview 从父视图中移除

      例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//创建一个按钮
UIButton *button=[[[UIButton alloc] initWithFrame:CGRectMake(120, 120, 50, 50)] autorelease]; 
 
  button.backgroundColor=[UIColor redColor]; 
 
 [self.view addSubview:button]; 
 
    UIButton *button2=[[[UIButton alloc] initWithFrame:CGRectMake(130, 130, 50, 50)]     autorelease]; 
 
   button2.backgroundColor=[UIColor blueColor]; 
 
   [self.view addSubview:button2]; 
 
   [button removeFromSuperview]; 

   第三 ,layoutSubviews

     layoutSubviews在以下情况下会被调用:

    1、init初始化不会触发layoutSubviews

    2、addSubview会触发layoutSubviews

    3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

    4、滚动一个UIScrollView会触发layoutSubviews

    5、旋转Screen会触发父UIView上的layoutSubviews事件

    6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

    注意:UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿  到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。
宗上所诉,setNeedsDisplay方便绘图,而layoutSubViews方便出来数据

   第四,tag

       属性UIView的所有子类都有此属性,用于开发人员设置额外值,常用于同一方法被多个组件触发。

      例如:

    //得到当前的触发事件

    UIView *tempView = (UIView*)[self.view viewWithTag:1001];

  总结:

     视图都实添加到界面上才能显示的,每一个视图控制器都有一个属性UIView类型的,就是当前显示的界面,在它的上面我们还可以添加视图。

     视图相当于一个容器,可以添加一些其他的视图或控件,这中包含关系我们称之为子父视图的关系,容器视图为父视图,被添加的视图为子视图。

     每个视图都有frame和bounds属性,其中包含坐标和大小,frame是相对于父视图坐标系来说的,bounds是相对于自身坐标系来说的。

     越早添加的视图越在容器视图的低部,越晚添加的视图越在顶部,即晚加入的视图有可能会覆盖住早加进去的视图。