1

我正在尝试拥有一个包含许多不同 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 一次检查一个矩形。实际上,它可能不会与一个矩形相交,但会与下一个矩形相交,不幸的是,一旦修改了它的坐标,它可能会通过测试,同时与第一个矩形相交。

现在,为了简化,是否有人知道一种方法,或者是否可以更改我的代码,同时检查一个对象是否与许多其他对象相交?是否可以检查超过 2 个 CGRect 之间的交集?

4

1 回答 1

3

正如这里巧妙地展示的那样:http: //static.mrfeinberg.com/bv_ch03.pdf,尝试以我使用的方式检查多个矩形交叉点似乎是愚蠢且非常缓慢的。

A much more complex and elaborate answer is illustrated in that PDF, which is completely overkill for me, but it might be the only solution in the long run.

于 2011-10-29T14:00:49.320 回答