2011-12-28 12 views
8

enter image description herecómo llenar el color en espacios en blanco usando el evento táctil?

quieren llenar todos los espacios en blanco con color diferente utilizando eventos de toque

Ahora mismo capaz de llenar los círculos de colores de la cosecha de selector pero la forma de llenar la parte intigrated con un color diferente ......

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UIColor *cl=[UIColor clearColor]; 
    UITouch *tuch=[touches anyObject]; 
    if ([clr isEqualToString:@"Red"]) { 
     cl=[UIColor redColor]; 
    } 
    else if ([clr isEqualToString:@"Blue"]) { 
     cl=[UIColor blueColor] ; 
    } 
    else if ([clr isEqualToString:@"Green"]) { 
     cl=[UIColor greenColor]; 
    } 


    CGPoint p = [tuch locationInView:self]; 
    float xsq1=p.x -50; 
    xsq1=xsq1*xsq1; 
    float ysq1=p.y-110; 
    ysq1=ysq1*ysq1; 
    float h1 = ABS(sqrt(xsq1 + ysq1)); 

    float xsq2=p.x -100; 
    xsq2=xsq2*xsq2; 
    float ysq2=p.y-110; 
    ysq2=ysq2*ysq2; 
    float h2 = ABS(sqrt(xsq2 + ysq2)); 

    float xsq3=p.x -50; 
    xsq3=xsq3*xsq3; 
    float ysq3=p.y-190; 
    ysq3=ysq3*ysq3; 
    float h3 = ABS(sqrt(xsq3 + ysq3)); 

    if (h1<=40) { 
     NSLog(@"touches inside of first circle"); 
     CGContextSetFillColorWithColor(context, cl.CGColor); 
     CGRect cir1 = CGRectMake(10,266,80,80); 
     CGContextFillEllipseInRect(context, cir1); 
     [self setNeedsDisplayInRect:cir1]; 
    } 
    else if (h2<=40) { 
     NSLog(@"touches inside of second circle"); 
     CGContextSetFillColorWithColor(context, cl.CGColor); 
     CGRect cir2 = CGRectMake(60,266,80,80); 
     CGContextFillEllipseInRect(context, cir2); 
     [self setNeedsDisplayInRect:cir2]; 
    } 
} 
+0

No está claro lo que quieres. ¿Puedes dar una explicación paso a paso de dónde tocaría el usuario y una imagen que muestre qué partes deberían ser coloreadas? –

+0

en la imagen de arriba si hago clic en cualquier espacio en blanco, debe estar coloreado con un color –

+0

Cuento 8 espacios separados en esa imagen, incluida la parte externa de todos los círculos. ¿Cuántos cuentas? –

Respuesta

1

Aquí hay dos tareas, la primera es detectar qué región se ha tocado, la segunda es llenar esa región. Ambos requieren que calcules los puntos de intersección del círculo de la imagen de arriba usando la trigonometría, y que conozcas sus posiciones.

Una solución simple para la detección de la región táctil sería comprobar si el toque está contenido en cualquiera de los círculos, esto se calcula fácilmente calculando la distancia al punto de contacto del centro de círculos, si es menor que radio está dentro del círculo. Si está dentro de más de un círculo, usted sabe que pertenece a esa región de intersección. Si está dentro de ningún círculo, pero el componente x está entre el centro de un círculo izquierdo y el círculo derecho, debe estar en la región entre todos los círculos. De lo contrario, el punto de contacto debe estar fuera de todos los círculos.

Para completar las diversas secciones de la imagen anterior, puede crear rutas que contengan las regiones que necesita rellenar y completarlas con CGContextFillPath. Algo como esto:

// draw a path to contain the fill region 
CGContextBeginPath(ctx); 
CGContextMoveToPoint(ctx, startx, starty); 
CGContextAddArcToPoint(ctx, ...); 

// lots of other CGContextAddArcToPoint or AddLineToPoint method calls here to define the clip region 

// close the clip path 
CGContextClosePath(ctx); 

// now you can fill the region 
CGContextFillPath(ctx); 

Puede repetir esto para todos los caminos que desee. Puede calcular los arcos de ruta a usar desde los puntos de intersección del círculo y los radios.

Cuestiones relacionadas