当前位置: 代码迷 >> 综合 >> UIView —— 所有控件的载体
  详细解决方案

UIView —— 所有控件的载体

热度:91   发布时间:2024-01-18 01:30:29.0

一、如何用代码来使用UIView?

首先创建一个singleview,然后我们就可以在ViewCotroller.m文件中的ViewDidLoad函数中进行书写。代码如下:

【1】设置UIview界面

UIView  *view1 =[[UIView alloc]init];    //实例化一个view1

view1.frame = CGRectMack(100,110,50,60);      //位置大小,其中以主屏左上角为原点,横向为X轴,竖向为Y轴。则100为x坐标,110为y坐标,50和60分别代表视图的宽、高

view1.backgroundColor = [UIColor redColor];     //设置背景颜色

[self.view addSubview:view1];      //将视图加入父视图中,self.view为view1的父视图

【2】不同的方法打印相应位置及大小


NSLog(@"view1's  frame : x:%f    y:%f    w:%f    h:%f  ",view1.frame.origin.x,view1.frame.origin.y,view1.frame.size.width,view1.frame.size.height);
//打印view1的位置及大小


NSLog(@"view1's  bounds : x:%f    y:%f    w:%f    h:%f  ",view1.bounds.origin.x,view1.bounds.origin.y,view1.bounds.size.width,view1.bounds.size.height);
//打印view1的大小,因为bounds表示边框的大小,所以其打印出来的x、y永远为0


NSLog(@"view1's center: x:%f     y:%f",view1.center.x,view1.center.y);
//打印view1的中心点



【3】调用父视图

UIView  *superView = view1.superview;   //调用父视图
superView.backgroundColor = [UIColor  greenColor];  //设置父视图背景颜色



UIView  *view2 =[[UIView alloc]init];    //实例化一个view2

view2.frame = CGRectMack(150,150,10,10);    //坐标是根据父视图的位置来设置的,不会跨层

view2.backgroundColor = [UIColor blackColor];     //设置背景颜色

view2.tag = 2; //使用tag属性,设置唯一标识

[view1 addSubview:view2];      //将视图加入父视图中,self.view为view1的父视图


【4】调用子视图。这里介绍两种方法:


===================================<1>=============================================
NSArray  *subViewsArray = view1.subviews;  //调用子视图,因为一般子视图会有多个,所以采用数组形式
for(UIView *view  in  subViewsArray){

if(view.tag == 2)
view.backgroundColor = [UIColor  whiteColor];

}                                               //这里我们将实现对子视图的遍历,并且当tag值为2的时候,将其背景颜色设置成红色

===================================<2>==============================================
UIView *subView = [view1  viewWithTag:2];     //view1为其父视图,调用tag=2的子视图

【5】层级的处理

1.同一个父视图,先加入的view会被盖在下面;
2.子视图是根据父视图进行层级遮挡,如果父视图层级低于其他同级视图则父视图的子视图也会被遮挡,但是子视图和其他视图中的子视图是没有关系的;
3.交换两个层的视图时必须注意填写正确的层数,如果为不存在的层数,则该交换无效。而层数为先加入的从0开始,后加入的逐一递增;
4.当层交换了之后,对应的子视图的数组下标也会进行改变。

a.交换两个层的视图,代码如下:
[view1 exchangeSubviewAtIndex:0 withSubviewAtIndex:1];   //第0层与第1层进行交换

b.插入视图到指定层,代码如下:
UIView  *view4 =[[UIView alloc]init];   

view4.frame = CGRectMack(200,200,50,50);   

view4.backgroundColor = [UIColor orangeColor]; 

[view1 insertSubview:view4  atIndex:3]; //将view4插入到第3层

或者:
[view1 insertSubview:view4  aboveSubview:view2];//将view4插入到view2上面,同理,加在下面也是一样的

c.将一个view放入最顶层或最底层,代码如下:
//放入最顶层
[view1 bringSubviewToFont:view2];

//放入最底层
[view1 sendSubviewToBack:view2];


【6】自适应

UIView  *backview =[[UIView alloc]init];   

backview.frame = CGRectMack([UIScreen mainScreen].bounds.size.width/2-25,400,50,50); //根据主屏的宽度进行设置视图的位置

backview.backgroundColor = [UIColor yellowColor];
//准许子视图自适应
backview.autoresizesSubviews=Yes;

[self.view addSubview:backview];     


UIView  *topview =[[UIView alloc]init];   

topview.frame = CGRectMack(10,10,30,30); //根据主屏的宽度进行设置视图的位置

topview.backgroundColor = [UIColor greenColor];  

//设置子视图的适应方式
topview.autoresizingMask = UIViewAutoresizingFlexibleLeftMagin;//准许左侧改变,同理,还有准许右侧改变等等

或者:
//设置右侧和左侧都可以进行改变,其他同理
topview.autoresizingMask = UIViewAutoresizingFlexibleLeftMagin  |  UIViewAutoresizingFlexibleRightMagin;  //注意这里只有一个竖杠

[backview addSubview:topview];


二、各代iphone的屏幕大小及分辨率

3GS         3.5寸    320*480   @1x
4/4s         3.5寸    320*480   @2x     640*960
5/5c/5s    4寸       320*568   @2x     640*1136
6               4.7寸   375*667   @2x     750*1344
6plus       5.5寸   414*736   @3x      1242*2208

那么如何用代码来打印屏幕的大小呢?代码如下:

NSLog(@"w: %f   h:%f" , [[UIScreen mainScreen]bounds].size.width , [[UIScreen mainScreen]bounds].size.height);

注意:状态栏高度为20px,我们在设置空间的frame值时需要让出20px
UIView  *view2 =[[UIView alloc]init];    //实例化一个view2

view2.frame = CGRectMack(150,150,10,10);    //坐标是根据父视图的位置来设置的,不会跨层

view2.backgroundColor = [UIColor blackColor];     //设置背景颜色

view2.tag = 2; //使用tag属性,设置唯一标识

[view1 addSubview:view2];      //将视图加入父视图中,self.view为view1的父视图