假设两个非交叉矩形,宽10点,高5点。以下模式中的x / y值表示两个矩形的角点的坐标。
x/y = 0/0 +------------------+ x/y = 9/0
| |
| |
| |
| |
x/y = 0/4 +------------------+ x/y = 9/4
x/y = 0/5 +------------------+ x/y = 9/5
| |
| |
| |
| |
x/y = 0/9 +------------------+ x/y = 9/9
这是设置这些矩形的代码:
CGRect rect1 = CGRectMake(0.0f, 0.0f, 10.0f, 5.0f);
CGRect rect2 = CGRectMake(0.0f, 5.0f, 10.0f, 5.0f);
CGRectGetMaxX
核心图形函数的返回值记录如下:
矩形的x坐标的最大值。
这是一个使用该函数的代码片段:
CGFloat maxX = CGRectGetMaxX(rect1);
从文档中,我希望maxX
为9.但是,maxX
是10.嗯?
CGRectIntersection
核心图形函数的返回值记录如下:
一个矩形,表示两个指定矩形的交集。如果两个矩形不相交,则返回空矩形。要检查此情况,请使用CGRectIsNull。
这是一个使用该函数的代码片段:
CGRect intersectionRect = CGRectIntersection(rect1, rect2);
bool intersectionRectIsNull = CGRectIsNull(intersectionRect);
从文档中,我希望intersectionRectIsNull
是真的,因为rect1
和rect2
显然不相交。但是,intersectionRectIsNull
是假的。咦???
如果我们在调试器中检查intersectionRect
,我们会看到:
(CGRect) $0 = origin=(x=0, y=5) size=(width=10, height=0)
是的,所以现在很明显为什么CGRectIsNull
返回假,但为什么intersectionRect
不是这个?
(CGRect) $0 = origin=(x=+Inf, y=+Inf) size=(width=0, height=0)
有人可以解释为什么这些功能的文档没有错吗?我一定错过了什么,但对于我的生活,我看不出它是什么。
你的图表不正确。它与你的CGRectMake
电话不符。
一个10宽的原点为0的矩形最大X为10,就像你得到的那样。
图中的9
应该是10
,图中的4
应该是5
。
鉴于对CGRectMake
的两次调用,两个矩形共享一个共同的边。他们之间没有差距。
记住,0 + 10是10而不是9而0 + 5是5,而不是4。