GeekBand.iOS-View的定位

2016/4/2 posted in  iOS学习笔记  

在学习View的autoLayout之前,必须先搞清楚一些基本的概念,那就是在iOS中View的位置是如何被系统确定的。
UIView表示屏幕上的一块矩形区域:负责提供相应区域的事件响应。

View的层次

View的层次结构是一个树状结构:
View的层次结构
上级View可以对子View进行裁剪,通过UIView.clipsToBounds来控制,默认不裁剪,示意图如下:

UIKit坐标系

-CGPoint{x,y}用于描述坐标
-CGSize{width,height}用于描述宽和高
-CGRect{origin,size}描述一个矩形区域
坐标系如图:
UIKit坐标系

View的定位-Frame

view的frame属性用于描述View的矩形位置信息。其是一个CGRect结构体。用于描述该View在其SuperView的坐标系内描述其所占区域。

-(CGRect)frame{
    return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}

View的定位-Bounds

该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)

-(CGRect)bounds{
    return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}

View的定位-Center

center:该view的中心点在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)

Demo展示

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];  
[view1 setBounds:CGRectMake(-20, -20, 280, 250)];  
view1.backgroundColor = [UIColor redColor];  
[self.view addSubview:view1];//添加到self.view  
NSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));  
  
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];  
view2.backgroundColor = [UIColor yellowColor];  
[view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)]  
NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));