pod install
。#import <BKHitSlop/BKHitSlop.h>
添加到源文件中(或者添加到前缀头文件中,如果您想在项目中任何地方访问它)。myButton.bk_hitSlop = UIEdgeInsetsMake(-50, -50, -50, -50);
- 或者您的首选UIEdgeInsets值。负值将被忽略。Q:这是如何工作的?
A:很简单!UIView有一个方法-pointInside:withEvent:
,它决定事件点(可能是触摸点)是否位于自身内部。当您触摸屏幕时,UIView层次结构会查询以确定响应该触摸的“最佳”视图。BKHitSlop将其实现替换为我们自己的。这是(主要是)安全的。
当您设置hit slop时,首先,我们会检查点是否根据原始实现被认为是视图内部 - 如果是,我们就短路并返回YES。否则,视图的边界会通过UIEdgeInsets值进行内缩。
附带说明:这就是为什么内缩的组件在负值时不具备任何效果。请注意,负内缩是往外的,而不是向内的。
不管怎样,一旦我们做了这些来确定要测试的新矩形,我们就使用CGRectContainsPoint
来看点是否在这个矩形内。