zoukankan      html  css  js  c++  java
  • 如何扩大按钮点击范围 iOS

    1.创建一个UIButton的分类 

    #import "UIButton+TJHitRect.h"

    2.引入头文件

    #import <objc/runtime.h>

    3.给分类加属性

    /**
     自定义响应边界 UIEdgeInsetsMake(-3, -4, -5, -6). 表示扩大
     例如: self.btn.hitEdgeInsets = UIEdgeInsetsMake(-3, -4, -5, -6);
     */
    @property(nonatomic, assign) UIEdgeInsets hitEdgeInsets;

    关联对象

    static const char * kHitEdgeInsets = "hitEdgeInsets";

    重写set方法

    #pragma mark - set Method
    -(void)setHitEdgeInsets:(UIEdgeInsets)hitEdgeInsets{
        NSValue *value = [NSValue value:&hitEdgeInsets withObjCType:@encode(UIEdgeInsets)];
        objc_setAssociatedObject(self,kHitEdgeInsets, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }

    重写get方法

    #pragma mark - get Method
    -(UIEdgeInsets)hitEdgeInsets{
        NSValue *value = objc_getAssociatedObject(self, kHitEdgeInsets);
        UIEdgeInsets edgeInsets;
        [value getValue:&edgeInsets];
        return value ? edgeInsets:UIEdgeInsetsZero;
    }

    4.重写pointInside方法,如果button边界值无变化、不可点击、隐藏或者透明,说明没扩大按钮点击区域,继续走之前的方法。如果触摸点在UIEdgeInsets设置边缘边距后的范围内就说明点击了按钮。

    #pragma mark - override super method
    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
        //如果 button 边界值无变化  失效 隐藏 或者透明 直接返回
        if(UIEdgeInsetsEqualToEdgeInsets(self.hitEdgeInsets, UIEdgeInsetsZero) || !self.enabled || self.hidden || self.alpha == 0 ) {
            return [super pointInside:point withEvent:event];
        }else{
            CGRect relativeFrame = self.bounds;
            CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitEdgeInsets);
            return CGRectContainsPoint(hitFrame, point);
        }
    }

    5.调用方式

    self.closeBtn.hitEdgeInsets=UIEdgeInsetsMake(-10, -10, -10, -10);
    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理
    文件下载-SpringMVC中測试
    Redhat 6.3中syslog信息丢失
    HDU2586 How far away ?(LCA模板题)
    android开机启动应用和服务
    swift 3.0基本数据语法
    swift 获取UI上某点点颜色
    Hello_IOS ios开发transform属性
    CGAffineTransformMakeTranslation和CGAffineTransform
    iOS 原生地图(MapKit、MKMapView)轨迹渐变
  • 原文地址:https://www.cnblogs.com/huangzs/p/14499962.html
Copyright © 2011-2022 走看看