UIButton扩大默认点击区域

在iOS开发中,经常遇到按钮的点击区域太小,无法达到一个良好的交互效果,通过如下方式扩大点击区域:

@interface UIButton (TTExtensions)

@property (nonatomic, assign) UIEdgeInsets hitTestEdgeInsets;

@end
#import "UIButton+TTExtensions.h"
#import <objc/runtime.h>

@implementation UIButton (TTExtensions)

- (void)setHitTestEdgeInsets:(UIEdgeInsets)hitTestEdgeInsets
{
    NSValue *value = [NSValue valueWithUIEdgeInsets:hitTestEdgeInsets];
    objc_setAssociatedObject(self, @selector(hitTestEdgeInsets), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIEdgeInsets)hitTestEdgeInsets
{
    NSValue *value = objc_getAssociatedObject(self, @selector(hitTestEdgeInsets));
    if (value) {
        UIEdgeInsets edgeInset = [value UIEdgeInsetsValue];
        return edgeInset;
    }
    
    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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,637评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 文/Leon_PEK 原文链接://www.greatytc.com/p/8c2ff2b6a889 著作权...
    咚咚呛阅读 1,007评论 0 0
  • 《韩非子·说林上》:“圣人见微以知著,见端以知末,故见象箸而怖,知天下不足也。” 见微知著,拽半天,好不容易想到这...
    小宝说肾阅读 994评论 0 0
  • 垂柳依依望春步, 燕啼漆影划春帘, 樱雨绵绵聆春音。 蓦然回首, 春娘正在信步款款来。
    斯宝阅读 216评论 0 0