美文网首页
2021-12-21 Category UIButton 增大点

2021-12-21 Category UIButton 增大点

作者: 两米长的大白菜 | 来源:发表于2021-12-22 15:11 被阅读0次

    增大点击范围

    使用

            [[UIButton new] setHitTestEdgeInsets:UIEdgeInsetsMake(-10, -10, -10, -10)];
    

    .h

    #import <UIKit/UIKit.h>
    
    @interface UIButton (HitTestArea)
    
    @property(nonatomic, assign) UIEdgeInsets hitTestEdgeInsets;
    
    @end
    

    .m

    #import "UIButton+HitTestArea.h"
    #import <objc/runtime.h>
    
    @implementation UIButton (HitTestArea)
    
    @dynamic hitTestEdgeInsets;
    
    static const NSString *KEY_HIT_TEST_EDGE_INSETS = @"HitTestEdgeInsets";
    
    - (void)setHitTestEdgeInsets:(UIEdgeInsets)hitTestEdgeInsets {
        NSValue *value = [NSValue value:&hitTestEdgeInsets withObjCType:@encode(UIEdgeInsets)];
        objc_setAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (UIEdgeInsets)hitTestEdgeInsets {
        NSValue *value = objc_getAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS);
        if (value) {
            UIEdgeInsets edgeInsets;
            [value getValue:&edgeInsets];
            return edgeInsets;
        } else {
            return UIEdgeInsetsZero;
        }
    }
    
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
        if (UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets, UIEdgeInsetsZero) || !self.enabled || self.hidden) {
            return [super pointInside:point withEvent:event];
        }
        
        CGRect relativeFrame = self.bounds;
        CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitTestEdgeInsets);
        
        return CGRectContainsPoint(hitFrame, point);
    }
    
    
    @end
    
    

    附:
    1.iOS触摸事件详解
    2.iOS UIButton改变区域或超出父视图响应

    相关文章

      网友评论

          本文标题:2021-12-21 Category UIButton 增大点

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