Cocoa とそのビューの再描画階層に問題がありました。
現在、メーター スタイル コントロールで (オーディオ) レベルの表示をテストしており、Apple の MatrixMixerTest サンプル プロジェクトの MeteringView クラスを使用しています。このクラスはメーターを描画し、変更された部分のみを描画する非常に効率的なクラスのようです。
私のプロジェクトは 2 つの分割ビューに分割されています。一部は NSCollectionViews (Scrollview、Clipview) で、他は静的ビューのみです。これらの「静的」ビューにメーターを追加すると、これらのビューが setNeedsDisplay:YES を呼び出したときに正常に動作します。メーターが CollectionView アイテムのビューに追加されるとレンダリングされますが、描画された「古いレベル」の部分とそのコーナー/背景が失われます。CollectionView アイテムも再描画されるように呼び出され(背景画像があります)、すべてがなくなったため、これが発生すると思います。現在変更中の部分を描画しています(描画は機能します)。
アイテム自体が再描画されるのを防ぐ方法はありますか? または、それらのビューにも背景画像がありますが、メーターを超えて描画されないため、これらの静的ビューで発生しない理由がわかりません。
CollectionView には、「通常の」ビューよりもいくつかのトリックや違いがありますか?
編集: isOpaque (MeteringView isOpaque = YES) について読んだ後、yes に設定されている場合、親ビュー drawRect を呼び出すべきではないことを意味します。これは静的ビューでは機能します。これらの MeteringView は親の drawRect を呼び出しませんが、CollectionView の親は呼び出します。どうしてか分かりません。
編集 2:このトピックに別のタイトルを付けました。これは、MeteringView の isOpaque=YES が CollectionView の親 drawRect の呼び出しを停止していないためです。通常のビューでは機能しています。知っておくべきことがいくつかありますか?それが問題なので、CollectionView アイテムの再描画を停止する必要があります。
よろしくお願いします
ベンジャミン