Objective c 从CGRect中减去CGRect——其中一个最大的部分不包含另一个

Objective c 从CGRect中减去CGRect——其中一个最大的部分不包含另一个,objective-c,geometry,core-graphics,cgrect,Objective C,Geometry,Core Graphics,Cgrect,如何将一个CGRect从另一个中减去?我希望结果R1-R2是R1中不与R2相交的最大子矩形 示例1: +----------------------------------+ | +--------+ | | | R2 | | | | | | | +--------+ R1 | |

如何将一个
CGRect
从另一个中减去?我希望结果
R1-R2
是R1中不与R2相交的最大子矩形

示例1

+----------------------------------+ | +--------+ | | | R2 | | | | | | | +--------+ R1 | | | | | | | +----------------------------------+ +-----------------------+----------+ | | | | | R2 | | | | | R1 +----------+ | | | | | | +----------------------------------+ +----------------------------------+ | | | | | | | R1 | | +---------+ | | | | | | | R2 | | +---------+---------+--------------+ +----------------------------------+ | +--------+ | || R2 || | | | | |+----------+R1| | | | | | | +----------------------------------+ R3=CGRectSubstract(R2,R1)

+----------------------+ | | | | | | |R3| | | | | | | +----------------------+ 示例2

+----------------------------------+ | +--------+ | | | R2 | | | | | | | +--------+ R1 | | | | | | | +----------------------------------+ +-----------------------+----------+ | | | | | R2 | | | | | R1 +----------+ | | | | | | +----------------------------------+ +----------------------------------+ | | | | | | | R1 | | +---------+ | | | | | | | R2 | | +---------+---------+--------------+ +-----------------------+----------+ | | | || R2| | | | |R1+----------+ | | | | | | +----------------------------------+ R3=CGRectSubstract(R2,R1)

+-----------------------+ | | | | | | |R3| | | | | | | +-----------------------+ 示例3

+----------------------------------+ | +--------+ | | | R2 | | | | | | | +--------+ R1 | | | | | | | +----------------------------------+ +-----------------------+----------+ | | | | | R2 | | | | | R1 +----------+ | | | | | | +----------------------------------+ +----------------------------------+ | | | | | | | R1 | | +---------+ | | | | | | | R2 | | +---------+---------+--------------+ +----------------------------------+ | | | | | | |R1| | +---------+ | | | | | || R2 || +---------+---------+--------------+ R3=CGRectSubstract(R2,R1)

+----------------------------------+ | | | | |R3| | | +----------------------------------+
作为对您的说明的回应,我在这里给出的代码将完全满足您的要求(假设您不关心原点XY坐标)。我已经查看了,似乎没有定义
CGRectDifference
或其他类似的方法。然而,
CGRectUnion
,但这与您所寻找的正好相反。

可能会出现如下情况:

CGRect frame = CGRectMake(0, 0, 320, 480);
float aWidth  = frame.size.width; /* say for instance 320 */
float aHeight = frame.size.height; /* say for instance 480 */

int final = aWidth - aHeight;
NSLog(@"Should be -160, your answer: %i",final);

你的定义相当模糊,怎么说减法是水平的还是垂直的?我建议结合使用CGRectIntersection和CGRectDivide,并指定方向以消除歧义

(未测试,甚至未编译)


从另一个矩形中减去一个矩形意味着什么。R2可以在任何地方。
frame.size.height
frame.size.width
是一个
CGFloat
,而不是
CGRect
。可能是打字错误吧?还有,为什么要从高度中减去宽度?不知道你在这里做什么…是的,对不起,打字错误,这只是一个例子。我已经检查了CGGeometry函数。我们有GRectUnion和cgrectunion。但这不是我需要的。是的,这也是我的结论。只要使用我给你的代码来创建你的新rect,它应该做你需要的事情,再次假设你不关心原点坐标。您甚至可以将其命名为CGRectDifference!=)我需要R3的正确坐标和尺寸。我想你的例子不符合我的需要。@cobbal:你太棒了……它应该有用……我会检查一下……最后,我得到了我想要的,从过去五天开始……)