zoukankan      html  css  js  c++  java
  • hitTest方法与PointInside方法

    04-hitTest方法与PointInside方法

    hitTest方法

    作用:寻找最适合的View
    参数:当前所指所在的点产生的事件
    返回值:返回谁, 谁就是最适合的View. 
    什么时候调用:只要这个事件,传递给子个控件时, 就会调用这个控件的hitTest方法 
    -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

    PointInside方法

    作用:判断point在不在方法调用者上
    point:必须是方法调用者的坐标系 
    什么时候调用:hitTest方法底层会调用这个方法,判断点在不在控件上. 
    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    return YES; 
    }

    hitTest方法底层实现

    作用:当一个事件传递给当前View的时候就会调用这个方法. 
    当前手指在屏幕上的点
    当前产生的事件
    -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    1.查看自己能不能接收事件
    if(self.userInteractionEnabled == NO || self.hidden == YES ||self.alpha <= 0.01){
    return nil; 
    }
    2.判断当前的点在不在自己身上.
    if(![self pointInside:point withEvent:event]){
        return nil; 
    }
        //查看自己是不是最适合的view 
        //从后往前遍历自己的子控制器.
    int count = (int)self.subviews.count; 
    for(inti = count -1; i >=0; i--) {
        //取出子控制器.
    UIView *childView = self.subviews[i];
        //要把当前的点转换成子控件上的坐标点. 
    CGPoint childP= [selfconvertPoint:point toView:childView];
    UIView *view = [childView hitTest:childP withEvent:event]; 
        //如果有值,直接返回,返回的就是最适合的View.
    if (view) { 
        return view;    
        } }
        //没有找到比自己更适合的View.自己就是最适合的View 
    return self;
    }
  • 相关阅读:
    MTD NANDFLASH驱动相关知识介绍
    Java 根据当前时间获取明天、当前周的周五、当前月的最后一天
    使用 Spring 进行单元测试
    Centos下MySQL主从同步配置
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    CentOS 7 配置静态IP
    mysql 配置 utf8 依然乱码
    rabbitMQ Connection timed out
    CentOS 7.0,启用iptables防火墙
    linux注销、关机、重启
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5037413.html
Copyright © 2011-2022 走看看