如何观察NSView框架更改?
我有一个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
功能doesn't反应都没有。尽管帧大小已更改。感谢您的任何建议。
两个步骤:
在某些时候,你的观点的
postsFrameChangedNotifications
属性设置为true
。在这一点上,你应该能够使用
NSNotificationCenter
(如果使用Swift 3,它是NSNotification.Name.NSViewFrameDidChange
或类似的东西)观察视图的frameDidChangeNotification
。
这对于iOS'UIView是否适用?文档只显示它支持Mac OS中的'NSView'。 –
我没有在文档中看到任何对通知的引用,所以我可能会认为不是。看起来很直观,一个iOS'UIView'在没有你的程序代码的情况下不会改变它的框架。 –
iOS似乎依赖于像KVO和通知比Mac OS更少,我认为,因为它们相当“重量级”,并需要更多的内存和更多的CPU的马力。我的猜测是,苹果决定在实施iOS视图时放弃该功能。 –
的可能的复制[有一个UIView调整事件?(https://stackoverflow.com/questions/4000664/is-there-a-uiview-resize-event) – GIJOW
尝试'bounds' .. – sCha
@sCha与'bounds'相同 –