美文网首页
iOS 增大UIButton的响应区域

iOS 增大UIButton的响应区域

作者: 雄雄鹰 | 来源:发表于2018-03-09 14:54 被阅读0次

    新建category类目

    #import@interface UIButton (EnlargeTouchArea)

    - (void)setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) right bottom:(CGFloat) bottom left:(CGFloat) left;

    - (void)setEnlargeEdge:(CGFloat) size;

    @end

    #import "UIButton+EnlargeTouchArea.h"

    #import@implementation UIButton (EnlargeTouchArea)

    static char topNameKey;

    static char rightNameKey;

    static char bottomNameKey;

    static char leftNameKey;

    - (void)setEnlargeEdge:(CGFloat) size

    {

        objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

        objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

        objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

        objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

    }

    - (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;

        }

    }

    - (UIView*) hitTest:(CGPoint) point withEvent:(UIEvent*) event

    {

        CGRect rect = [self enlargedRect];

        if (CGRectEqualToRect(rect, self.bounds))

        {

            return [super hitTest:point withEvent:event];

        }

        return CGRectContainsPoint(rect, point) ? self : nil;

    }

    @end

    使用方法,下载链接

    1.[button setEnlargeEdge:20];

    2.[button setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10];

    相关文章

      网友评论

          本文标题:iOS 增大UIButton的响应区域

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