2011-12-28 45 views
8

enter image description hereLàm thế nào để tô màu trong không gian màu trắng bằng cách sử dụng sự kiện cảm ứng?

muốn điền vào tất cả các không gian màu trắng với màu sắc khác nhau sử dụng cảm ứng sự kiện

Ngay bây giờ tôi có thể điền vào vòng tròn chọn màu sắc từ bảng chọn nhưng làm thế nào để lấp đầy phần intigrated với màu sắc khác nhau ......

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

Không rõ bạn muốn gì. Bạn có thể đưa ra một giải thích từng bước về nơi người dùng sẽ chạm vào, và một hình ảnh cho thấy những phần nào sẽ được tô màu? –

+0

trong hình trên nếu tôi nhấp vào bất kỳ khoảng trắng nào, nó sẽ được tô màu với một số màu –

+0

Tôi đếm 8 khoảng trống riêng biệt trong ảnh đó, bao gồm cả phần bên ngoài của tất cả các vòng tròn. Bạn đếm bao nhiêu? –

Trả lời

1

Có hai nhiệm vụ ở đây, trước tiên là để phát hiện vùng nào đã được chạm vào, thứ hai là điền vào khu vực đó. Cả hai yêu cầu bạn tính điểm giao nhau của hình ảnh trên bằng cách sử dụng lượng giác và biết vị trí của chúng.

Một giải pháp đơn giản để phát hiện vùng cảm ứng sẽ là kiểm tra xem chạm có nằm trong bất kỳ vòng kết nối nào hay không, điều này được tính toán dễ dàng bằng cách tính khoảng cách đến điểm tiếp xúc từ trung tâm vòng tròn. bán kính nó nằm trong vòng tròn. Nếu nó nằm trong nhiều vòng tròn, bạn biết nó thuộc về khu vực giao lộ đó. Nó nếu bên trong không có vòng tròn, nhưng thành phần x nằm giữa trung tâm của một vòng tròn bên trái và một vòng tròn bên phải, nó phải nằm trong vùng giữa tất cả các vòng tròn. Nếu không, điểm tiếp xúc phải nằm ngoài tất cả các vòng kết nối.

Để điền vào các phần khác nhau của hình ảnh trên, bạn có thể tạo đường dẫn chứa các khu vực bạn cần điền và điền chúng với CGContextFillPath. Một cái gì đó như thế này:

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

Bạn có thể lặp lại điều này cho bao nhiêu đường tùy ý. Bạn có thể tính toán đường cung để sử dụng từ điểm giao nhau và bán kính.

Các vấn đề liên quan