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