Pregunta

Estoy tratando de hacer una aplicación para dibujar formas en la pantalla al tocarla.

Puedo dibujar una línea desde un punto a otra- pero borra en cada nuevo sorteo.

Aquí está mi código:

CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
    //[self addSubview:noteView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    location = [touch locationInView:touch.view];
    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    [[UIColor blueColor] set];
    CGContextSetLineWidth(context,10);
    drawAtPoint.x =location.x;
    drawAtPoint.y =location.y;
    CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
    CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
    CGContextStrokePath(context);

    lastPoint.x =location.x;
    lastPoint.y =location.y;
}

Agradecemos su ayuda -

Nir.

¿Fue útil?

Solución

A medida que han descubierto, -drawRect es donde se muestra el contenido de una vista. Usted sólo 'ver' en la pantalla lo que se dibuja aquí.

Esto es mucho más bajo que el nivel de algo como Flash en la que podría añadir un clip de película que contiene una línea para el escenario y un tiempo después agregar otro clip de película que contiene una línea para la etapa y ahora se ve - dos líneas!

Usted tendrá que hacer algún trabajo y prdobably configurar algo así ..

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [[event allTouches] anyObject]; 
    location = [touch locationInView:touch.view]; 

    [self addNewLineFrom:lastPoint to:location];

    lastPoint = location;

    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)]; 
}

- (void)drawRect:(CGRect)rect {

    context = UIGraphicsGetCurrentContext();

    for( Line *eachLine in lineArray )
        [eachLine drawInContext:context];

}

Creo que se puede ver la forma de carne por esto a lo que necesita.

Otra manera de abordar esto es utilizar CALayers. Usando este método usted no dibujar dentro de - - drawRect (void) a todos - que agregar y quitar capas, dibuja lo que te gusta dentro de ellos, y la vista se encargará de componer juntos y dibujar en la pantalla, según sea necesario. Probablemente más de lo que busca.

Otros consejos

Cada vez que se llama drawRect, se empieza con una pizarra en blanco. Si no seguimiento de todo lo que ha dibujado antes con el fin de dibujar de nuevo, entonces termina único dibujo el último golpe de su dedo, y no cualquiera de los anteriores. Usted tendrá que mantener un registro de todos sus golpes de los dedos con el fin de que vuelvan a dibujar cada vez que se llama drawRect.

En lugar de volver a dibujar cada línea, se puede dibujar en una imagen y luego simplemente mostrar la imagen en su método de drawRect:. La imagen se acumulará las líneas para usted. Por supuesto, este método hace que deshacer más difícil de implementar.

En la Guía de programación de aplicaciones iPhone :

  

Utilice la UIGraphicsBeginImageContext   función para crear una nueva imagen basada   contexto gráfico. Después de la creación de este   contexto, se puede dibujar su imagen   contenidos en ella y luego usar el   UIGraphicsGetImageFromCurrentImageContext   la función de generar una imagen basada en   lo que dibujó. (Si lo desea, puede   incluso seguir dibujando y generar   imágenes adicionales.) Cuando haya terminado   la creación de imágenes, utilice el   UIGraphicsEndImageContext función de   cerrar el contexto gráfico. Si tu   preferir el uso de núcleo de gráficos, se puede   utilizar la función CGBitmapContextCreate   para crear un contexto gráfico de mapa de bits   y extraer el contenido de su imagen en ella.   Cuando termine de dibujar, utilizar el   CGBitmapContextCreateImage función de   crear un mapa de bits de la CGImageRef   contexto. Puede dibujar el Núcleo   imagen de gráficos directamente o utilizar esto   para inicializar un objeto UIImage.

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