有人可以解释CGRectGetMaxX和CGRectIntersection的结果吗?

her*_*ube 4 core-graphics ios

脚本

假设两个非交叉矩形,宽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
Run Code Online (Sandbox Code Playgroud)

这是设置这些矩形的代码:

CGRect rect1 = CGRectMake(0.0f, 0.0f, 10.0f, 5.0f);
CGRect rect2 = CGRectMake(0.0f, 5.0f, 10.0f, 5.0f);
Run Code Online (Sandbox Code Playgroud)

CGRectGetMaxX

CGRectGetMaxXCore Graphics函数的返回值记录如下:

矩形的x坐标的最大值.

这是一个使用该函数的代码片段:

CGFloat maxX = CGRectGetMaxX(rect1);
Run Code Online (Sandbox Code Playgroud)

从文档中,我希望maxX是9.然而,maxX是10.嗯?

CGRectIntersection

CGRectIntersectionCore Graphics函数的返回值记录如下:

一个矩形,表示两个指定矩形的交集.如果两个矩形不相交,则返回空矩形.要检查此情况,请使用CGRectIsNull.

这是一个使用该函数的代码片段:

CGRect intersectionRect = CGRectIntersection(rect1, rect2);
bool intersectionRectIsNull = CGRectIsNull(intersectionRect);
Run Code Online (Sandbox Code Playgroud)

从文档,我希望intersectionRectIsNull是因为真实rect1rect2显然不相交.但是,这intersectionRectIsNull是假的.咦???

如果我们intersectionRect在调试器中检查,我们会看到:

(CGRect) $0 = origin=(x=0, y=5) size=(width=10, height=0)
Run Code Online (Sandbox Code Playgroud)

是的,所以现在很清楚为什么CGRectIsNull要归还假,但为什么地球上intersectionRect不是这样呢?

(CGRect) $0 = origin=(x=+Inf, y=+Inf) size=(width=0, height=0)
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这些功能的文档没有错吗?我一定错过了什么,但对于我的生活,我看不出它是什么.

rma*_*ddy 7

你的图表不正确.它与您的CGRectMake通话不符.

一个10宽的原点为0的矩形最大X为10,就像你得到的那样.

9你的图中应该是104你的图中应该是5.

鉴于两次调用CGRectMake,两个矩形共享一个共同的边.他们之间没有差距.

记住,0 + 10是10而不是9而0 + 5是5,而不是4.

  • @herzbube No.宽度/高度不能用单个"点"表示,需要有两个点来计算确定那些测量的距离.可以像任何其他高度/宽度测量一样考虑它.即使您正在谈论两个"点",从0英尺到1英尺的距离是*1英尺*.所以,在你的情况下,它是10点宽 - (0-> 1,1-> 2,2-> 3 .... 9-> 10),这是10个值. (3认同)