CGRect相关整理
2015-12-31 11:42
351 查看
//常量 CGPointZero CGSizeZero CGRectZero
//这三个常量很好理解,它们所有的值都是零,CGPointZero完全等价于CGPointMake(0.0f, 0.0f)
//CGRectNull
//表示一个为NULL的矩形,NULL的矩形并不是ZERO矩形。当我们函数CGRectIntersection函数的时候,传入的两个rect没有相交的时候,就会返回CGRectNull,我们只可以用CGRectIsNull来检测某个rect是不是NULL矩形。
可以看到,CoreGraphics里面定义了非常基本的数据结构,以及对这些数据进行操作的函数,对于学习CoreGraphics来说,这些是非常基础的东西。
//CGRectMinX
返回Rect在x方向上最小的值
CGRect rectangle =
CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMinX(rectangle);
// x = 10.0
//CGRectMidX
返回Rect的中心点在x方向的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMidX(rectangle);
// x = 30.0
//CGRectMaxX
返回Rect在x方向上最大的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMaxX(rectangle);
// x = 50.0
//CGRectMinY
返回Rect在y方向上最小的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMinY(rectangle);
// y = 10.0
//CGRectMidY 返回Rect的中心点在y方向的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMinY(rectangle);
// y = 30.0
//CGRectMaxY
返回Rect在y方向上最大的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMaxY(rectangle);
// y = 50.0
//CGRectGetWidth CGRectGetHeight
返回Rect的高度和宽度
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat width =
CGRectGetWidth(rectangle); // 40.0
CGFloat height =
CGRectGetHeight(rectangle); // 40.0
//CGPointEqualToPoint
比较两个点是否相同
CGPoint point1 =
CGPointMake(10.0f,
12.0f);
CGPoint point2 =
CGPointMake(10.0f,
12.0f);
BOOL result =
CGPointEqualToPoint(point1, point2); // YES
//CGSizeEqualToSize
比较两个Size的值是否一致
CGSize size1 =
CGSizeMake(50.0f,
60.0f);
CGSize size2 =
CGSizeMake(50.0f,
60.1f);
BOOL result =
CGSizeEqualToSize(size1, size2); // NO
//CGRectEqualToRect
比较两个矩形是否在相同的位置,并且大小一致
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
检测两个矩形是否有相交,这个是检测物体碰触最简单的方法
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之内
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之内
//注意:如果第二个rect没有完全包含在第一个rect,这个函数将返回NO
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
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
//CGRectIsEmpty
检测Rect的大小是否是零,如果width和height之中有一个值是零,这个函数就会返回YES
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是一个常量
只有传递给它的参数是CGRectNull的时候,它才返回YES
BOOL isNull =
CGRectIsNull(CGRectNull);
// YES
//CGRectInset 这个函数的作用在原有的Rect的基础上根据给定的x,y进行调整
//
生成了一个内嵌与原来Rect的新Rect
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
//总结
CGRect new = CGRectInset(source, dx, dy);
new.origin.x = source.x + dx;
new.origin.y = source.y + dy;
new.size.width = source.width - 2 * dx;
new.size.height = source.height - 2 * dy;
//CGRectIntegral
将一个rect的位置以及长宽的数值,根据四舍五入的原则取整
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
//如果其中一个rect内嵌于另一个rect之中,那么函数返回的就是内侧的那个rect。如果两个rect没有相交,那么返回的将是常量CGRectNull,可以用CGRectIsNull函数来检测是否有相交。
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大小不变
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的宽度和高度变为它们的绝对值
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
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指定的边的距离。通过例子来看看:
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)
//上面是一个竖着切的例子,我们的“刀”是靠着右边来切的,“刀”离右边的距离有10.0f。slice得到了一个10.0f宽,100.0f高的rect。
//这三个常量很好理解,它们所有的值都是零,CGPointZero完全等价于CGPointMake(0.0f, 0.0f)
//CGRectNull
//表示一个为NULL的矩形,NULL的矩形并不是ZERO矩形。当我们函数CGRectIntersection函数的时候,传入的两个rect没有相交的时候,就会返回CGRectNull,我们只可以用CGRectIsNull来检测某个rect是不是NULL矩形。
可以看到,CoreGraphics里面定义了非常基本的数据结构,以及对这些数据进行操作的函数,对于学习CoreGraphics来说,这些是非常基础的东西。
//CGRectMinX
返回Rect在x方向上最小的值
CGRect rectangle =
CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMinX(rectangle);
// x = 10.0
//CGRectMidX
返回Rect的中心点在x方向的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMidX(rectangle);
// x = 30.0
//CGRectMaxX
返回Rect在x方向上最大的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat x = CGRectGetMaxX(rectangle);
// x = 50.0
//CGRectMinY
返回Rect在y方向上最小的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMinY(rectangle);
// y = 10.0
//CGRectMidY 返回Rect的中心点在y方向的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMinY(rectangle);
// y = 30.0
//CGRectMaxY
返回Rect在y方向上最大的值
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat y = CGRectGetMaxY(rectangle);
// y = 50.0
//CGRectGetWidth CGRectGetHeight
返回Rect的高度和宽度
CGRect rectangle = CGRectMake(10.0f,
10.0f, 40.0f,
40.0f);
CGFloat width =
CGRectGetWidth(rectangle); // 40.0
CGFloat height =
CGRectGetHeight(rectangle); // 40.0
//CGPointEqualToPoint
比较两个点是否相同
CGPoint point1 =
CGPointMake(10.0f,
12.0f);
CGPoint point2 =
CGPointMake(10.0f,
12.0f);
BOOL result =
CGPointEqualToPoint(point1, point2); // YES
//CGSizeEqualToSize
比较两个Size的值是否一致
CGSize size1 =
CGSizeMake(50.0f,
60.0f);
CGSize size2 =
CGSizeMake(50.0f,
60.1f);
BOOL result =
CGSizeEqualToSize(size1, size2); // NO
//CGRectEqualToRect
比较两个矩形是否在相同的位置,并且大小一致
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
检测两个矩形是否有相交,这个是检测物体碰触最简单的方法
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之内
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之内
//注意:如果第二个rect没有完全包含在第一个rect,这个函数将返回NO
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
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
//CGRectIsEmpty
检测Rect的大小是否是零,如果width和height之中有一个值是零,这个函数就会返回YES
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是一个常量
只有传递给它的参数是CGRectNull的时候,它才返回YES
BOOL isNull =
CGRectIsNull(CGRectNull);
// YES
//CGRectInset 这个函数的作用在原有的Rect的基础上根据给定的x,y进行调整
//
生成了一个内嵌与原来Rect的新Rect
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
//总结
CGRect new = CGRectInset(source, dx, dy);
new.origin.x = source.x + dx;
new.origin.y = source.y + dy;
new.size.width = source.width - 2 * dx;
new.size.height = source.height - 2 * dy;
//CGRectIntegral
将一个rect的位置以及长宽的数值,根据四舍五入的原则取整
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
//如果其中一个rect内嵌于另一个rect之中,那么函数返回的就是内侧的那个rect。如果两个rect没有相交,那么返回的将是常量CGRectNull,可以用CGRectIsNull函数来检测是否有相交。
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大小不变
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的宽度和高度变为它们的绝对值
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
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指定的边的距离。通过例子来看看:
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)
//上面是一个竖着切的例子,我们的“刀”是靠着右边来切的,“刀”离右边的距离有10.0f。slice得到了一个10.0f宽,100.0f高的rect。
相关文章推荐
- 优秀的ios开源库
- BITMAP图片压缩算法三则--bilinear、nearest、cubic
- TypeScript初尝试
- html中间块居中宽度自适应
- 三层架构
- MYSQL 5.5 优化思路
- CF# 334 Alternative Thinking
- java xml操作
- Leetcode战记 day3 移零问题
- 例解 Linux 下 Make 命令
- H5学习开启誓师文!
- iOS NSNotificationCenter 使用姿势详解 转载地址http://www.jianshu.com/p/a4d519e4e0d5
- hadoop 2.2.0的datanode中存储block的多个文件夹的负载均衡问题
- datax中oracleWriter
- Twisted
- OpenCV3.1.0中调用MHI(Motion History Images, 运动历史图像)
- iOS圆角那些事
- 经典语录
- YUV420数据格式
- “Unable to connect to the MKS: virtual machine config file does not exist.”