2011-10-25 53 views
1

我想有在很多不同的NSTextViews,而不是彼此交叉的NSView的數組。起初,我有想法,請執行下列操作:檢查的CGRect相交矩形

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]; 

在這裏,「框架」是一個數組,而我添加NSTextViews的座標,一旦被清除,並認爲不會相交。 'field'是NSTextField,'randomPoint'是隨機查找NSPoint的方法,因此NSTextField的位置是隨機的。

會發生什麼事是,我通過矩形陣列迭代,並覈對他們中的每一個新的矩形不相交。當他通過了該測試,他本人進入陣列和一個新的文本字段帶來的。

這種方法的問題是,是的NSTextField在同一時間對一個長方形檢查。事實上,它可能不會與一個矩形相交,但會與下一個矩形相交,並且不幸的是,一旦其座標被修改,它可能通過測試,同時與第一個矩形相交。

現在,爲了簡化,沒有人知道的方法,或者是有可能改變我的代碼,以檢查在某個對象相交許多其他物體同一時間?是否有可能檢查超過2個CGRects之間的交集?

+1

爲什麼你將rects存儲爲字符串?您可以使用'+ [NSValue valueWithRect:]'將NSRect轉換成'NSValue'並稍後使用' - [NSValue rectValue]來檢索'NSRect'。 –

+0

如果沒有適合您的新框架的可能位置,會發生什麼情況?你會永遠循環嘗試隨機點,它永遠不會結束。 –

+1

對於NSValue方法你是對的,但它只是將字符串存儲在字符串中;我將優先考慮首先解決主要問題。 – elliottbolzan

回答

2

由於在這裏巧妙地演示了:http://static.mrfeinberg.com/bv_ch03.pdf,它似乎是愚蠢的,並且顯着緩慢地嘗試以我使用的方式檢查多個矩形交叉點。

一個更加複雜和精細的答案是在PDF格式,這對我來說是完全矯枉過正說明,但它可能是從長遠來看,唯一的解決辦法。