iOS中事件传递的那点事情

2017-09-14  本文已影响27人  奋斗的老王

一> 基础概述

1> ios当中常用的事件分为三种:

2> 什么是响应者对象:

3> 为什么说继承了UIResponder就能够处理事件?

4> 如何监听UIView的触摸事件?

二> UITouch对象

1> UITouch对象概述

2> UITouch的作用

3> UITouch对象属性

4> UITouch对象方法

三> UIEvent对象

1> UIEvent对象概述

2> UIEvent对象属性

3> UIEvent对象方法

事件的产生和传递

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

    //1.判断自己能否接收事件
    if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {
        return nil;
    }
    //2.判断当前点在不在当前View.
    if (![self pointInside:point withEvent:event]) {
        return nil;
    }
    //3.从后往前遍历自己的子控件.让子控件重复前两步操作,(把事件传递给,让子控件调用hitTest)
    int count = (int)self.subviews.count;
    for (int i = count - 1; i >= 0; i--) {
        //取出每一个子控件
        UIView *chileV =  self.subviews[i];
        //把当前的点转换成子控件从标系上的点.
        CGPoint childP = [self convertPoint:point toView:chileV];
        UIView *fitView = [chileV hitTest:childP withEvent:event];
        //判断有没有找到最适合的View
        if(fitView){
            return fitView;
        }
    }
    
    //4.没有找到比它自己更适合的View.那么它自己就是最适合的View
    return self;
}

触摸事件处理的详细过程

  1. 用户点击屏幕后产生的一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件

  2. 找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理
    touchesBegan…
    touchesMoved…
    touchedEnded…

  3. 这些touches方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理

四> 示例代码

一) UIView的拖拽
上一篇 下一篇

猜你喜欢

热点阅读