2012-06-18 2 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

Смежные вопросы