Я пытаюсь иметь NSView с множеством различных NSTextViews, не пересекающихся друг с другом. Сначала у меня появилась идея сделать следующее:
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 CGRects?