在 windodDidResize 事件结束时执行函数

Perform function at the end of windodDidResize event

我想在 windowDidResize 事件结束后执行一个函数。虽然此块是 运行,但它会打印以下内容:

NotificationCenter.default
  .publisher(for: NotificationName.windowDidResize)
  .sink { _ in

      // Perform something
      print("WindowDidResize")

   }.store(in: &cancellableBag)

打印输出:

WindowDidResize
WindowDidResize
WindowDidResize
WindowDidResize <-- Want to run a function here

如何在最后一个 windowDidResize 之后只执行一次功能?我想在 window 调整大小时隐藏一些 UI 元素(因为它使操作太慢)并在 window 调整大小时重新绘制它们(延迟 0.25 秒或别的东西)。

Swift 5.3 | Xcode 12.2 | macOS 11.1

您可以实现 optional method windowDidEndLiveResize,它只会在 window 调整大小结束时调用一次:

您还可以监控didendliveresizenotification

import Cocoa

class ViewController: NSViewController, NSWindowDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewWillAppear() {
        super.viewWillAppear()
        view.window?.delegate = self
    }
    func windowDidEndLiveResize(_ notification: Notification) {
        print(#function)
    }
}