NSImageViewwithに注釈を付けたいと思いCALayerます。目的は、画像上に図形 (a CALayer) を描画し、強調表示された領域に関する情報を別のビューに表示できるようにすることです。たとえば、ユーザーが画像ビュー上に長方形を描くと、この領域の下のピクセルが拡大され、別のウィンドウに表示されます。
を使用して画像ビューの上に描画を実装する最善の方法について、一般的なアドバイスをお願いしCALayerます。ビューのサイズが変更された場合、選択領域の位置を同期したままにする、つまり、画像に対する位置を一定に保つ必要があります。
CALayer のドキュメントには、レイヤーに基づくビューについて記載されているため、少し混乱しています。
- 「レイヤーに裏打ちされたビューを使用する場合、レイヤーを直接操作するべきではありません。代わりに、標準のビュー プログラミング プラクティスを使用する必要があります。」 - レイヤーを所有して直接操作したいので、明らかにこれは適切な選択ではありません。 
レイヤ ホスティング ビューの場合、
- 「レイヤーをホストするビューを使用する場合、描画のためにビューに依存したり、レイヤーをホストするビューにサブビューを追加したりしないでください。」 - したがって、ビューはレイヤーホスティングである必要があるようです。ただし、私の NSImageView (サブクラス) レイヤーホストを作成すると、イメージが描画されなくなり - NSImageViewます- -drawRect:。- -drawRect:レイヤーをホストするビューでは呼び出されません。また、空のときにビューでカスタム描画を行いたいと考えています。たとえば、プレースホルダー メッセージが必要- -drawRect:です。
したがって、可能な解決策の 1 つは、Interface Builder で画像ビューの上に「注釈ビュー」を配置することです。つまり、それらはネストされていませんが、単に同じスペースを占有し、同じサイズを持っています。Interface Builder で z 順序を指定できるので、注釈ビューが常に一番上に表示されます。次に、注釈ビューをレイヤー ホスティングにし、画像ビューを変更しません。
これはハックのように思えるので、もっと良い方法があると確信しています。もちろん、画像ビューに注釈を描画することもできます-drawRect:が、これには多くのコードが追加されるため、代替案を検討せずにすぐに描画したくありません。