2015-09-07 34 views
2

我确定这可能听起来像一个noob问题,但不知何故我卡住了,我需要帮助。考虑一下我的uibutton,它的背景图像有一个随意的可见边界,点击时会在按钮边界内触摸,而不是在独特的随意可见边界内,这完全有意义。但是,我想限制其触摸可见边界,而不是整个按钮。请随附随附的图片,说明我想在哪里(绿色检查)触摸以及不在哪里(红色十字)。提前谢谢你。限制UIButton的触摸到指定区域

enter image description here

+0

有点相关的帖子在这里:[Custom UIView touch area](http://stackoverflow.com/a/11277512/593709) –

+0

哇!这是病态的。谢谢。将尝试所有这些并回复你们。 –

回答

3

子类的UIButton并实现pointInside:withEvent方法。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/pointInside:withEvent

当系统想要知道事件给定的点是否在您的视图内时,将会调用此函数。如果是则返回YES,否则返回NO。

所有你需要的是一种决定点是否在你的UIButton点击区域的方式。当它返回YES时。

类似下面,它使用CGRects数组:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 

     // Only pass through of the point is in a specific area 
     BOOL ret=NO; 

     for (NSValue *value in self.passThroughAreas){ 
      CGRect rect=value.CGRectValue; 
      if (CGRectContainsPoint(rect, point)){ 
       // Its in one of our pass through areas. Let the events pass. 
       ret=YES; 
       break; 
      } 
     } 

    return ret; 
} 

您使用的矩形越来越你让他们更有针对性的区域越小即可。或者如果你最终会使用太多的东西,请使用更有趣的东西。

+0

我也在寻找这种方法。 –

+0

这样的事情:http://codedmi.com/questions/1899974/uibutton-hit-area-is-too-big? –

+1

那么链接显示如何使用'hitTest',你可以使用它来测试你的代码。然而,最重要的是实现'pointInside',因为这是用来决定一个视图或其子项是否可以处理该事件的方法。我会从允许的矩形开始。当它的工作,你可以尝试,更精细或使用更多的矩形,但较小的。 –