我有一个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
函数根本没有反应。虽然框架大小已更改。谢谢你的任何建议。
答案 0 :(得分:7)
两个步骤:
在某些时候,将视图的postsFrameChangedNotifications
属性设置为true
。
此时,您应该能够使用frameDidChangeNotification
观察视图NSNotificationCenter
(如果使用Swift 3,它是NSNotification.Name.NSViewFrameDidChange
或类似的东西)。