IOS如何扩大按钮的点击范围

在不改变大小的情况下,扩大按钮点击范围的两种方式:

方式一:
新建一个类继承自UIButton,然后重写Button的
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;方法
然后在里面改变它的内边距:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    // 当前btn的大小
    CGRect btnBounds=self.bounds;
    // 扩大按钮的点击范围,改为负值
    btnBounds=CGRectInset(btnBounds, -10, -10);
    // 若点击的点在新的bounds里,就返回YES
    return CGRectContainsPoint(btnBounds, point);
}

Demo地址:https://github.com/Reminiscencexing/AboutButton
方式二:
给UIButton类添加类别 category,然后重写Button的
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;方法

#pragma mark- 利用 **runtime** 具体的设置内边距 
// 设置可点击范围到按钮上、右、下、左的距离
-(void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left
{
    objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC);

}
//-------------------------------------------------------------------------------------------------------------
-(CGRect)enlargedRect
{
    NSNumber *topEdge=objc_getAssociatedObject(self, &topNameKey);
    NSNumber *rightEdge=objc_getAssociatedObject(self, &rightNameKey);
    NSNumber *bottomEdge=objc_getAssociatedObject(self, &bottomNameKey);
    NSNumber *leftEdge=objc_getAssociatedObject(self, &leftNameKey);
    if(topEdge && rightEdge && bottomEdge && leftEdge){
        return CGRectMake(self.bounds.origin.x-leftEdge.floatValue,
                          self.bounds.origin.y-topEdge.floatValue,
                          self.bounds.size.width+leftEdge.floatValue+rightEdge.floatValue,
                          self.bounds.size.height+topEdge.floatValue+bottomEdge.floatValue);
    }else{
        return self.bounds;
    }
}
// 设置可点击范围到按钮上、右、下、左的距离
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    CGRect rect=[self enlargedRect];
    if(CGRectEqualToRect(rect, self.bounds))
    {
        return [super pointInside:point withEvent:event];
    }
    return CGRectContainsPoint(rect, point)?YES:NO;
}

Demo地址:https://github.com/Reminiscencexing/AboutButton2

你可能感兴趣的:(IOS如何扩大按钮的点击范围)