Я изложил 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"
. Может ли кто-нибудь помочь мне в этом?
спасибо!
У вас есть только точки на вашем пути, нет линий. Так что внутри и снаружи нет. –
@Filip Я использую ARC. Так может это проблема? – Steaphann
http://oleb.net/blog/2012/02/cgpath-hit-testing/ – Abizern