2011-12-28 13 views
8

enter image description hereटच इवेंट का उपयोग करके सफेद रिक्त स्थान में रंग कैसे भरें?

अभी मैं पिकर लेकिन से रंग चुनते समय कैसे अलग रंग के साथ intigrated भाग को भरने के लिए हलकों भरने के लिए कर स्पर्श इवेंट

अलग रंग का उपयोग कर के साथ सभी सफेद रिक्त स्थान को भरने के लिए चाहते हैं ......

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

यह स्पष्ट नहीं है कि आप क्या चाहते हैं। क्या आप एक चरण-दर-चरण स्पष्टीकरण दे सकते हैं कि उपयोगकर्ता कहां स्पर्श करेगा, और एक तस्वीर दिखाती है कि किन हिस्सों को रंगीन किया जाना चाहिए? उपरोक्त छवि में –

+0

यदि मैं किसी भी सफेद स्थान पर क्लिक करता हूं तो इसे कुछ रंग –

+0

के साथ रंगीन होना चाहिए। मैं उस चित्र में 8 अलग-अलग रिक्त स्थानों की गणना करता हूं, जिसमें सभी मंडलियों के बाहर भाग शामिल है। आप कितने गिनते हैं? –

उत्तर

1

यहां दो कार्य हैं, पहला यह पता लगाने के लिए है कि कौन सा क्षेत्र छुआ है, दूसरा उस क्षेत्र को भरना है। दोनों को आपको त्रिकोणमिति का उपयोग करके उपर्युक्त छवि के सर्कल चौराहे बिंदुओं की गणना करने और उनकी स्थिति जानने के लिए आवश्यक है।

स्पर्श क्षेत्र का पता लगाने का एक आसान समाधान यह जांचना होगा कि स्पर्श किसी भी सर्कल में निहित है या नहीं, यह आसानी से सर्किल केंद्र से स्पर्श बिंदु की दूरी की गणना करके गणना की जाती है, यदि यह कम से कम है त्रिज्या यह सर्कल के अंदर है। यदि यह एक से अधिक सर्कल के अंदर है, तो आप जानते हैं कि यह उस चौराहे क्षेत्र में है। यदि यह किसी भी सर्कल के अंदर नहीं है, लेकिन एक्स घटक बाएं सर्कल के केंद्र के बीच है और दाएं सर्कल में यह सभी मंडलियों के बीच क्षेत्र में होना चाहिए। अन्यथा स्पर्श बिंदु सभी मंडलियों के बाहर होना चाहिए।

उपरोक्त छवि के विभिन्न अनुभागों को भरने के लिए, आप उन क्षेत्रों को पथ बना सकते हैं जिन्हें आपको भरने और उन्हें CGContextFillPath से भरने के लिए आवश्यक हैं। कुछ ऐसा:

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

आप इसे जितना चाहें उतने पथों के लिए दोहरा सकते हैं। आप सर्कल चौराहे बिंदुओं और त्रिज्या से उपयोग करने के लिए पथ arcs की गणना कर सकते हैं।

संबंधित मुद्दे