美文网首页
UIButton 点击响应范围扩展

UIButton 点击响应范围扩展

作者: focusHYD | 来源:发表于2019-04-22 11:24 被阅读0次

不多说直接上代码链接

https://github.com/HeYunDong/ExpandButton


#import "UIButton+LeeHitRect.h"

#import

static const char * kHitEdgeInsets = "hitEdgeInsets";

static const char* kHitScale      ="hitScale";

static const char* kHitWidthScale      ="hitWidthScale";

static const char* kHitHeightScale      ="hitHeightScale";

@implementationUIButton (LeeHitRect)

#pragma mark - set Method

-(void)setHitEdgeInsets:(UIEdgeInsets)hitEdgeInsets{

    NSValue *value = [NSValue value:&hitEdgeInsets withObjCType:@encode(UIEdgeInsets)];

    objc_setAssociatedObject(self,kHitEdgeInsets, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-(void)setHitScale:(CGFloat)hitScale{

    CGFloatwidth =self.bounds.size.width* hitScale;

    CGFloatheight =self.bounds.size.height* hitScale;

    self.hitEdgeInsets=UIEdgeInsetsMake(-height, -width,-height, -width);

    objc_setAssociatedObject(self, kHitScale, @(hitScale), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-(void)setHitWidthScale:(CGFloat)hitWidthScale{

    CGFloatwidth =self.bounds.size.width* hitWidthScale;

    CGFloat height = self.bounds.size.height ;

    self.hitEdgeInsets=UIEdgeInsetsMake(-height, -width,-height, -width);

    objc_setAssociatedObject(self, kHitWidthScale, @(hitWidthScale), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-(void)setHitHeightScale:(CGFloat)hitHeightScale{

    CGFloat width = self.bounds.size.width;

    CGFloatheight =self.bounds.size.height* hitHeightScale ;

    self.hitEdgeInsets=UIEdgeInsetsMake(-height, -width,-height, -width);

    objc_setAssociatedObject(self, kHitHeightScale, @(hitHeightScale), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

#pragma mark - get Method

-(UIEdgeInsets)hitEdgeInsets{

    NSValue *value = objc_getAssociatedObject(self, kHitEdgeInsets);

    UIEdgeInsetsedgeInsets;

    [valuegetValue:&edgeInsets];

    returnvalue ? edgeInsets:UIEdgeInsetsZero;

}

-(CGFloat)hitScale{

    return [objc_getAssociatedObject(self, kHitScale) floatValue];

}

-(CGFloat)hitWidthScale{

    return [objc_getAssociatedObject(self, kHitWidthScale) floatValue];

}

-(CGFloat)hitHeightScale{

    return [objc_getAssociatedObject(self, kHitHeightScale) floatValue];

}

#pragma mark - override super method

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

    //如果 button 边界值无变化  失效 隐藏 或者透明 直接返回

    if(UIEdgeInsetsEqualToEdgeInsets(self.hitEdgeInsets, UIEdgeInsetsZero) || !self.enabled || self.hidden || self.alpha == 0 ) {

        return [super pointInside:point withEvent:event];

    }else{

        CGRectrelativeFrame =self.bounds;

        CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitEdgeInsets);

        returnCGRectContainsPoint(hitFrame, point);

    }

}

@end

相关文章

网友评论

      本文标题:UIButton 点击响应范围扩展

      本文链接:https://www.haomeiwen.com/subject/wpfygqtx.html