2013-07-07 50 views
3

我想用CALayerNSImageView進行註釋。目的是爲了能夠在圖像上繪製一個形狀(一個CALayer),並在一個單獨的視圖中顯示有關已突出顯示的區域的信息。例如,用戶可以在圖像視圖上繪製矩形,該區域下的像素可以放大並顯示在另一個窗口中。使用CALayers,圖層託管或圖層支持在NSImageView上註釋?

我想就使用CALayer在圖像視圖頂部實現繪製的最佳方式提供一些一般性建議。如果視圖被調整大小,我希望選擇區域的位置保持同步,也就是說,相對於圖像的位置應保持不變。

我略有困惑,因爲層支持的觀點,則CALayer的文檔狀態

  • 「當使用層支持的觀點,你應該永遠不會直接與層交互。相反,你必須使用標準視圖編程實踐「。

    顯然,這不是合適的選擇,因爲我想擁有該圖層並直接與其交互。

對於層託管意見

  • 「在使用層託管視圖,你不應該依賴於圖紙來看,也不應該添加子視圖對第一層託管視圖「。

    所以它看起來應該是圖層託管。但是,使我的NSImageView(子類)圖層託管阻止圖像繪製,因爲NSImageView依賴(我假設)在-drawRect:。不使用圖層託管視圖調用-drawRect:。它也希望在視圖中做一些自定義繪圖,例如空的時候。一個佔位符消息,爲此我需要-drawRect:

所以一個可能的解決方案將是在界面生成器放置一個「註解視圖」圖像視圖的上方,即它們不是嵌套而只是佔據相同空間和具有相同的尺寸。我可以在Interface Builder中指定z排序,因此註釋視圖始終位於最前面。然後我使註解視圖成爲圖層託管,並保持圖像視圖不變。

這看起來像一個黑客,所以我相信有更好的方法。當然,我可以在圖像視圖-drawRect:中繪製註釋,但是這會添加大量代碼,我不希望在沒有探索替代方法的情況下立即執行此操作。

回答

1

我去的解決方案是根本不改變NSImageView子類的層。相反,我添加了一個子視圖到NSImageView子類,限制了這個視圖,使其具有與父視圖相同的界限,然後將這個子視圖圖層託管。然後可以將子圖層添加到此「註釋」視圖的圖層中。通過這種方式,我可以在NSImageView上註釋。

相關問題