У меня возникла проблема с какао и ее иерархией перерисовывания.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
Чтобы рассказать немного больше о моей ситуации: у меня есть таймер, который получает уровни звука и устанавливает их в MeteringView, который затем рисует метр. MeteringView isOpaque. Но если MeteringView, который является подвидью CollectionViewItem View, он вызывает drawRect CollectionViewItem. Я знаю это, потому что NSLog в drawRect элемента запускается с таймером. И потому, что элемент Item View вызывается после самого Meter, он снова рисует фоновое изображение над метром, а Meter - всего лишь мгновение. Я не знаю, как это решить. – bennibeef
Если MeteringView является подчиненным элементом ячейки, сначала будет вызываться drawRect ячейки, затем вызывается drawRect объекта MeteringView. –
Я только что протестировал это, CollectionViewItem сначала вызывается, а затем подзаголовок Meterings. Ну, есть ли способ предотвратить это? Потому что я не хочу перерисовывать Cell/Item, я думаю, что это тоже ударит по производительности. Я просто хочу перерисовать код в MeteringView, но не весь Item/Cell – bennibeef