2015-02-11 61 views
0

有沒有更好的方法來觀察NSScrollView - > NSClipView框架/邊界的變化? 這是的OBJ-C代碼翻譯成斯威夫特:Swift NSScrollView更好NSViewBoundsDidChangeNotification觀察?

public override init(frame frameRect: NSRect) { 
    self.contentView.postsFrameChangedNotifications = true; 
    NSNotificationCenter.defaultCenter().addObserver(
     self, 
     selector: "frameDidChange:", 
     name: NSViewFrameDidChangeNotification, 
     object: self.contentView) 
} 

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(
     self, 
     name: NSViewFrameDidChangeNotification, 
     object: self.contentView) 
} 

它的工作原理,但我不希望使用NSNotificationCenter。我想在NSClipView使用frame屬性觀察:

class MyClipView: NSClipView { 
    ... 

    override init(frame frameRect: NSRect) { 
     super.init(frame: frameRect) 
     self.postsFrameChangedNotifications = true; 
    } 

    override var frame: CGRect { 
     didSet { 
      println("Did set frame") 
     } 
    } 
} 

但didSet被稱爲初始化後只有2次並封閉NSScrollView滾動時,它永遠不會被調用。看起來蘋果正在使用內部方法來更改框架而不調用框架屬性?

同樣代表NSViewBoundsDidChangeNotification和bounds屬性。

回答

0

不是每個變化到框架變量具有通過屬性發生:
==>因此didSet不「捕獲」所有

旁邊的方法setFrame(裝定爲幀)
也有其他的方法:setFrameOriginsetFrameSize甚至setFrameRotation


同爲界

+0

算了筆以覆蓋幀,setFrameOrigin,setFrameSize。沒有一個被調用,多於一次。它們在初始化後被調用的順序是:setFrameOrigin,setFrameSize,frame。我想這對邊界是一樣的。滾動過程中不調用方法/屬性。 – 2015-02-11 22:06:51