2017-02-26 93 views
-1

NSView class documentation中,有一個符號canDraw,指示繪圖命令是否會產生任何結果。如何設置NSView實例屬性

的聲明是var canDraw: Bool { get } - 所以,任何時候你嘗試一些諸如

@IBOutlet weak var myView: NSView! 

然後myView.canDraw = true,你會得到一個編譯時錯誤消息:「Cannot assign to property: 'canDraw' is a get-only property」。但是,如果我想將NSRect繪製到我的視圖上,我該如何更改此屬性?

+0

你不會改變它。閱讀文檔!它正在向您報告您目前是否有上下文。如果你想負責繪圖,你只需要執行'draw'方法。 https://developer.apple.com/reference/appkit/nsview/1483686-draw – matt

+0

@matt我試着實現'draw'方法,並且沒有發現任何變化,所以我認爲它被忽略了,因爲' canDraw'是錯誤的。我的錯。我會繼續修改'draw'。 –

+0

好的,所以你需要問自己_why_' canDraw'是否是假的。該文檔說:「如果視圖對象沒有隱藏,它可以在屏幕上繪製,它被附加到窗口中的視圖層次結構(NSWindow),並且該窗口具有相應的窗口設備。」我的猜測是你的視圖對象不符合這些標準。 – matt

回答

2

您不能更改canDraw,因爲它是隻讀的。它是隻讀的,因爲它報告的事實是你無法控制的事實,也就是說,這是否是你現在可以借鑑的觀點。

要繪製一個視圖 - 即實現一個負責繪製自己的NSView - 子類NSView並實現draw。例如:

enter image description here

在屏幕截圖所示的代碼基本上是在應用程序的唯一代碼。窗口中的視圖是MyView,MyView實現draw