2011-12-28 15 views
8

enter image description herejak wypełnić kolor w białych przestrzeniach za pomocą zdarzenia dotykowego?

chcesz wypełnić wszystkie białe spacje z różnych kolorów z wykorzystaniem zdarzeń dotykowych

Teraz ja w stanie wypełnić okręgi zbieranie kolorów z próbnika ale jak wypełnić intigrated część z innym kolorem ......

-(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

Nie jest jasne, czego chcesz. Czy możesz wyjaśnić krok po kroku, gdzie użytkownik się dotknie, i zdjęcie pokazujące, które części powinny być kolorowe? –

+0

na powyższym obrazku, jeśli kliknę dowolną białą przestrzeń, którą powinienem pokolorować w pewnym kolorze –

+0

Zliczam 8 oddzielnych spacji na tym obrazku, w tym część poza wszystkimi okręgami. Ile liczą? –

Odpowiedz

1

Istnieją dwa zadania tutaj, pierwszy jest do wykrywania których obszar został dotknięty, drugi jest wypełnienie tego regionu. Oba wymagają obliczenia punktów przecięcia okręgu powyższego obrazu za pomocą trygonometrii i znajomości ich pozycji.

Prostym rozwiązaniem wykrywania obszaru dotykowego byłoby sprawdzenie, czy dotyk znajduje się w dowolnym z okręgów, można go łatwo obliczyć, obliczając odległość do punktu dotyku od środka koła, jeśli jest on mniejszy niż promień jest wewnątrz koła. Jeśli znajduje się w więcej niż jednym okręgu, wiesz, że należy on do tego regionu przecięcia. Jeśli nie ma w nim żadnych okręgów, ale element x znajduje się pomiędzy środkiem lewego koła i prawym kółkiem, musi znajdować się w obszarze pomiędzy wszystkimi okręgami. W przeciwnym razie punkt dotykowy musi znajdować się poza wszystkimi okręgami.

Aby wypełnić różne sekcje powyższego obrazu, można utworzyć ścieżki zawierające regiony, które należy wypełnić i wypełnić je CGContextFillPath. Coś w tym stylu:

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

Możesz powtórzyć to na tyle ścieżek, ile chcesz. Możesz obliczyć łuki ścieżki, które będą używane od punktów przecięcia i promieni okręgu.

Powiązane problemy