macos - 如何检查窗口是否相交?

标签 macos cocoa nswindow appkit

我有一个打开的 NSWindow 数组。我如何检查它们是否相交?

最佳答案

除了详尽的搜索之外,我不确定是否还有其他方法可以做到这一点。您可以使用 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.

我希望这是有道理的。

关于macos - 如何检查窗口是否相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089946/

相关文章:

python - OS X 10.8.5 上的 Tensorflow 导入错误预计在

opacity - 如何对 nsview/nswindow 应用模糊效果?

cocoa - 如何向辅助功能系统报告自定义 NSWindow 标题?

objective-c - 如何保持数组有序

string - NSString 到 wchar_t*?

cocoa - 如何让 NSPanel 不可移动

objective-c - 从单独的源文件关闭一个源文件中的面板

objective-c - 当我设置新图像时,如何自动调整 NSPanel (和 NSImageView)的大小?

objective-c - 访问 iCloud 钥匙串(keychain)中的所有密码

objective-c - 第二次使用时 makeKeyAndOrderFront 崩溃...(ARC?)