【发布时间】:2011-03-02 08:25:51
【问题描述】:
我正在编写一个应用程序,它必须知道任何窗口何时调整大小或移动。 我查看了通知,但它似乎没有达到我的预期。
你知道我怎么能做到这一点吗?
【问题讨论】:
标签: objective-c macos cocoa
我正在编写一个应用程序,它必须知道任何窗口何时调整大小或移动。 我查看了通知,但它似乎没有达到我的预期。
你知道我怎么能做到这一点吗?
【问题讨论】:
标签: objective-c macos cocoa
给你的窗口一个委托。 NSWindowDelegate protocol 有 windowWillResize:toSize: 和 windowWillMove: 方法。
【讨论】:
鉴于您对 Carl 的回答,我建议您使用 Accessibility API,它可以让您访问所有窗口(我相信框架更改通知),而不仅仅是您的应用程序。
【讨论】:
如果您想要窗口大小/排序,请查看 CGWindow.h。 CGWindowListCreateDescriptionFromArray() 可能就是你想要的。
NSWindowList() 对于窗口列表也很有用。
【讨论】:
在 Swift 中,我的 AppDelegate 看起来像这样:
func applicationDidFinishLaunching(notification: NSNotification) {
// Set NSWindowDelegate to respond to windowWillResize
window.delegate = self
}
func windowWillResize(sender: NSWindow, toSize frameSize: NSSize) -> NSSize {
println(frameSize)
return frameSize
}
【讨论】:
如果您需要管理 MacOS Windows,请尝试使用辅助功能。
AX 非常棘手(低级/asyc),但这两个 github 帮助很大。
https://github.com/tmandry/Swindler
用途
https://github.com/tmandry/AXSwift
它们为窗口创建和移动等提供回调。
从骗子开始
【讨论】: