Leistung beim häufigsten Zeichnen von CGPathsIOS

Programmierung für iOS
Anonymous
 Leistung beim häufigsten Zeichnen von CGPaths

Post by Anonymous »

Ich arbeite an einer iOS-App, die Daten als Zeilengraph visualisiert. Das Diagramm wird als CGPath in einem Vollbild-benutzerdefinierten UIView gezeichnet und enthält höchstens 320 Datenpunkte. Die Daten werden häufig aktualisiert und das Diagramm muss entsprechend neu gezeichnet werden - eine Aktualisierungsrate von 10 /s wäre schön. Es scheint jedoch, dass mein Ansatz viel CPU -Zeit in Anspruch nimmt. Das Erfrischen des Diagramms mit 320 Segmenten nach 10-mal pro Sekunde in 45% CPU-Last für den Prozess auf einem iPhone 4s. bereit. N hält die Anzahl der Punkte und Punkte ein CGPoint* -Vektor mit den zu zeichnener Koordinaten.

Code: Select all

- (void)drawRect:(CGRect)rect {

CGContextRef context = UIGraphicsGetCurrentContext();

// set attributes
CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor);
CGContextSetLineWidth(context, 1.f);

// create path
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddLines(path, NULL, points, N+1);

// stroke path
CGContextAddPath(context, path);
CGContextStrokePath(context);

// clean up
CGPathRelease(path);
}
< /code>

Ich habe versucht, den Pfad zuerst zu einem Offline -CGContext zu rendern, bevor ich ihn wie hier vorgeschlagen in die aktuelle Ebene hinzufügte, jedoch ohne positives Ergebnis. Ich habe auch direkt mit einem Ansatz zum Calayer herumgespielt, aber das hat auch keinen Unterschied gemacht. Oder funktioniert das Rendering einfach mehr für die CPU, die ich erkenne? Würde OpenGL einen Sinn/Unterschied machen? Dieser Beitrag hier gibt eine nette Erklärung, warum das nicht geholfen hat. Optimieren cgContextSetMenterLimit 
et al. Auch brachte auch keine große Erleichterung. < /p>

Update Nr. 2: < /strong> Ich habe schließlich auf OpenGL umgestellt. Es war eine steile und frustrierende Lernkurve, aber der Leistungsschub ist einfach unglaublich. Die Anti-Aliasing-Algorithmen von Corgraphics leisten jedoch einen schöneren Job als das, was mit 4x-Multisampling in OpenGL erreicht werden kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post