2012-06-18 153 views

回答

1

我不確定除了詳盡的搜索外,還有一種方法可以做到。您可以使用2個角點(參考角點,通過檢查窗口位置和對角點,或參考角點加上窗口尺寸返回),並且對於每個窗口,檢查其他窗口的任何角落是否存在當前窗口的角落之間。這種詳盡的方法是O(n^2),但應該還是相當快,除非你處理數以千計的窗口。

一些僞代碼:

inside (point, window): 
    if point.x less than window.corner1.x and point.x greater than window.corner2.x 
    and point.y less than window.corner1.y and point.y greater than window.corner2.y, 
     true. 
    false. 

check_for_collision (window1, window2): 
    if (window1.corner1 inside window2) or (window1.corner2 inside window2), true. 
    else if window2.corner1 inside window1 or window2.corner2 inside window1, true. 
    otherwise, false. 

check_group_of_windows (windowlist): 
    loop: 
     if size of windowlist is 1 or less, stop looping 
     let window be windowlist.pop 
     for each otherwindow in windowlist: 
      if check_for_collision(window, otherwindow), true. 
    false. 

我希望有一定的道理。

+0

同意。給自己寫一個方法,通過檢查框架來檢查它們是否重疊。 '[[self window] frame]'是這裏的事情。 – guitarflow

+1

我不能使用CGRectIntersectsRect? – Yep