CoreGraphics基本数据类型与函数
2013-06-06 00:45
232 查看
http://liwenqiu.me/blog/2011/11/25/coregraphics-data-type-and-functions/
基本类型
CGFloat
表示一个基本的浮点数值,在32位的机器上它就是float,64位的机器是double
CGFloat
1 2 | typedef float CGFloat; // 32-bit typedef double CGFloat; // 64-bit |
CGPoint
表示屏幕上的一个点,由两个CGFloat值构成,分别表示 x 和 y 值
CGPoint
1 23 | struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; |
CGSize
包含了两个CGPoint,通常用来表示宽度和高度
CGSize
1 23 | struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize; |
CGRect
表示一个矩形的位置和大小,由一个CGPoint和CGSize组成
CGRect
1 23 | struct CGRect { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect; |
函数
CGPointMake CGSizeMake CGRectMake
CoreGraphic提供了创建这些类型对象的函数,例如:CGPointMake,CGSizeMake,CGRectMake
1 23 | CGPoint point = CGPointMake(10.0f, 10.0f); CGSize size = CGSizeMake(50.0f, 60.0f); CGRect rect = CGRectMake(10.0f, 10.0f, 50.0f, 60.0f); |
CGPointEqualToPoint
1 23 | CGPoint point1 = CGPointMake(10.0f, 12.0f); CGPoint point2 = CGPointMake(10.0f, 12.0f); // 比较两个点是否相同 BOOL result = CGPointEqualToPoint(point1, point2); // YES |
CGSizeEqualToSize
1 23 | CGSize size1 = CGSizeMake(50.0f, 60.0f); CGSize size2 = CGSizeMake(50.0f, 60.1f); // 比较两个Size的值是否一致 BOOL result = CGSizeEqualToSize(size1, size2); // NO |
CGRectEqualToRect
1 23 | CGRect rect1 = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); CGRect rect2 = CGRectMake(10.1f, 10.1f, 50.0f, 50.0f); // 比较两个矩形是否在相同的位置,并且大小一致 BOOL result = CGRectEqualToRect(rect1, rect2); // NO |
CGRectIntersectsRect
检测两个矩形是否有相交,这个是检测物体碰触最简单的方法
1 23 | CGRect rect1 = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); CGRect rect2 = CGRectMake(62.0f, 62.0f, 50.0f, 50.0f); BOOL result = CGRectIntersectsRect(rect1, rect2) // NO CGRect rect1 = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); CGRect rect2 = CGRectMake(59.0f, 59.0f, 50.0f, 50.0f); BOOL result = CGRectIntersectsRect(rect1, rect2); // YES |
CGRectContainsPoint
检测一个Point是否在一个Rect之内
1 23 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); CGPoint point = CGPointMake(25.0f, 25.0f); BOOL result = CGRectContainsPoint(rectangle, point); // YES |
CGRectContainsRect #####$
检测一个Rect是否包括在另一个Rect之内
1 23 | CGRect rect1 = CGRectMake(0.0f, 0.0f, 50.0f, 50.0f); CGRect rect2 = CGRectMake(5.0f, 5.0f, 10.0f, 10.0f); BOOL result = CGRectContainsRect(rect1, rect2); // YES |
1 23 | CGRect rect1 = CGRectMake(0.0f, 0.0f, 50.0f, 50.0f); CGRect rect2 = CGRectMake(5.0f, 5.0f, 50.0f, 50.0f); BOOL result = CGRectContainsRect(rect1, rect2); // NO |
CGRectMinX
返回Rect在x方向上最小的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat x = CGRectGetMinX(rectangle); // x = 10.0 |
CGRectMidX
返回Rect的中心点在x方向的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat x = CGRectGetMidX(rectangle); // x = 30.0 |
CGRectMaxX
返回Rect在x方向上最大的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat x = CGRectGetMaxX(rectangle); // x = 50.0 |
CGRectMinY
返回Rect在y方向上最小的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat y = CGRectGetMinY(rectangle); // y = 10.0 |
CGRectMidY
返回Rect的中心点在y方向的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat y = CGRectGetMinX(rectangle); // y = 30.0 |
CGRectMaxY
返回Rect在y方向上最大的值
1 2 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat y = CGRectGetMaxY(rectangle); // y = 50.0 |
CGRectGetWidth CGRectGetHeight
返回Rect的高度和宽度
1 23 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); CGFloat width = CGRectGetWidth(rectangle); // 40.0 CGFloat height = CGRectGetHeight(rectangle); // 40.0 |
CGRectIsEmpty
检测Rect的大小是否是零,如果width和height之中有一个值是零,这个函数就会返回YES
1 23 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 40.0f, 40.0f); BOOL isEmpty = CGRectIsEmpty(rectangle); // NO CGRect rectangle = CGRectMake(10.0f, 10.0f, -40.0f, -40.0f); BOOL isEmpty = CGRectIsEmpty(rectangle); // NO CGRect rectangle = CGRectMake(10.0f, 10.0f, 0.0f, 0.0f); BOOL isEmpty = CGRectIsEmpty(rectangle); // YES |
CGRectIsNull
只有传递给它的参数是CGRectNull的时候,它才返回YES。CGRectNull是一个常量,稍后会提到。
1 | BOOL isNull = CGRectIsNull(CGRectNull); // YES |
CGRectInset
这个函数的作用在原有的Rect的基础上根据给定的x,y进行调整,例如
1 23 | CGRect source = CGRectMake(100.0f, 100.0f, 10.0f, 10.0f); CGRect result = CGRectInset(source, 4.0f, 4.0f); // 新的rect的位置大小分别为: 104.0, 104.0, 2.0, 2.0 // 生成了一个内嵌与原来Rect的新Rect CGRect source = CGRectMake(100.0f, 100.0f, 10.0f, 10.0f); CGRect result = CGRectInset(source, -4.0f, -4.0f); // 新的rect的位置大小分别为: 96.0, 96.0, 18.0, 18.0 // 生成了一个包含原来的Rect的新Rect |
假如:
1 | CGRect new = CGRectInset(source, dx, dy); |
1 23 | new.x = source.x + dx new.y = source.y + dy new.width = source.width - 2 * dx new.height = source.height - 2 * dy |
CGRectIntegral
将一个rect的位置以及长宽的数值,根据四舍五入的原则取整
1 23 | CGRect source = CGRectMake(10.25f, 10.45f, 10.5f, 10.5f); CGRect result = CGRectIntegral(source); // the result is (10.0f, 10.0f, 11.0f, 11.0f) |
CGRectIntersection
返回两个Rect相交的部分的Rect
1 23 | CGRect rect1 = CGRectMake(0.0f, 0.0f, 10.0f, 10.0f); CGRect rect2 = CGRectMake(5.0f, 5.0f, 10.0f, 10.0f); CGRect result = CGRectIntersection(rect1, rect2); // the result is (5.0f, 5.0f, 5.0f, 5.0f) |
CGRectOffset
将一个rect的x,y加上指定量的位移,返回新的rect与原来的rect大小不变
1 23 | CGRect rectangle = CGRectMake(10.0f, 10.0f, 10.0f, 10.0f); CGRect result = CGRectOffset(rectangle, 5.0f, 5.0f); // the result is (15.0f, 15.0f, 10.0f, 10.0f) |
CGRectStandardize
将一个rect的宽度和高度变为它们的绝对值
1 23 | CGRect rectangle = CGRectMake(10.0f, 10.0f, -10.0f, -10.0f); CGRect result = CGRectStandardize(rectangle); // the result is (10.0f, 10.0f, 10.0f, 10.0f) |
CGRectUnion
返回一个新的Rect,它是最小的可以将两个rect完全包含再内的rect
1 23 | CGRect rect1 = CGRectMake(10.0f, 10.0f, 10.0f, 10.0f); CGRect rect2 = CGRectMake(30.0f, 30.0f, 10.0f, 10.0f); CGRect result = CGRectUnion(rect1, rect2); // the result is (10.0f, 10.0f, 10.0f, 10.0f) |
CGRectDivide
这个函数有复杂,先看看它的定义
void CGRectDivide(CGRect rect, CGRect slice, CGRect remainder, CGFloat amount, CGRectEdge edge) 简单来说,这个函数的作用是将一个rect切成两个rect,切下来的部分放在slice参数指向的rect,剩余的部分放在remainder参数指向的rect。可以注意到slice和remainder参数都是指向CGRect的指针。那么从那里下刀切呢?就要看后两个参数amount和edge,先说edge,它是一个enum类型的参数,可以是CGRectMinXEdge,CGRectMaxXEdge,CGRectMinYEdge,CGRectMaxYEdge。可以理解这四个值是rect的四条边,它的作用是指定我们的“刀”要平行与哪条边来切。amount参数的作用是指定我们的“刀”距离edge指定的边的距离。通过例子来看看:
1 23 | CGRect slice; CGRect remainder; CGRect rectangle = CGRectMake(0.0f, 0.0f, 100.0f, 100.0f); CGRectDivide(rectangle, &slice, &remainder, 10.0f, CGRectMaxXEdge); // the slien is (90.0f, 0.0f, 10.0f, 100.0f) // the remainder is (0.0f, 0.0f, 90.0, 100.f) |
常量
CGPointZero CGSizeZero CGRectZero
这三个常量很好理解,它们所有的值都是零,CGPointZero完全等价于CGPointMake(0.0f, 0.0f)
CGRectNull
表示一个为NULL的矩形,NULL的矩形并不是ZERO矩形。当我们函数CGRectIntersection函数的时候,传入的两个rect没有相交的时候,就会返回CGRectNull,我们只可以用CGRectIsNull来检测某个rect是不是NULL矩形。 可以看到,CoreGraphics里面定义了非常基本的数据结构,以及对这些数据进行操作的函数,对于学习CoreGraphics来说,这些是非常基础的东西。
相关文章推荐
- CoreGraphics基本数据类型
- Core Java 学习笔记——2.基本数据类型&类型转换
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- 判断基本数据类型和引用类型的封装函数
- PHP 函数传递基本数据类型和数组的内存传递方式
- Lua 函数参数万能转化基本数据类型
- php基本数据类型+数组常用函数
- (1) Mysql ---- ABC 数据库基本操作、数据类型和运算符、函数 《MYSQL 5.5从零开始学》笔记
- C语言基础学习基本数据类型-字符专属的输入输出函数
- Android SO逆向-基本数据类型及函数的工作原理
- 学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)
- Python中list数据类型的基本函数方法
- 数据类型(基本内置类型)——指针和指针孩子(指针变量(指针类型)、数组(构造类型)、字符串、函数指针、空指针等)
- 深入解析js中基本数据类型与引用类型,函数参数传递的区别
- Core Java (二) Java的基本结构与数据类型
- JAVA入门.零基础学Java语言 MOOC 第6周 使用对象(基本数据类型的包裹类型对象) 第7周 函数
- C语言速成手册(一):基本数据类型、标准输出、函数
- OpenCv (正式篇)6----core组件--Mat(最基本的图像数据类型)
- CoreJava——java中的基本数据类型和类型转换
- 基本数据类型函数