【问题标题】:Restricting UIButton's touch to assigned area限制 UIButton 对指定区域的触摸
【发布时间】:2015-09-07 10:55:21
【问题描述】:

我确定这听起来像是一个菜鸟问题,但不知何故我卡住了,我需要帮助。考虑我的 uibutton,它的背景图像有一个随意可见的边界,当点击时在按钮边界内触摸,而不是仅仅在随意可见的边界内,这完全有道理。但是,我想将其触摸限制在可见边界而不是整个按钮上。请在随附的图片中找到我想要触摸的位置(绿色检查)和不想要触摸的位置(红十字)。提前感谢您。

【问题讨论】:

  • 这里有点相关的帖子:Custom UIView touch area
  • 哇!那是病态。谢谢。将尝试所有这些并回复你们。

标签: ios objective-c swift uibutton swift2


【解决方案1】:

继承 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;
}

您使用的矩形越多,越小,您的区域就越有针对性。或者,如果您最终会使用太多,请使用更高级的东西。

【讨论】:

  • 我也在找这个方法。
  • 该链接显示了如何使用hitTest,您可以使用它来测试您的代码。然而主要的是实现pointInside,因为这是用于决定视图或其子视图是否可以处理事件的方法。我会从你允许的矩形开始。当它工作时,您可以尝试更精细或使用更多矩形但更小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2016-01-12
  • 2013-06-26
  • 1970-01-01
相关资源
最近更新 更多