drawRect:setNeedsDisplayの後に必ずしも呼び出されるとは限りません:親ビューがレイヤーバックされている場合はYES

drawRect:をオーバーライドして(図の目的で)赤い背景を描画するカスタム NSCollectionView を持つ基本的なCocoaアプリケーションがあります。

私は setNeedsDisplay:YES を呼び出したにもかかわらず、無作為な時間に drawRect:が呼び出されないことに気付きました。それがうまくいけばコレクションビューは赤い背景を持っていました。

私は数時間かかりましたが、最後に、親ビューのビュー階層の1つがレイヤーバックアップビュー(Interface Builderで「Core Animation Layer」をチェックしていました要素に影を追加する)。

その親ビューをレイヤーバックを使用しないように変更するとすぐに問題が解決され、 drawRect:は常に期待どおりに呼び出されます。

私が困惑しているのは、親ビューでレイヤーバッキングを有効にした場合、 drawRect:が呼び出されることがあります。

親ビューがレイヤーバックされている場合、 drawRect:を任意のサブビューで確実に上書きできないと仮定するべきですか?

0
"上書き"を "上書き"に変更するために編集されました。
追加された 著者 NSResponder,

1 答え

レイヤーバックビューのWWDC 2012ビデオを見て、 -layerContentsRedrawPolicy のドキュメントを読んでください。 NSViewLayerContentsRedrawOnSetNeedsDisplay のように聞こえます。

1
追加された