zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Java学习】01. Java基本介绍及环境搭建
    vue组件之间的传值
    检测上传的文件类型js实现方式
    正则表达式学习笔记
    Nuxt.js学习笔记
    Vue+typescript+vuex项目实践学习笔记
    项目依赖&开发依赖
    vuex学习笔记
    export与export default的区别
    ES6 数组去重方法
  • 原文地址:https://www.cnblogs.com/DamonTang/p/4066930.html
Copyright © 2011-2022 走看看