目录

几个系统定义的量

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
无限的矩形

一些常用方法

CGRectOffset

CGRectOffset: 返回一个原点在源矩形基础上进行了偏移的矩形。

CGRect CGRectOffset(
  CGRect rect,
  CGFloat dx,
  CGFloat dy
)

注意,用这个你只改变了矩形的原点。

CGRectInset

CGRectInset: 返回一个与源矩形共中心点的,或大些或小些的新矩形。

CGRect CGRectInset(
  CGRect rect,
  CGFloat dx,
  CGFloat dy
)

CGRectIntegral

CGRectIntegral: 返回包围源矩形的最小整数矩形。

CGRect CGRectIntegral (
  CGRect rect
)

将CGRect 取整到最近的完整点是非常重要的。小数值会让边框画在像素边界处。因为像素已经是最小单元(不能再细分),小数值会使绘制时取周围几个像素的平均值,这样看起来就模糊了。

CGRectIntegral 将表示原点的值向下取整,表示大小的值向上取整,这样就保证了你的绘制代码平整地对齐到像素边界。

作为一个经验性的原则,如果你在执行任何一个可能产生小数值的操作(例如除法,CGGetMid[X Y],或是 CGRectDivide),在把一矩形作为视图的边框之前应该用CGRectIntegral正则化它。

取值辅助函数 CGRectGet[Min|Mid|Max][X|Y]

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 CGRectEqualToRect(CGRect rect1, CGRect rect2);
判断两个矩形是否相等

bool CGRectIsEmpty(CGRect rect);
判断是否为零矩形

CGRectIsNull(CGRect rect);
判断是否为空矩形

bool CGRectIsInfinite(CGRect rect);
判断是否为无限矩形

CGRect CGRectUnion(CGRect r1, CGRect r2);
返回两个矩形的并集

CGRect CGRectIntersection(CGRect r1, CGRect r2);
返回两个矩形的交集,如果没有交集,返回空矩形

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);
将字典转化为矩形

CGRectDivide

void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder, CGFloat amount, CGRectEdge edge);
这个函数用来分割矩形,参数rect是源矩形,slice和remainder是分割后的两部分矩形,amount是分割线,edge是分割选项。

注意:1、edge是一个宏,定义了分割的方式如下:

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);

CGRect rect = CGRectMake(0, 0, 100, 100);
    CGRect slice ;
    CGRect remainder;
    CGRectDivide(rect, &slice, &remainder, 60, CGRectMaxXEdge);

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!


hetaodie

Mobile development

简单,深入的研究移动客户端开发技术"