如何观察 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
函数根本没有反应。虽然框架大小发生了变化。感谢您的任何建议。
两步:
有时,将视图的 postsFrameChangedNotifications
属性 设置为 true
。
此时,你应该可以观察到视图的frameDidChangeNotification
使用NSNotificationCenter
(如果使用Swift 3,则为NSNotification.Name.NSViewFrameDidChange
或类似的东西)。
我有一个 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
函数根本没有反应。虽然框架大小发生了变化。感谢您的任何建议。
两步:
有时,将视图的
postsFrameChangedNotifications
属性 设置为true
。此时,你应该可以观察到视图的
frameDidChangeNotification
使用NSNotificationCenter
(如果使用Swift 3,则为NSNotification.Name.NSViewFrameDidChange
或类似的东西)。