如何观察NSView框架的变化?

时间:2017-08-29 15:58:14

标签: ios swift macos frame nsview

我有一个NSView,如果框架发生了变化我需要注意。

class CustomView: NSView {

    override var frame: NSRect {

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

但是如果调整了superView框架,我只会得到这个“notifikation”。

如果我在NSView类中执行类似的操作:

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 个答案:

答案 0 :(得分:7)

两个步骤:

  1. 在某些时候,将视图的postsFrameChangedNotifications属性设置为true

  2. 此时,您应该能够使用frameDidChangeNotification观察视图NSNotificationCenter(如果使用Swift 3,它是NSNotification.Name.NSViewFrameDidChange或类似的东西)。