原文文档在此:
https://developer.apple.com/library/prerelease/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html
CGGeometry参考定义几何结构和功能,操作简单。
数据结构中的一个点CGPoint代表在一个二维坐标系统。
数据结构的位置和尺寸CGRect代表的一个长方形。
数据结构的尺寸CGSize代表宽度和高度。
一、数据结构
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
enum CGRectEdge {
CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
};
typedef enum CGRectEdge CGRectEdge;
二、方法
1、创建CGPoint、CGSize、CGRect
CGPoint CGPointMake(CGFloat x, CGFloat y);
CGSize CGSizeMake(CGFloat width, CGFloat height);
CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,CGFloat height);
2、得到关于CGRect的数据
CGFloat CGRectGetMinX(CGRect rect);
CGFloat CGRectGetMidX(CGRect rect);
CGFloat CGRectGetMaxX(CGRect rect);
CGFloat CGRectGetMinY(CGRect rect);
CGFloat CGRectGetMidY(CGRect rect);
CGFloat CGRectGetMaxY(CGRect rect);
CGFloat CGRectGetWidth(CGRect rect);
CGFloat CGRectGetHeight(CGRect rect);
bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);//判断点是否相等
bool CGSizeEqualToSize(CGSize size1, CGSize size2);//判断大小是否相等
bool CGRectEqualToRect(CGRect rect1, CGRect rect2);//判断矩形框是否相等
CGRect CGRectStandardize(CGRect rect); //返回一个CGRect
//CGRectMake(1, 1, 1, 1)返回(1, 1, 1, 1)
//CGRectMake(1, 1, 1, -1)返回(1, 0, 1, 1)
//CGRectMake(1, 1, -1, 1)返回(0, 1, 1, 1)
//CGRectMake(1, 1, -1, -1)返回(0, 0, 1, 1)
//只有当width或height小于零时才有改变
bool CGRectIsEmpty(CGRect rect);//判断是否为空 既width或height为0
bool CGRectIsNull(CGRect rect) //判断是否为空 Null一般时执行某个方法后的返回值(例如两个不相交的CGRect执行相交方法(在下面)返回值为Null)
bool CGRectIsInfinite(CGRect rect) //判断是否为无穷大
CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)
//返回一个CGRect,x为原本的x-dx y为原本的y-dy width为原本的width-2dx height为原本的height-2dy
CGRect CGRectIntegral(CGRect rect) //情况与CGRectStandardize类似
CGRect CGRectUnion(CGRect r1, CGRect r2)//两个CGRect的合集
CGRect CGRectIntersection(CGRect r1, CGRect r2) //两个CGRect的交集
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy); //CGRect向x或y方向便宜 x>0向右偏 x<0向左 y>0向下偏 y<0向上
void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,CGFloat amount, CGRectEdge edge);
bool CGRectContainsPoint(CGRect rect, CGPoint point) //判断point是否在rect内
bool CGRectContainsRect(CGRect rect1, CGRect rect2) //判断rect1是否包含rect2
bool CGRectIntersectsRect(CGRect rect1, CGRect rect2) //判断rect1和rect2是否相交
CFDictionaryRefCGPointCreateDictionaryRepresentation(CGPoint point) //把点转换为不可变字典
bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGPoint *point); //把字典转换为点,存在point里,成功返回true 其他false
CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size); //把CGSize转换为不可变字典
bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGSize *size); //把字典转换为CGSize,存在size里,成功返回true 其他false
CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect); //把CGRect转换为不可变字典
bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGRect *rect); //把字典转换为CGSize,存在rect里,成功返回true 其他false
const CGPoint CGPointZero
零点,与CGPointMake(0, 0)等效
const CGSize CGSizeZero
零尺寸,与CGSizeMake(0, 0)等效
const CGRect CGRectZero
零矩形,与CGRectMake(0, 0, 0, 0)等效
const CGRect CGRectNull
空矩形,这个和零矩形并不相同,当我们返回两个不相交矩形的交集时,会返回空矩形。
const CGRect CGRectInfinite
无限的矩形
CGPoint CGPointMake(CGFloat x, CGFloat y);
创建一个点
CGSize CGSizeMake(CGFloat width, CGFloat height);
创建一个尺寸
CGVectorMake(CGFloat dx, CGFloat dy);
创建一个矢量
CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,
CGFloat height);
创建一个矩形
CGFloat CGRectGetMinX(CGRect rect);
获得矩形最左边的x值
CGFloat CGRectGetMidX(CGRect rect);
获取矩形中点的x值
CGFloat CGRectGetMaxX(CGRect rect);
获取矩形最右端的x值
CGFloat CGRectGetMinY(CGRect rect);
获取矩形最上端的y值
CGFloat CGRectGetMidY(CGRect rect);
获取矩形中心点的y值
CGFloat CGRectGetMaxY(CGRect rect);
获取矩形最下端的y值
CGFloat CGRectGetWidth(CGRect rect);
获取矩形宽度
CGFloat CGRectGetHeight(CGRect rect);
获取矩形高度
bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);
判断两个点是否相等
bool CGSizeEqualToSize(CGSize size1, CGSize size2);
判断两个尺寸是否相等
bool CGRectEqualToRect(CGRect rect1, CGRect rect2);
判断两个矩形是否相等
CGRect CGRectStandardize(CGRect rect);
根据一个矩形创建一个标准的矩形
bool CGRectIsEmpty(CGRect rect);
判断是否为零矩形
CGRectIsNull(CGRect rect);
判断是否为空矩形
bool CGRectIsInfinite(CGRect rect);
判断是否为无限矩形
CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy);
创建一个内嵌的矩形,中心和rect参数的中心一样,dx,dy对应内嵌的宽度和高度
比如:CGRect rect= CGRectInset(CGRectMake(0, 0, 100, 100), 10, 10);
会创建出的rect为(10,10,80,80),dx,dy也可以为负值,则是创建出来的矩形会大于原矩形范围。
CGRect CGRectIntegral(CGRect rect)
根据一个矩形,返回四个参数都是整数的矩形
CGRect CGRectUnion(CGRect r1, CGRect r2);
返回两个矩形的并集
CGRect CGRectIntersection(CGRect r1, CGRect r2);
返回两个矩形的交集,如果没有交集,返回空矩形
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy);
返回一个矩形,偏移量相对于rect
void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,
CGFloat amount, CGRectEdge edge);
这个函数用来分割矩形,参数rect是源矩形,slice和remainder是分割后的两部分矩形,amount是分割线,edge是分割选项。
注意:1、edge是一个宏,定义了分割的方式如下:
1
2
3
4
5
6
7
8
9
10
|
typedef
CF_ENUM(uint32_t, CGRectEdge) {
//从x的最小处进行垂直分割
CGRectMinXEdge,
//从y的最小处进行水平分割
CGRectMinYEdge,
//从x最大处进行垂直分割
CGRectMaxXEdge,
//从y最大处进行水平分割
CGRectMaxYEdge
};
|
2、slice和remainder是地址。
3、举例如下,将会分割出两个矩形分别为(40,0,60,100)(0,0,40,100);
1
2
3
4
|
CGRect rect = CGRectMake(0, 0, 100, 100);
CGRect slice ;
CGRect remainder;
CGRectDivide(rect, &slice, &remainder, 60, CGRectMaxXEdge);
|
bool CGRectContainsPoint(CGRect rect, CGPoint point);
判断点是否在矩形内
bool CGRectContainsRect(CGRect rect1, CGRect rect2);
判断矩形1是否包含矩形2
bool CGRectIntersectsRect(CGRect rect1, CGRect rect2);
判断矩形1和矩形2是否相交
CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point);
返回一个表示点的字典
bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGPoint *point);
将字典转换为点
CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size);
返回一个表示尺寸的字典
bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGSize *size) ;
将字典转换为尺寸
CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect);
返回一个表示矩形的字典
bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGRect *rect);
将字典转化为矩形
1、创建一个几何原始数值
CGPoint CGPointMake(CGPoint A,CGPoint B)
返回一个指定坐标点
CGRect CGRectMake(CGFloat x,CGFloat y,CGFloat width,CGFloat height)
根据指定的坐标和大小创建一个矩形
CGSize CGSizeMake(CGFloat width,CGFloat height)
根据指定长宽创建一个CGSize
2、修改矩形
CGRectDivide
CGRect CGRectInset(CGRect rect,CGFloat dx,CGFloat dy)
返回一个比原矩形大或小的矩形,但是中心点是相同的
CGRect CGRectIntegral(CGRect A)
将矩形A的值转变成整数,得到一个最小的矩形,
CGRect CGRectIntersection:(CGRect A,CGRect B)
获取两个矩形相交处所的矩形,没有相交返回NULL,用CGRectIsNull来检测
CGRectOffset
CGRectStandardize
CGRectUnion
3、比较数值
bool CGPointEqualToPoint(CGPoint A,CGPoint B)
返回两个点是否相等
bool CGSizeEqualToSize(CGSize A,CGSize B)
CGSizeAB是否相等
bool CGRectEqualToRect(CGRect A,CGRect B)
矩形AB的位置大小是否相等
bool CGRectIntersectsRect(CGRect A,CGRect B)
矩形AB是否相交,可用来判断精灵是否离开了屏幕
4、检查
bool CGRectContainsPoint(CGRect A, CGPoint B)
检测矩形A是否包含指定的点B
bool CGRectContainsRect(CGRect A,CGRect B)
检测矩形A是否包含矩形B
5、获取最大值、中等职和最小值
CGFloat CGRectGetMinX(CGRect A)
获取矩形x坐标的最小值
CGFloat CGRectGetMinY(CGRect A)
获取矩形y坐标的最小值
CGFloat CGRectGetMidX(CGRect A)
获取矩形x坐标的中间值
CGFloat CGRectGetMidY(CGRect A)
获取矩形y坐标的中间值
CGFloat CGRectGetMaxX(CGRect A)
获取矩形x坐标的最大值
CGFloat CGRectGetMaxY(CGRect A)
获取矩形y坐标的最大值
6、获取高和宽
CGFloat CGRectGetHeight(CGRect A)
获取矩形A的高
CGFloat CGRectGetWidth(CGRect A)
获取矩形A的宽
7、检测矩形是否存在或是无穷大
bool CGRectIsEmpty(CGRect A)
矩形A是否长和宽都是0,或者是个NULL
bool CGRectIsNull(CGRect A)
矩形A是否为NULL
bool CGRectIsInfinite(CGRect A)
矩形A是否无穷大,没有边界