我正在尝试在其中安装许多不同的NSTextView的NSView,而不是相互交叉。起初,我有想法做以下事情:
for (NSString *str in frames) {
while (CGRectIntersectsRect(NSRectToCGRect(field.frame), NSRectToCGRect(NSRectFromString(str)))) {
CGPoint origin = [self randomPoint];
field.frame = CGRectMake(origin.x, origin.y, sizeOfButton.width, sizeOfButton.height);
}
}
NSString *string = NSStringFromRect(field.frame);
[frames addObject:string];
这里,'frames'是一个数组,我添加了NSTextViews的坐标,一旦它们被清除并且据说不相交。 'field'是一个NSTextField,'randomPoint'是一个随机查找NSPoint的方法,因此NSTextField的位置是随机的。
我会迭代一个矩形数组,并检查每一个矩形不相交的矩形。当他通过这个测试时,他自己进入阵列并引入一个新的文本字段。
这种方法的问题在于,一次针对一个矩形检查NSTextField。实际上,它可能不会与一个矩形相交,而是与下一个矩形相交,不幸的是,一旦其坐标被修改,它就可以通过测试,同时与第一个矩形相交。
现在,为了简化,有没有人知道某个方法,或者是否可以更改我的代码,同时检查一个对象是否与许多其他对象相交?是否可以检查两个以上CGRects之间的交叉点?
答案 0 :(得分:2)
正如在这里巧妙地证明的那样:http://static.mrfeinberg.com/bv_ch03.pdf,尝试以我使用的方式检查多个矩形交叉点似乎是愚蠢而且非常慢。
PDF中说明了一个更为复杂和精细的答案,这对我来说完全有点过头了,但从长远来看它可能是唯一的解决方案。