Pregunta

Estoy en el proceso de crear un programa de dibujo sencillo para iPhone.Por el momento, los eventos táctiles agregan su ubicación a una lista que está conectada con un montón de llamadas CGContextAddLineToPoint que se vuelven a dibujar en cada llamada a drawRect.

Tengo problemas de rendimiento con un número bastante bajo de líneas (aunque son transparentes), así que intenté dibujar todo en un CGLayer.Ahora, en lugar de dibujar cada línea en cada cuadro, dibuja cada línea solo una vez y dibuja CGLayer en la pantalla en cada cuadro.

        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);

Esto, en todo caso, es MÁS LENTO que lo que estaba haciendo antes.¿Estoy haciendo algo mal?¿Me vendría mejor dibujando en una UIImage o algo así?Gracias.

¿Fue útil?

Solución

Lo que deberías hacer es insertar un CALayer en una de sus vistas, actualizando la capa y luego llamando setNeedsDisplayInRect: con los límites del área que ha cambiado en la capa, lo que hace que se actualice.Si intenta actualizar toda la pantalla, será lento.

¿Estás utilizando instrumentos para descubrir qué partes son lentas?Recomiendo usarlo para aprender qué partes te están frenando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top