NSCollectionView
赤い背景を描画するためにオーバーライドするカスタムを備えた基本的な Cocoa アプリがありますdrawRect:
(説明目的で)。
drawRect:
を呼び出したにもかかわらず、一見ランダムな時間にが呼び出されないことに気付きましたsetNeedsDisplay:YES
。それ以外の場合は機能し、コレクション ビューの背景が赤くなりました。
数時間かかりましたが、ビュー階層の上位にある親ビューの 1 つがレイヤーに基づくビューであることに気付きました (要素に影を追加するために、Interface Builder で「コア アニメーション レイヤー」をチェックしました)。 .
その親ビューをレイヤーバッキングを使用しないように変更すると、すぐに問題が解決され、drawRect:
常に期待どおりに呼び出されます。
私を困惑させているのは、親ビューでレイヤーバッキングを有効にするdrawRect:
と、常にではなく、時々呼び出されることです。
親ビューがレイヤーでサポートされている場合、サブビューで確実にオーバーライドできない と想定する必要がありますか?drawRect: