在实际开发中,有的时候 Button
因为 Frame
太小,导致点击范围也小,需要增大 Button
的点击范围,但是又不需要改变 Button
的 Frame
。
在 UIView 中有一个方法
// default returns YES if point is in bounds
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;
这个方法,当点击范围在这个view
中,返回YES
, 否则返回 NO
可以新建一个分类,新增加一个属性,记录需要扩大范围大小
@property (nonatomic, assign) CGFloat expandSize; /**< 需要扩大的范围大小 */
.m 文件的实现增加以下方法
- (void)setExpandSize:(CGFloat)expandSize {
objc_setAssociatedObject(self, @selector(setExpandSize:), @(expandSize), OBJC_ASSOCIATION_ASSIGN);
}
- (CGFloat)expandSize {
return [objc_getAssociatedObject(self, @selector(setExpandSize:)) floatValue];
}
- (CGRect)expandRect {
return CGRectMake(self.bounds.origin.x - self.expandSize,
self.bounds.origin.y - self.expandSize,
self.bounds.size.width + 2 * self.expandSize,
self.bounds.size.height + 2 * self.expandSize);
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
CGRect buttonRect = [self expandRect];
if (CGRectEqualToRect(buttonRect, self.bounds)) {
return [super pointInside:point
withEvent:event];
}
return CGRectContainsPoint(buttonRect, point);
}
这样就在不改变 Button
的 Frame
前提下,扩大了 Button
的点击范围。
网友评论