0

NSCollectionView赤い背景を描画するためにオーバーライドするカスタムを備えた基本的な Cocoa アプリがありますdrawRect:(説明目的で)。

drawRect:を呼び出したにもかかわらず、一見ランダムな時間にが呼び出されないことに気付きましたsetNeedsDisplay:YES。それ以外の場合は機能し、コレクション ビューの背景が赤くなりました。

数時間かかりましたが、ビュー階層の上位にある親ビューの 1 つがレイヤーに基づくビューであることに気付きました (要素に影を追加するために、Interface Builder で「コア アニメーション レイヤー」をチェックしました)。 .

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

私を困惑させているのは、親ビューでレイヤーバッキングを有効にするdrawRect:と、常にではなく、時々呼び出されることです。

親ビューがレイヤーでサポートされている場合、サブビューで確実にオーバーライドできない と想定する必要がありますか?drawRect:

4

1 に答える 1

1

レイヤーに裏打ちされたビューに関する WWDC 2012 ビデオを見て、 のドキュメントを読んでください-layerContentsRedrawPolicy。あなたが望むように聞こえますNSViewLayerContentsRedrawOnSetNeedsDisplay

于 2012-06-25T11:29:07.963 に答える