当前位置: 首页 > news >正文

UITableView/UIScrollView 不能响应TouchBegin 的处理 及窥见 hitTest:withEvent:

重写touchBegin 方法是不行的,在UITableView/UIScrollView

解决方案 重写hitTest:withEvent:  在他们的子类中

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    
    static UIEvent *e = nil;
    
    if (e != nil && e == event) {
        e = nil;
        return [super hitTest:point withEvent:event];
    }
    
    e = event;
    
    if (event.type == UIEventTypeTouches) {
        NSSet *touches = [event touchesForView:self];
        UITouch *touch = [touches anyObject];
        if (touch.phase == UITouchPhaseBegan) {
            NSLog(@"Touches began");
        }else if(touch.phase == UITouchPhaseEnded){
            NSLog(@"Touches Ended");

        }else if(touch.phase == UITouchPhaseCancelled){
            NSLog(@"Touches Cancelled");

        }else if (touch.phase == UITouchPhaseMoved){
            NSLog(@"Touches Moved");

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

关于hitTest:withEvent: 

字面意思是撞击测试,当手指触摸到当前屏幕上活跃的 app 界面。ios 系统会将 当前触摸操作 打包,具体就是UIEvent 

屏幕上的每一次动作都是一个UITouch,多个UITouch  组成一次UIEvent.  UIEvent 表示一次事件。

传递给当前活跃的App keyWindow.正常情况下 hitTest 确定屏幕上众多View  中哪一发生了事件。

假如 当前屏幕布局如下。

假设一个单击事件发生在了View D里面,系统首先会从最顶层的View A开始寻找,发现事件是在View A或者其子类里面,那么接着从B和C找,发现事件是在C或者其子类里面,那么接着到C里面找,这时发现事件是在D里面,并且D已经没有子类了,那么hit-test view就是View D啦。

如果

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event  返回值 不为nil 则一值 查找view 的子view 重复调用hisTest 确定事件。

 

 

更多手势传递文章:http://ryantang.me/blog/2013/12/07/ios-event-dispatch-1/

http://blog.csdn.net/wzzvictory/article/details/9264335

参见:http://www.cnblogs.com/klaus/archive/2013/04/22/3036692.html

相关文章:

  • UDP,TCP之间的区别
  • springboot 系列教程六:springboot mybatis集成
  • windows添加开机启动项
  • 关于Docker文件系统
  • XP和Win 7双系统安装说明和注意事项
  • jQuery之getAll()和cleanData()
  • 利用pig分析cdn访问日志内指定时间段的url访问次数
  • 6本Python好书上新,来撩~
  • cursor:hand与cursor:pointer的区别介绍
  • 【AC自动机】AC自动机
  • Java 生成 exe 文件
  • 大数据分析工具如何摆脱样子工程?
  • 学习Android怎么在未来站稳脚跟
  • 预测《权游》角色生死,AI算法魔力何在?
  • R语言学习笔记:因子
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译] React v16.8: 含有Hooks的版本
  • 11111111
  • ECS应用管理最佳实践
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • GitUp, 你不可错过的秀外慧中的git工具
  • iOS 系统授权开发
  • JavaScript新鲜事·第5期
  • Less 日常用法
  • Python打包系统简单入门
  • React 快速上手 - 07 前端路由 react-router
  • Selenium实战教程系列(二)---元素定位
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue实战(四)登录/注册页的实现
  • windows下如何用phpstorm同步测试服务器
  • Xmanager 远程桌面 CentOS 7
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 机器学习中为什么要做归一化normalization
  • 简单易用的leetcode开发测试工具(npm)
  • 前端js -- this指向总结。
  • 浅谈web中前端模板引擎的使用
  • 容器服务kubernetes弹性伸缩高级用法
  • 山寨一个 Promise
  • 与 ConTeXt MkIV 官方文档的接驳
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #ifdef 的技巧用法
  • $ git push -u origin master 推送到远程库出错
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (NSDate) 时间 (time )比较
  • (Ruby)Ubuntu12.04安装Rails环境
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)计算机毕业设计高校学生选课系统
  • (力扣记录)235. 二叉搜索树的最近公共祖先