在Obj-C(iPad)中画一个形状,看我是否点击了它

在Obj-C(iPad)中画一个形状,看我是否点击了它,ipad,uigesturerecognizer,tap,cgpath,Ipad,Uigesturerecognizer,Tap,Cgpath,我有两个视图,里面有一些形状奇怪的PNG。我想在每个uiview的顶部绘制一个不可见的形状,并检测我是否点击了这些形状。否则,通过重叠可以看到抽头。我以为我下面的代码会允许这种情况发生,但根本没有显示任何接触 -(void)drawRect:(CGRect)rect { quadrantOnePath = CGPathCreateMutable(); CGPathMoveToPoint(quadrantOnePath, NULL, 30, 214); CGPathAddL

我有两个视图,里面有一些形状奇怪的PNG。我想在每个uiview的顶部绘制一个不可见的形状,并检测我是否点击了这些形状。否则,通过重叠可以看到抽头。我以为我下面的代码会允许这种情况发生,但根本没有显示任何接触

-(void)drawRect:(CGRect)rect {
    quadrantOnePath = CGPathCreateMutable();
    CGPathMoveToPoint(quadrantOnePath, NULL, 30, 214);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 281, 47);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 493, 51);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 306, 376);
    CGPathCloseSubpath(quadrantOnePath);
}

//in viewdidload

UITapGestureRecognizer *tapBlueRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewBlueFloorplans:)];
[tapBlueRecognizer setNumberOfTapsRequired:1];
[tapBlueRecognizer setDelegate:self];
[floorBlueHolderview addGestureRecognizer:tapBlueRecognizer];


// viewbluefunction
-(void)viewBlueFloorplans:(id)sender meso:(UIGestureRecognizer *)recognizer {

   CGPoint factor = [recognizer locationOfTouch:0 inView:self.view];
   bool processTouch = CGPathContainsPoint(quadrantOnePath, NULL, factor, true);

   if(processTouch) {
    NSLog(@"tap_viewBLU");
   }
}

1,实际上不必绘制形状,就可以在其上使用CGPathContainsPoint。如果您知道形状正确,请将

quadrantOnePath = CGPathCreateMutable();
CGPathMoveToPoint(quadrantOnePath, NULL, 30, 214);
CGPathAddLineToPoint(quadrantOnePath, NULL, 281, 47);
CGPathAddLineToPoint(quadrantOnePath, NULL, 493, 51);
CGPathAddLineToPoint(quadrantOnePath, NULL, 306, 376);
CGPathCloseSubpath(quadrantOnePath);
如果形状不变,则输入“viewdidload”。(为防止内存泄漏,请不要忘记释放quadrantOnePath) 如果不想调试形状,请绘制它

2、
@选择器(viewBlueFloorplans:)
将不会调用
-(void)viewBlueFloorplans:(id)发送方meso:(uigestureRecognitizer*)识别器

@选择器(viewBlueFloorplans:)
将调用
-(void)viewBlueFloorplans:(UIgestureRecognitor*)识别器


3,如果您实际上没有实现委托方法,那么
[TapblueRecognitor setDelegate:self]以节省一些计算。

floorBlueHolderView
不可见的形状吗?