2009-05-03 11 views
0

Ich verwende derzeit CGContextDrawLayerInRect, um einen CGLayer in drawRect zu zeichnen. Dies wird oft genannt. Gibt es eine Möglichkeit, den Overhead zu verringern, indem nur der Teil des CGLayers gezeichnet wird, der anstelle des gesamten CGLayers in drawRect geändert wurde?Optimierung der CGLayer-Methode drawRect

-(void)drawRect:(CGRect)rect { 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
    CGContextDrawLayerInRect(currentContext, [self bounds], _backgroundLayer); 
} 
+0

Hier ist die Antwort: http://stackoverflow.com/questions/11207801/create-cgcontext-for-cglayer – Hao

Antwort

0

Der rect-Parameter beschreibt den Bereich, der neu gezeichnet werden muss. Anders als dies zu verwenden, um zu begrenzen, wie viel Sie neu streichen, nein. Wenn dedrect aufgerufen wird, haben Sie keine Ahnung, was das System mit Ihrer Ebene getan hat - zum Beispiel könnten Sie die gesamte Ansicht in einen neuen Kontext für eine Systemanimation vorrendern.

Sie sehen tatsächlich schlechte Leistung? Vielleicht kann Ihr Zeichnungscode auf andere Weise optimiert werden.

0

Das ist so gut wie möglich, denke ich. Wäre es möglich, setNeedsDisplay seltener aufzurufen, vielleicht? Wenn dies für Sie zu langsam ist, sollten Sie OpenGL verwenden!

0

Vielleicht versuchen Beseitigung -drawRect: vollständig. Zeichne in ein UIImageView oder ein CALayer und lass es damit umgehen.