• 如何增加button的点击范围


    写一个UIButton的分类

    #import <UIKit/UIKit.h>

     

    @interface UIButton (EnlargeEdge)

    - (void)setEnlargeEdge:(CGFloat) size;

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

    @end

    --------------下面是.m文件-------------------------

     #import <objc/runtime.h>

    #import "UIButton+EnlargeEdge.h"

     

    @implementation UIButton (EnlargeEdge)

    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;

        }

    }

    - (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;

    }

     

    /*

     - (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

     

     

    使用:  

    [self.ViewButton setEnlargeEdgeWithTop:0 right:50 bottom:50 left:50];

     

  • 相关阅读:
    python--将jenkins配置的任务导出到Excel
    python--终端工具之subprocess
    jquery-触底加载无限滚动
    python-比较字典value的最大值
    Linux-查看cpu核数和个数、查看内存的命令
    python读取本地正在运行的docker容器
    关于get 和post 方法的比较
    git相关的一篇不错的文章
    Java 函数调用是传值还是传引用? 从字节码角度来看看!
    Unity3D移动平台动态读取外部文件全解析
  • 原文地址:https://www.cnblogs.com/dashengios/p/10513285.html
Copyright © 2020-2023  润新知