0

У меня возникла проблема с какао и ее иерархией перерисовывания.isOpaque не останавливается переход к родителям drawRect

В настоящее время я тестирую уровни отображения (аудио) в элементе управления метром, и я использую класс MeteringView из примера примера MatrixMixerTest из apple. Этот класс рисует метр и только рисует разницу, что изменилось, что выглядит очень эффективным классом.

Мой проект разделен на 2 режима splitviews, в некоторых из них NSCollectionViews (Scrollview, Clipview), а в других - только статические представления. Если я добавлю метр к этим «статическим» представлениям, они отлично работают, когда эти представления вызовут setNeedsDisplay: YES. Если метр добавлен к представлению элемента CollectionView, он получает визуализацию, но теряет свои нарисованные части «старого уровня» и его углы/фон. Я думаю, это происходит потому, что элемент CollectionView также называется перерисованным (который имеет фоновое изображение), и все прошло. При этом некоторые детали изменяются (рисунок работает).

Есть ли способ предотвратить переделку самого предмета? Или, я не знаю, почему это не происходит в этих статических представлениях, потому что эти представления также имеют фоновые изображения, но не рисуют метр.

Есть ли какие-то трюки или что-то другое в CollectionView, чем в «нормальном» виде?

EDIT: После прочтения about isOpaque (MeteringView isOpaque = YES) означает, что он не должен вызывать родительские представления drawRect, если установлено yes. Хорошо, что работает для статических представлений, эти MeteringViews не называют parent drawRect, но те, что есть в CollectionView. Я не знаю, почему.

EDIT 2: Я дал этой теме еще одно название, потому что isOpaque = YES в MeteringView не останавливает вызов родительского drawRect в CollectionView, в обычном режиме он работает. Есть ли какие-то вещи, о которых нужно знать? Я должен остановить перерисовку элемента CollectionView, потому что это проблема.

Заранее спасибо ребята

Benjamin

ответ

0

Isopaque только намек на систему. Это не мешает другим представлениям рисовать их содержимое, это означает только то, что иногда можно пропускать другие представления, обновляя их содержимое.

Если ваш взгляд непрозрачен, он должен нарисовать себя как непрозрачный и полностью заполнить его границы.

+0

Чтобы рассказать немного больше о моей ситуации: у меня есть таймер, который получает уровни звука и устанавливает их в MeteringView, который затем рисует метр. MeteringView isOpaque. Но если MeteringView, который является подвидью CollectionViewItem View, он вызывает drawRect CollectionViewItem. Я знаю это, потому что NSLog в drawRect элемента запускается с таймером. И потому, что элемент Item View вызывается после самого Meter, он снова рисует фоновое изображение над метром, а Meter - всего лишь мгновение. Я не знаю, как это решить. – bennibeef

+0

Если MeteringView является подчиненным элементом ячейки, сначала будет вызываться drawRect ячейки, затем вызывается drawRect объекта MeteringView. –

+0

Я только что протестировал это, CollectionViewItem сначала вызывается, а затем подзаголовок Meterings. Ну, есть ли способ предотвратить это? Потому что я не хочу перерисовывать Cell/Item, я думаю, что это тоже ударит по производительности. Я просто хочу перерисовать код в MeteringView, но не весь Item/Cell – bennibeef