Frage

Ich bin gerade dabei, ein einfaches Zeichenprogramm für das iPhone zu erstellen.Im Moment fügen Berührungsereignisse ihren Standort einer Liste hinzu, die mit einer Reihe von CGContextAddLineToPoint-Aufrufen verbunden ist, die bei jedem Aufruf von drawRect neu gezeichnet werden.

Da ich bei einer relativ geringen Anzahl von Zeilen (sie sind jedoch transparent) auf Leistungsprobleme stoße, habe ich versucht, alles in einen CGLayer zu zeichnen.Anstatt nun jede Linie in jedem Frame zu zeichnen, zeichnet es jede Linie nur einmal und zeichnet den CGLayer in jedem Frame auf den Bildschirm.

        CGContextRef backgroundContext = CGLayerGetContext(pathBuffer);
        CGContextSetLineWidth(backgroundContext, 2.0);
        CGContextSetLineCap(backgroundContext, kCGLineCapButt);
        CGContextSetStrokeColorWithColor(backgroundContext, [pathColor CGColor]);

        if([[touchPoints objectAtIndex:0] continuesToNextPoint])
        {
            CGContextMoveToPoint(backgroundContext, [[touchPoints objectAtIndex:0] point].x, [[touchPoints objectAtIndex:0] point].y);
            CGContextAddLineToPoint(backgroundContext, [[touchPoints objectAtIndex:1] point].x, [[touchPoints objectAtIndex:1] point].y);
            CGContextStrokePath(backgroundContext);
        }

        //remove it from touchpoints
        [touchPoints removeObjectAtIndex:0];
    }

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawLayerAtPoint(context, CGPointMake(0, 0), pathBuffer);

Das ist, wenn überhaupt, LANGSAMER als das, was ich vorher gemacht habe.Mache ich etwas falsch?Wäre es besser, wenn ich in ein UIImage oder so etwas zeichne?Danke.

War es hilfreich?

Lösung

Was Sie tun sollten, ist das Einfügen eines CALayer in eine Ihrer Ansichten, aktualisieren Sie die Ebene und rufen Sie dann auf setNeedsDisplayInRect: mit den Grenzen des Bereichs, der sich auf dem Layer geändert hat, was zu einer Aktualisierung führt.Wenn Sie versuchen, den gesamten Bildschirm zu aktualisieren, wird es langsam sein.

Verwenden Sie Instrumente, um herauszufinden, welche Teile langsam sind?Ich empfehle, es zu verwenden, um herauszufinden, welche Teile Sie verlangsamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top