hitText方法和pointInside方法
2016-05-20 22:10
281 查看
hitText方法和pointInside方法
事件传递
hitText
方法
作用寻找最合适view处理事件
什么时候调用
当一个事件传递给一个控件的时候,控件就会调用这个方法
返回谁, 谁就是最合适view
hitTest的底层实现
- (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] == NO) return nil; // 点不在当前控件 // 3.从后往前遍历自己的子控件 int count = self.subviews.count; for (int i = count - 1; i >= 0; i--) { // 获取子控件 UIView *childView = self.subviews[i]; // 把当前坐标系上的点转换成子控件上的点 CGPoint childP = [self convertPoint:point toView:childView]; UIView *fitView = [childView hitTest:childP withEvent:event]; if (fitView) { return fitView; } } // 4.如果没有比自己合适的子控件,最合适的view就是自己 return self; }
pointInside
方法
// point参数:方法调用者坐标系上的点 [self pointInside:<#(CGPoint)#> withEvent:<#(nullable UIEvent *)#>]
作用:
判断当前这个点在不在方法调用者上
注意点:
点必须在方法调用者的坐标系上, 才会判断准确
相关文章推荐
- memcache的内存管理与删除机制
- 练习打字第十二天!
- 学习进度条11
- Callable接口实现多线程
- 将普通图片转化为字符画(Python)
- 整数数组按频率和大小排序
- Closeable和java7自动资源释放特性
- JAVA——System类
- 解决问题,链表finish
- win7 64位系统HP LaserJet P1008 / HP LaserJet P1008 P1007 驱动安装成功,但无法打印的原因
- AngularJS Filter过滤器详情
- 挺不错的一篇关于面向接口编程的文章
- 开源项目——小Q聊天机器人V1.4
- 数据类型和数据类型转换以及if语句的使用
- HTML5 初步了解
- opencv删除mat矩阵的多行或者多列
- MySQL入门——修改数据表3:删除指定表的指定的数据列(字段)
- SQL SERVER 数据的声明DECLRAR、赋值SET(SELECT)、输出PRINT
- 数据结构----希尔排序(最小增量排序)
- 选择自建商城和盈利模式。