2013-06-14 2 views
0

Я изложил CGPath вот так.CGPath не узнает щелчок внутри него

- (void)drawRect:(CGRect)rect 
{ 
    UIImage *myImage = [UIImage imageNamed:@"mapBelgie.png"]; 
    CGRect imageRect = self.bounds; 
    [myImage drawInRect:imageRect]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGMutablePathRef pathLommel = CGPathCreateMutable(); 

    CGPathMoveToPoint(pathLommel, NULL,686,80); 
    CGPathMoveToPoint(pathLommel, NULL,729,76); 
    CGPathMoveToPoint(pathLommel, NULL,747,68); 
    CGPathMoveToPoint(pathLommel, NULL,773,94); 
    CGPathMoveToPoint(pathLommel, NULL,831,111); 
    CGPathMoveToPoint(pathLommel, NULL,788,220); 
    CGPathMoveToPoint(pathLommel, NULL,658,247); 
    CGPathMoveToPoint(pathLommel, NULL,679,182); 
    CGPathMoveToPoint(pathLommel, NULL, 637,176); 
    CGPathMoveToPoint(pathLommel, NULL,674,148); 
    CGPathMoveToPoint(pathLommel, NULL, 624,140); 
    CGPathMoveToPoint(pathLommel, NULL, 700,108); 
    CGPathMoveToPoint(pathLommel, NULL, 686,80); 

    CGPathCloseSubpath(pathLommel); 

    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 

    CGContextSetLineJoin(context, kCGLineJoinMiter); 
    CGContextSetLineWidth(context, 1.0f); 
    CGContextAddPath(context, pathLommel); 
    arrayPaths = [[NSMutableArray alloc]init]; 
    [arrayPaths addObject:CFBridgingRelease(pathLommel)]; 

    CGContextDrawPath(context, kCGPathFillStroke); 
} 

Теперь, когда я нажимаю на представление. Я хочу проверить, был ли этот клик внутри пути.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    CGPoint c = [[touches anyObject] locationInView: self]; 
    NSLog(@"point is X = %f and Y = %f",c.x,c.y); 
    struct CGPath *pat = (__bridge struct CGPath *)([arrayPaths objectAtIndex:0]); 
    CGPathRef strokedPath = CGPathCreateCopy(pat); 

    BOOL pointIsNearPath = CGPathContainsPoint(strokedPath, NULL, c, NO); 
    if (pointIsNearPath){ 
     NSLog(@"Clicked in the path"); 
     region = 0; 
    } 
    [self.delegationListener didPressRegion:region]; 
} 

Теперь странная вещь. Когда я нажимаю, я получаю этот журнал

2013-06-14 11:42:29.372 Architab[27742:c07] point is X = 703.000000 and Y = 94.000000 

То есть на 100% уверен в пути. Но я не регистрирую журнал "Clicked in the path". Может ли кто-нибудь помочь мне в этом?

спасибо!

+1

У вас есть только точки на вашем пути, нет линий. Так что внутри и снаружи нет. –

+0

@Filip Я использую ARC. Так может это проблема? – Steaphann

+0

http://oleb.net/blog/2012/02/cgpath-hit-testing/ – Abizern

ответ

0

Используйте этот

CGContextPathContainsPoint(context, point, mode) //the names of the parameters are explanatory use mode=kCGPathStroke; 

вызов функции внутри него сделать путь в петлю и вызвать вышеупомянутый метод на пути сначала сделать путь.

+0

мм все еще nog success – Steaphann

Смежные вопросы