objective-c - 在 Swift/Objective-C 中监听窗口调整大小事件

标签 objective-c swift macos cocoa accessibility

是否可以遍历 OSX 中任何应用程序的所有打开窗口并在 Swift 中监听它们的调整大小事件?我想创建自定义窗口管理器,它会根据用户行为移动和调整事件大小——因此如果用户调整窗口大小,其他窗口会自动重新排列。

我是 Haskell,不是 Swift 开发人员,所以如果有任何代码片段/示例展示如何实现此效果,我将不胜感激。 (实际上,我会将其用作一种 Haskell -> Cocoa 绑定(bind)。)

编辑: 我也有兴趣在 Objective-C 中查看解决方案,但 Swift 在这里对我来说更重要。

最佳答案

是否可以遍历 OSX 中任何应用程序的所有打开窗口并在 Swift 中监听它们的调整大小事件?

可以这样做,更好的方法是让您的自定义窗口管理器类实现 NSWindowDelegate协议(protocol)并设置所有窗口的delegate到您的自定义窗口管理器。这将为您提供所需的所有调整大小和移动信息。

我是 Haskell,不是 Swift 开发人员,所以如果有任何代码片段/示例展示如何实现这种效果,我将非常感激。

实现协议(protocol)方法:

class CustomWindowManager: NSWindowController, NSWindowDelegate {

       // Resize Methods

       func windowWillResize(sender: NSWindow,toSize frameSize: NSSize) -> NSSize {

            // Your code goes here
       }

       func windowDidResize(notification: NSNotification) {

           // Your code goes here
       }
}

然后您可以选择要实现的协议(protocol)方法,因为协议(protocol)中的所有方法都是可选的。

您必须能够识别哪个窗口正在调用委托(delegate)方法,并跟踪由于对初始窗口更改使用react而移动或调整大小的任何窗口。看这个Stack Overflow question寻求帮助。

要获取当前屏幕上所有窗口的列表,请参阅 Stack Overflow question .

编辑


要获取当前屏幕上您的应用程序 的所有窗口的列表,请参阅此 Stack Overflow question .

关于objective-c - 在 Swift/Objective-C 中监听窗口调整大小事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169365/

相关文章:

python - 我无法为 python3 安装 anaconda

ios - Realm +地幔: how to avoid multiple inheritance duplication when integrating both frameworks?

objective-c - Command-Key-Up cocoa

ios - 获取当前位置的邮政编码 - iPhone SDK

ios - 如何使用 RxSwift 观察 Bool 属性?

ios - 重命名文件后将 UI 元素链接到 IBOutlet

c++ - 实例渲染 OpenGL

ios - CFBundleDisplayName 返回 'null'

ios - TableView 在顶部添加来自 firestore 的 newScore,即使它不是最高分

macos - 使用 OpenCL 1.2 模拟 OpenCL 1.1