zoukankan      html  css  js  c++  java
  • hitTest和pointInside和CGRectContainsPoint

    很多app中TabBar中间会有个凸起超出部分,为了点击超出父视图但是还想让按钮响应

    //重写hitTest方法,去监听发布按钮的点击,目的是为了让凸出的部分点击也有反应
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

        //这一个判断是关键,不判断的话push到其他页面,点击发布按钮的位置也是会有反应的,这样就不好了
        //self.isHidden == NO 说明当前页面是有tabbar的,那么肯定是在导航控制器的根控制器页面
        //在导航控制器根控制器页面,那么我们就需要判断手指点击的位置是否在发布按钮身上
        //是的话让发布按钮自己处理点击事件,不是的话让系统去处理点击事件就可以了
        if (self.isHidden == NO) {

            //将当前tabbar的触摸点转换坐标系,转换到发布按钮的身上,生成一个新的点
            CGPoint newP = [self convertPoint:point toView:self.plusBtn];

            //判断如果这个新的点是在发布按钮身上,那么处理点击事件最合适的view就是发布按钮
            if ( [self.plusBtn pointInside:newP withEvent:event]) {
                return self.plusBtn;
            }else{//如果点不在发布按钮身上,直接让系统处理就可以了

                return [super hitTest:point withEvent:event];
            }
        }

        else {//tabbar隐藏了,那么说明已经push到其他的页面了,这个时候还是让系统去判断最合适的view处理就好了
            return [super hitTest:point withEvent:event];
        }
    }

    //返回YES,说明触摸点在当前视图内 返回NO,说明触摸点不在当前视图内
    //判断触摸点是否在特殊文字的rect上,如果是则处理事件,否则不处理,交由父控件Cell、再传递到祖先控件tableView处理

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

    //判断一个CGPoint 是否包含再另一个UIView的CGRect里面
                //传入一个rect和point 看这个point是否在这个rect中
                //点击textView的时候,获得点击点,看点击点是否在特殊字符中
                if (CGRectContainsPoint(rect, pt)) {
                  
                }

    }

  • 相关阅读:
    常用日期函数介绍
    常用数学函数介绍
    oracle 常用sql字符函数介绍
    centos6.5 相关命令
    Kettle5.4.0 java.lang.OutOfMemoryError
    oracle多表连接方式Hash Join Nested Loop Join Merge Join
    CONNECT_BY_ROOT
    设置Oracle PL/SQL时间显示格式NLS_TIMESTAMP_FORMAT
    INSTR代替NOT LIKE
    多表插入
  • 原文地址:https://www.cnblogs.com/xsiOS/p/5171385.html
Copyright © 2011-2022 走看看