zoukankan      html  css  js  c++  java
  • 扩大按钮 btn 响应区域

    方法一:类别

    #import <UIKit/UIKit.h>

    #import <objc/runtime.h>

    @interface UIButton (EnlargeEdge)

     

    - (void)XSsetEnlargeEdge:(CGFloat) size;

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

     

    @end

     

    #import "UIButton+EnlargeEdge.h"

     

    @implementation UIButton (EnlargeEdge)

    static char topNameKey;

    static char rightNameKey;

    static char bottomNameKey;

    static char leftNameKey;

     

    - (void)XSsetEnlargeEdge:(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)XSsetEnlargeEdgeWithTop:(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;

        }

    }

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

    {

        CGRect rect = [self enlargedRect];

        if (CGRectEqualToRect(rect, self.bounds))

        {

            return [super pointInside:point withEvent:event];

        }

        return CGRectContainsPoint(rect, point) ? YES : NO;

    }

    @end

     

     

     

     

     

     

     

    方法二:

     

    第二种:直接创建一个UIButton类,然后复写pointInside方法

    使用时继承于此类即可

    .h文件

     

    [objc] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #import <UIKit/UIKit.h>  
    2.   
    3. @interface BiggerClickAreaButton : UIButton  
    4.   
    5. @end  

    .m文件

     

    [objc] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #import "BiggerClickAreaButton.h"  
    2.   
    3. @implementation BiggerClickAreaButton  
    4.   
    5. - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event  
    6. {  
    7.     CGRect bounds = self.bounds;  
    8.     //若原热区小于44x44,则放大热区,否则保持原大小不变  
    9.     CGFloat widthDelta = MAX(44.0 - bounds.size.width, 0);  
    10.     CGFloat heightDelta = MAX(44.0 - bounds.size.height, 0);  
    11.     bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);  
    12.     return CGRectContainsPoint(bounds, point);  
    13. }  
    14.   
    15.   
    16. @end  

    使用时直接继承创建即可

     

     

  • 相关阅读:
    使用“.yml”文件缩进需要注意的问题
    ubuntu忘记用户密码解决方法
    springboot整合mybatis使用xml映射文件和使用注解两种方式的切换
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-12
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-11
    2016猿辅导初中数学竞赛训练营作业题解答-14
    腾讯课堂目标2017初中数学联赛集训队作业题解答-11
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-10
    2016猿辅导初中数学竞赛训练营作业题解答-13
    腾讯课堂目标2017初中数学联赛集训队作业题解答-10
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6383483.html
Copyright © 2011-2022 走看看