zoukankan      html  css  js  c++  java
  • iOS修改button的点击范围

    一般来说,按钮的点击范围是跟按钮的大小一样的。若按钮很小时,想增大点击区域,网上通用的方法有
    ①设置btn图片setImage,然后将btn的size设置的比图片大
    ②在btn上添加一个比较大的透明btn
    但以上有问题,若btn无图片就无法设置;添加透明btn则会改变view的层级。所以此时最好的方法是重写btn的

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

    方法。例如:

    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
        //当前btn大小
        CGRect btnBounds = self.bounds;
        //扩大点击区域,想缩小就将-10设为正值
        btnBounds = CGRectInset(btnBounds, -10, -10);
        
        //若点击的点在新的bounds里,就返回YES
        return CGRectContainsPoint(btnBounds, point);
    }

    对CGRectInset的解释
    CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)作用是将rect坐标按照(dx,dy)进行平移,对size进行如下变换
    新宽度 = 原宽度 - 2*dx;新高度 = 原高度 - 2*dy
    即dx,dy为正,则为缩小点击范围;dx,dy为负的话,则为扩大范围

    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    [self.view addSubview:view1];
    
    CGRect rect2 = CGRectInset(view1.frame, 10, 20);
    UIView *view2 = [[UIView alloc]initWithFrame:rect2];
    [self.view addSubview:view2];
    NSLog(@"%@",NSStringFromCGRect(rect2));

    结果为

    //{{110, 120}, {180, 160}}

    比较这两个view的frame,即可印证该结论。

  • 相关阅读:
    cocos2d JS-(JavaScript) 冒泡排序
    JavaScript实现字符串逆置的几种方法
    JavaScript 常用数组函数方法专题
    Cocos Creator 资源加载(笔记)
    cocos中FPS数值的含义
    Cocos Creator cc.Event点击触摸事件详解
    Cocos Creator 鼠标事件
    Cocos Creator 触摸点击事件
    Cocos Creator 键盘监听事件
    JavaScript 基础数组循环和迭代的几种方法
  • 原文地址:https://www.cnblogs.com/Apologize/p/6097035.html
Copyright © 2011-2022 走看看