如何观察 NSView 框架的变化?

How to observe NSView frame change?

我有一个 NSView,如果框架发生变化,我需要从中注意到它。

class CustomView: NSView {

    override var frame: NSRect {

        didSet {
            Swift.print("changed frame: \(self.frame)")
        }
    }
}

但如果调整 superView 框架的大小,我只会得到这个 "notifikation"。

如果我在 NSView 中做这样的事情 class:

NotificationCenter.default.addObserver(forName:  Notification.Name(rawValue: "changeOwnSize"), object: nil, queue: nil) { notification in

          let newSize = NSSize(width: self.frame.width / 2, height: self.frame.height)
          self.setFrameSize(newSize)
}

didSet 函数根本没有反应。虽然框架大小发生了变化。感谢您的任何建议。

两步:

  1. 有时,将视图的 postsFrameChangedNotifications 属性 设置为 true

  2. 此时,你应该可以观察到视图的frameDidChangeNotification使用NSNotificationCenter(如果使用Swift 3,则为NSNotification.Name.NSViewFrameDidChange或类似的东西)。