UIView是所有可视化控件的老祖宗,而这些可视化控件又与用户互动密不可分,这表示UIView负责了界面的产生以及事件的处理,因此,我们可以将UIView的特性整理如下。
- UIView 会占用一块矩形区域,而这块矩形区域是以CGRect这个C结构来表示的。UIView 的一切描绘操作以及事件处理都发生在这个区域内。
- 如同画布一般,可以在上面描绘其他的东西,也可以放入或删除控件,例如我们在HelloWorld中放置的按钮。
- 为了让所有的可视化控件可以和用户 互动,它继承了UIResponder 类。而这个类就定义了触控事件以及摇晃事件等。
- 一个UIView下面可以拥有多个子UIView ,后加入的UIView会放置在上层,我们也可以通过调整这些UIView的上下层关系来构成界面的转换。
- 通过加入手势的识别,可以让UIView识别出用户的操作,病做出相对应的响应。
—————————————
描述一块区域,只要用这块区域的原点(origin)以及大小(size) 就可以确定了。
- CGPoint
struct CGPoint{
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
用来表示在界面坐标上的一个点。
- CGSize
struct CGSize{
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
用来定义界面上的一块区域的大小。
- CGRect
struct CGRect{
CGFloat origin;
CGFloat size;
};
typedef struct CGRect CGRect;
用来描述界面上的一块区域的位置与大小。这个结构在日后开发时用到得几率非常高。
- CGPointMake(x,y):用来产生CGPoint,
CGPoint point = CGPointMake(100.0,200.0); //在这个坐标定位一个点
- CGSizeMake(width,height):用来产生CGSize,
CGSize size = CGSizeMake(40.0,50.0); //产生宽40、高50大小的区域
- CGRectMake(x,y,width,height):用来产生CGRect,
CGRect rect = CGRectMake(0,0,320,240); //在(0,0)的位置产生一块320X240的区域
- CGSizeEqualToSize(size1,size2):用来比较两个CGSize是否相同
CGSize size1 = CGSizeMake(100,200);
CGSize size2 = CGSizeMake(200,300);
BOOL isEqual = CGSizeEqualToSize(size1,size2);
结果返回NO。
- CGRectContainsPoint(rect,point):用来检查变量point是否在rect所包含的区域内,
CGPoint point = CGPointMake(10,10);
CGRect rect = CGRectMake(5,5,30,30);
BOOL containsPoint = CGRectContainsPoint(rect,point);
结果返回YES.
- CGRectGetMinX(rect)和CGRectGetMinY(rect):分别取得区域rect左上角的X,Y坐标
- CGRectGetMidX(rect)和CGRectGetMidY(rect):分别用来取得区域rect的中心点的X,Y坐标
- CGRectGetMaxX(rect)和CGRectGetMaxY(rect):分别用来取得区域rect右下角的X,Y坐标
定义一个UIView
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
上述的界面大小即定义为由原点(0,0)算起、宽度320,高度480的区域。除了使用CGRectMake来定义UIVIew的大小以外,在IOS里面还定义了几个特殊的CGRect可以让你直接使用:
- CGRectNull:对象可以用nil来设置为控制,那么CGRect呢?答案是使用CGRectNull这个敞亮,而要判断一个CGRect是否为空值,并非简单地使用null或nil来判断,这是因为CGRect是一个C的结构,而非指针对象,这时候应该要使用CGRectNull()函数来判断。
- CGRectZero:定义了一个大小为0的区域。这个敞亮用于并不在乎UIView的大小的情况,例如在UITableViewCell这个类里面,我们常会使用以下代码。
UITableViewCell *cell = [[UITableViewCell alloc] iniWithFrame:CGRectZero reuseIdentifier:MyId];
由于后续IOS会去调整所产生的这个控件的大小,所以,我们并不需要自己去计算该控件的大小。在这种情况下,只要传入CGRectZero就可以了。
- CGRectInfinite:如果要产生一个无穷大得区域,那么久可以使用这个常量。可以试着将他的width与height输出到控制台来看,那将是个超出屏幕大小好几倍的空间。