Ich mache ein einfaches iPhone Zeichenprogramm als persönliches Nebenprojekt.Einfache iPhone Zeichnungs App mit Quartz 2D
Ich erfassen berührt Ereignis in einer Unterklasse UIView und rendern die tatsächlichen Sachen zu einem separaten CGLayer. Nach jedem Rendern rufe ich [self setNeedsLayout] auf und in der drawRect: Methode zeichne ich den CGLayer auf den Bildschirmkontext.
Das alles funktioniert gut und funktioniert gut zum Zeichnen von Rechtecken. Ich möchte jedoch nur einen einfachen "Freihand" -Modus wie viele andere iPhone-Anwendungen haben.
Die Art, wie ich dachte, dies zu tun war eine CGMutablePath, zu erstellen und einfach:
CGMutablePathRef path; -(void)touchBegan { path = CGMutablePathCreate(); } -(void)touchMoved { CGPathMoveToPoint(path,NULL,x,y); CGPathAddLineToPoint(path,NULL,x,y); } -(void)drawRect:(CGContextRef)context { CGContextBeginPath(context); CGContextAddPath(context,path); CGContextStrokePath(context); }
jedoch nach mehr als 1 Sekunde Zeichnung, Performance kläglich abbaut.
Ich würde nur jede Zeile in den Off-Screen-CGLayer zeichnen, wenn es nicht für variable Opazität wäre! Die Opazität von weniger als 100% bewirkt, dass Punkte auf dem Bildschirm verbleiben, der die Linien verbindet. Ich habe CGContextSetBlendingMode() angesehen, aber leider kann ich keine Antwort finden.
Kann mir jemand in die richtige Richtung zeigen? Andere iPhone Apps können dies mit sehr guter Effizienz tun.