【问题标题】:windowDidResize protocol swift OSXwindowDidResize 协议 swift OSX
【发布时间】:2015-07-01 19:24:24
【问题描述】:
我正在创建一个程序,我希望 UI 根据窗口的大小进行更改。我正在寻找一些在调整窗口大小时调用的方法。我查看了 windowDidResize 的文档,但是在调整窗口大小时我无法让它工作。
import SpriteKit
import AppKit
class GameScene: SKScene , SKPhysicsContactDelegate ,NSWindowDelegate{
**** bunch of code ****
func windowDidResize (notification: NSNotification) {
HUDComp.updatePosition(size)
println("Screen has been resized")
}
}
任何信息将不胜感激。
【问题讨论】:
标签:
macos
swift
window
protocols
【解决方案1】:
如果你继承了 NSWindowDelegate,你唯一应该做的就是在 NSNotificationCenter 上添加观察者。
代码在这里。
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("windowDidResize:"), name: NSWindowDidResizeNotification, object: nil)
【解决方案2】:
Swift 5 macOS 11+
针对 Xcode 12.2 和 macOS Big Sur 进行了更新。
当窗口的尺寸发生变化时,这将调用windowDidResize。
class ViewController: NSViewController, NSWindowDelegate {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(NSWindowDelegate.windowDidResize(_:)), name: NSWindow.didResizeNotification, object: nil)
}
func windowDidResize(_ notification: Notification) {
print(view.window?.frame.size as Any)
}
}
【解决方案3】:
swift 5 我的两分钱。(同时显示委托和通知,选择一个..)
import Cocoa
class ViewController: BaseController, NSWindowDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.makeItListenZoom()
}
override func viewDidAppear() {
self.view.window?.delegate = self
}
private final func makeItListenZoom(){
NotificationCenter.default.addObserver(forName: NSWindow.didResizeNotification, object: nil, queue: OperationQueue.main) { (n: Notification) in
print("didresize---")
}
}
func windowDidResize(_ notification: Notification){
print("windowDidResize")
}
}