在 Swift / Objective-C 中侦听 window 调整大小事件
Listen for window resize event in Swift / Objective-C
是否可以遍历 OSX 中任何应用程序的所有打开 windows 并在 Swift 中监听它们的调整大小事件?我想创建自定义 window 管理器,它会根据用户行为移动和调整事件大小 – 因此,如果用户调整 window 的大小,其他 windows 会自动重新安排。
我是 Haskell,不是 Swift 开发人员,所以我将非常感谢任何显示如何实现此效果的代码片段/示例。 (实际上,我会将其用作一种 Haskell -> Cocoa 绑定。)
编辑:
我也很想在 Objective-C 中看到解决方案,但是 Swift 在这里对我来说更重要。
是否可以遍历 OSX 中任何应用程序的所有打开 windows 并在 Swift 中监听它们的调整大小事件?
可以这样做,更好的方法是让您的自定义 window 经理 class 为您的自定义 window 经理实施 NSWindowDelegate protocol and set all window's delegate。这将为您提供所需的所有调整大小和移动信息。
我是 Haskell,不是 Swift 开发人员,所以如果有任何代码片段/示例展示如何实现这一点,我将非常感激效果.
实现协议方法:
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
}
}
然后您可以选择要实现的协议方法,因为协议中的所有方法都是可选的。
您将必须能够识别哪个 window 正在调用委托方法并跟踪任何 windows 您 由于响应而移动或调整大小最初的 window 变化。请参阅此 Stack Overflow question 以获得帮助。
要获取当前屏幕上所有 windows 的列表,请参阅此 Stack Overflow question。
编辑
要获取当前在屏幕上的 您的应用程序 的所有 windows 的列表,请参阅此 Stack Overflow question。
第一步,你应该添加NSWindowDelegate和函数windowWillResize,完整代码如下:
class MainWindowController: NSWindowController, NSWindowDelegate {
override var windowNibName: String? {
return "MainWindowController"
}
override func windowDidLoad() {
super.windowDidLoad()
}
func windowDidResize(notification: NSNotification) {
//listen the event
}
}
那么你应该设置delegate 属性,设置MainWindowController.xib include file window的delegate 属性 to File's Owner。
- 创建一个 NSWindowController Class
- 打开故事板并找到 window 控制器,然后将 Class 设置为自定义 Class(身份检查选项卡)
- 使用 windowWillResize 方法
创建一个 NSWindowDelegate Class
- 将 NSWindowDelegate 实例设置为 NSWindowController 实例的 window.delegate 属性
当用户改变 window 尺寸时,将调用 windowWillResize 方法。
使用 Swift 3 windowDidResize 方法应如下所示:
func windowDidResize(_ notification: Notification) {
// Listen to a window resize event
}
是否可以遍历 OSX 中任何应用程序的所有打开 windows 并在 Swift 中监听它们的调整大小事件?我想创建自定义 window 管理器,它会根据用户行为移动和调整事件大小 – 因此,如果用户调整 window 的大小,其他 windows 会自动重新安排。
我是 Haskell,不是 Swift 开发人员,所以我将非常感谢任何显示如何实现此效果的代码片段/示例。 (实际上,我会将其用作一种 Haskell -> Cocoa 绑定。)
编辑: 我也很想在 Objective-C 中看到解决方案,但是 Swift 在这里对我来说更重要。
是否可以遍历 OSX 中任何应用程序的所有打开 windows 并在 Swift 中监听它们的调整大小事件?
可以这样做,更好的方法是让您的自定义 window 经理 class 为您的自定义 window 经理实施 NSWindowDelegate protocol and set all window's delegate。这将为您提供所需的所有调整大小和移动信息。
我是 Haskell,不是 Swift 开发人员,所以如果有任何代码片段/示例展示如何实现这一点,我将非常感激效果.
实现协议方法:
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
}
}
然后您可以选择要实现的协议方法,因为协议中的所有方法都是可选的。
您将必须能够识别哪个 window 正在调用委托方法并跟踪任何 windows 您 由于响应而移动或调整大小最初的 window 变化。请参阅此 Stack Overflow question 以获得帮助。
要获取当前屏幕上所有 windows 的列表,请参阅此 Stack Overflow question。
编辑
要获取当前在屏幕上的 您的应用程序 的所有 windows 的列表,请参阅此 Stack Overflow question。
第一步,你应该添加NSWindowDelegate和函数windowWillResize,完整代码如下:
class MainWindowController: NSWindowController, NSWindowDelegate {
override var windowNibName: String? {
return "MainWindowController"
}
override func windowDidLoad() {
super.windowDidLoad()
}
func windowDidResize(notification: NSNotification) {
//listen the event
}
}
那么你应该设置delegate 属性,设置MainWindowController.xib include file window的delegate 属性 to File's Owner。
- 创建一个 NSWindowController Class
- 打开故事板并找到 window 控制器,然后将 Class 设置为自定义 Class(身份检查选项卡)
- 使用 windowWillResize 方法 创建一个 NSWindowDelegate Class
- 将 NSWindowDelegate 实例设置为 NSWindowController 实例的 window.delegate 属性
当用户改变 window 尺寸时,将调用 windowWillResize 方法。
使用 Swift 3 windowDidResize 方法应如下所示:
func windowDidResize(_ notification: Notification) {
// Listen to a window resize event
}