2011-05-19 21 views
0

我有两个uiviews与一些形状奇特的pngs重叠。我想在每个uiview的顶部绘制一个看不见的形状,并检测是否挖掘了这些形状。否则,轻拍可以通过重叠看到。我认为我的代码将允许这种情况发生,但并未触及任何事情。在Obj-C(iPad)中绘制一个形状,看看我是否敲击它

-(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"); 
    } 
} 
+0

'floorBlueHolderView'是不可见的形状吗? – 2011-05-19 20:26:05

回答

1

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,@selector(viewBlueFloorplans:)不会叫-(void)viewBlueFloorplans:(id)sender meso:(UIGestureRecognizer *)recognizer

@selector(viewBlueFloorplans:)将调用-(void)viewBlueFloorplans:(UIGestureRecognizer *)recognizer

3,如果你不真正实施委托方法,然后[tapBlueRecognizer setDelegate:self];不应设置(以腾出一些计算)。

相关问题