drawRect: wordt niet altijd aangeroepen na setNeedsDisplay: YES als de bovenliggende weergave een layer-back heeft

Ik heb een eenvoudige Cocoa-app met een aangepaste NSCollectionView die voorrang heeft op drawRect: om een ​​rode achtergrond te tekenen (ter illustratie).

Ik merkte dat op schijnbaar willekeurige tijden drawRect: niet zou worden aangeroepen hoewel ik setNeedsDisplay: YES aanroept. Andere keren werkte het en had de verzamelweergave een rode achtergrond.

Het kostte me een paar uur, maar toen merkte ik ten slotte op dat hoog in de weergavehiërarchie een van de bovenliggende weergaven een laaggesteunde weergave was (ik had "Core Animation Layer" aangevinkt in Interface Builder om voeg een schaduw toe aan een element).

Het veranderen van die bovenliggende weergave om geen gebruik te maken van layer-backing loste het probleem meteen op en drawRect: wordt dan altijd zoals verwacht aangeroepen.

Wat me in de war brengt is dat met layer-backing ingeschakeld op een bovenliggende weergave, drawRect: soms, maar niet altijd, zou worden aangeroepen.

Moet ik aannemen dat ik niet betrouwbaar in een subview drawRect: kan overschrijven als een bovenliggende weergave een layer-back-up heeft?

0
Bewerkt om "overschrijven" in "overschrijven" te veranderen.
toegevoegd de auteur NSResponder, de bron

1 antwoord

Bekijk de WWDC 2012-video over door lagen ondersteunde weergaven en lees de documentatie voor -layerContentsRedrawPolicy . Klinkt alsof je NSViewLayerContentsRedrawOnSetNeedsDisplay wilt.

1
toegevoegd