您的位置:首页 > 其它

扩大Button按钮的点击区域

2017-05-13 18:11 330 查看
//

//  UIButton+RM.h

//  ProjectManageEx

//

//  Created by mac on 16/7/31.

//  Copyright © 2016年 zhangjian01. All rights
reserved.

//

#import

@interface UIButton (RM)

@property (nonatomic, assign)CGFloat enlargedEdge;

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

@end

//

//  UIButton+RM.m

//  ProjectManageEx

//

//  Created by mac on 16/7/31.

//  Copyright © 2016年 zhangjian01. All rights
reserved.

//

#import "UIButton+RM.h"

@implementation UIButton (RM)

static char  topEdgeKey;

static char  leftEdgeKey;

static char  bottomEdgeKey;

static char  rightEdgeKey;

- (void)setEnlargedEdge:(CGFloat)enlargedEdge{

   

    [self
setEnlargedEdgeWithTop:enlargedEdge left:enlargedEdge
bottom:enlargedEdge right:enlargedEdge];

   

}

- (CGFloat)enlargedEdge{

    return
[(NSNumber *)objc_getAssociatedObject(self,
&topEdgeKey)floatValue];

}

- (void)setEnlargedEdgeWithTop:(CGFloat)top left:(CGFloat)left
bottom:(CGFloat)bottom right:(CGFloat)right{

   

   
objc_setAssociatedObject(self, &topEdgeKey, [NSNumber
numberWithFloat:top], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

   
objc_setAssociatedObject(self, &leftEdgeKey, [NSNumber
numberWithFloat:left], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

   
objc_setAssociatedObject(self, &bottomEdgeKey, [NSNumber
numberWithFloat:bottom], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

   
objc_setAssociatedObject(self, &rightEdgeKey, [NSNumber
numberWithFloat:right], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (CGRect)enlargedRect{

    NSNumber
*topEdge = objc_getAssociatedObject(self, &topEdgeKey);

    NSNumber
*leftEdge = objc_getAssociatedObject(self, &leftEdgeKey);

    NSNumber
*bottomEdge = objc_getAssociatedObject(self,
&bottomEdgeKey);

    NSNumber
*rightEdge = objc_getAssociatedObject(self,
&rightEdgeKey);

   

    if (topEdge
&& leftEdge && bottomEdge && rightEdge)
{

       

       
CGRect enlargedRect = CGRectMake(self.bounds.origin.x -
leftEdge.floatValue, self.bounds.origin.y - topEdge.floatValue,
self.width + leftEdge.floatValue + rightEdge.floatValue,
self.height + topEdge.floatValue + bottomEdge.floatValue);

       
return enlargedRect;

    }else{

       

       
return self.bounds;

    }

}

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

   

    if
(self.alpha <= 0.01 || !self.userInteractionEnabled ||
self.hidden) {

       
return nil;

    }

    CGRect
enlargedRect = [self enlargedRect];

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

   

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: