1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- //
- // UIButton+EnlargeTouchArea.m
- // wolfman
- //
- // Created by 张灿 on 2017/7/12.
- // Copyright © 2017年 shareSmile. All rights reserved.
- //
- #import "UIButton+EnlargeTouchArea.h"
- #import <objc/runtime.h>
- @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
|