我想用CALayer
對NSImageView
進行註釋。目的是爲了能夠在圖像上繪製一個形狀(一個CALayer
),並在一個單獨的視圖中顯示有關已突出顯示的區域的信息。例如,用戶可以在圖像視圖上繪製矩形,該區域下的像素可以放大並顯示在另一個窗口中。使用CALayers,圖層託管或圖層支持在NSImageView上註釋?
我想就使用CALayer
在圖像視圖頂部實現繪製的最佳方式提供一些一般性建議。如果視圖被調整大小,我希望選擇區域的位置保持同步,也就是說,相對於圖像的位置應保持不變。
我略有困惑,因爲層支持的觀點,則CALayer的文檔狀態
「當使用層支持的觀點,你應該永遠不會直接與層交互。相反,你必須使用標準視圖編程實踐「。
顯然,這不是合適的選擇,因爲我想擁有該圖層並直接與其交互。
對於層託管意見,
「在使用層託管視圖,你不應該依賴於圖紙來看,也不應該添加子視圖對第一層託管視圖「。
所以它看起來應該是圖層託管。但是,使我的NSImageView(子類)圖層託管阻止圖像繪製,因爲
NSImageView
依賴(我假設)在-drawRect:
。不使用圖層託管視圖調用-drawRect:
。它也希望在視圖中做一些自定義繪圖,例如空的時候。一個佔位符消息,爲此我需要-drawRect:
。
所以一個可能的解決方案將是在界面生成器放置一個「註解視圖」圖像視圖的上方,即它們不是嵌套而只是佔據相同空間和具有相同的尺寸。我可以在Interface Builder中指定z排序,因此註釋視圖始終位於最前面。然後我使註解視圖成爲圖層託管,並保持圖像視圖不變。
這看起來像一個黑客,所以我相信有更好的方法。當然,我可以在圖像視圖-drawRect:
中繪製註釋,但是這會添加大量代碼,我不希望在沒有探索替代方法的情況下立即執行此操作。