iOS中 CGGeometry 类方法总结

来源:互联网 发布:观看网络直播人群分析 编辑:程序博客网 时间:2024/05/17 04:29

原文文档在此:

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、创建CGPointCGSizeCGRect


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)

//只有当widthheight小于零时才有改变



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为原本的xdx y为原本的ydy  width为原本的width2dx  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); //CGRectxy方向便宜  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(00100100), 1010);

会创建出的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  CGPointMakeCGPoint A,CGPoint B            

             返回一个指定坐标点  

        CGRect   CGRectMakeCGFloat x,CGFloat y,CGFloat width,CGFloat height

 根据指定的坐标和大小创建一个矩形

 CGSize   CGSizeMakeCGFloat width,CGFloat height

 根据指定长宽创建一个CGSize   

2、修改矩形

CGRectDivide

            CGRect  CGRectInsetCGRect rect,CGFloat dx,CGFloat dy

            返回一个比原矩形大或小的矩形,但是中心点是相同的

CGRect CGRectIntegralCGRect A

 将矩形A的值转变成整数,得到一个最小的矩形,

CGRect CGRectIntersection:CGRect A,CGRect B

     获取两个矩形相交处所的矩形,没有相交返回NULL,用CGRectIsNull来检测

CGRectOffset

CGRectStandardize

CGRectUnion

3、比较

bool  CGPointEqualToPointCGPoint A,CGPoint B     

     返回两个点是否相等

bool  CGSizeEqualToSizeCGSize A,CGSize B

 CGSizeAB是否相等

bool  CGRectEqualToRectCGRect A,CGRect B       

     矩形AB的位置大小是否相等

bool  CGRectIntersectsRectCGRect A,CGRect B

     矩形AB是否相交,可用来判断精灵是否离开了屏幕

4、检查

       bool  CGRectContainsPointCGRect A, CGPoint B      

            检测矩形A是否包含指定的点B

bool  CGRectContainsRectCGRect A,CGRect B  

     检测矩形A是否包含矩形B

5、获取最大值、中等职和最小值

        CGFloat   CGRectGetMinXCGRect A) 

获取矩形x坐标的最小值

 CGFloat   CGRectGetMinYCGRect A)

 获取矩形y坐标的最小值 

CGFloat   CGRectGetMidXCGRect A) 

 获取矩形x坐标的中间值 

CGFloat   CGRectGetMidYCGRect A) 

 获取矩形y坐标的中间值 

CGFloat   CGRectGetMaxXCGRect A) 

 获取矩形x坐标的最大值 

CGFloat   CGRectGetMaxYCGRect A)

 获取矩形y坐标的最大值  

6、获取高和宽

CGFloat  CGRectGetHeightCGRect A)               

       获取矩形A的高

CGFloat  CGRectGetWidthCGRect A)            

       获取矩形A的宽

7、检测矩形是否存在或是无穷大

bool  CGRectIsEmptyCGRect A)

      矩形A是否长和宽都是0,或者是个NULL

bool  CGRectIsNullCGRect A)

   矩形A是否为NULL

bool  CGRectIsInfiniteCGRect A)

             矩形A是否无穷大,没有边界


0 0
原创粉丝点击