美文网首页
app生命周期、控制器生命周期和事件传递、响应

app生命周期、控制器生命周期和事件传递、响应

作者: boy丿log | 来源:发表于2019-06-12 18:56 被阅读0次

生命周期

app生命周期

app生命周期

控制器生命周期

控制器生命周期

事件

touch事件和手势

触摸事件首先传递到手势上,如果手势识别成功,就会取消事件的继续传递,否则,事件还是会被响应链处理。具体地,系统维持了与响应链关联的所有手势,事件首先发给这些手势,然后再发给响应链。
让手势向下传递需要实现以下方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  
{  
     // 若为UITableViewCellContentView(即点击了tableViewCell),
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {  
    // cell 不需要响应 父视图的手势,保证didselect 可以正常
        return NO;  
    }  
    //默认都需要响应
    return  YES;  
}

传递链

接收到触摸事件后,会从UIApplication->widow->view去寻找最合适的view,

  1. 首先判断主窗口(keyWindow)自己是否能接受触摸事件
  2. 判断触摸点是否在自己身上
  3. 子控件数组中从后往前遍历子控件,重复前面的两个步骤(所谓从后往前遍历子控件,就是首先查找子控件数组中最后一个元素,然后执行1、2步骤)
  4. 如果没有符合条件的子控件,那么就认为自己最合适处理这个事件,也就是自己是最合适的view。

即,响应链式从子视图到父视图的。

//先调用,如果hitTest:withEvent:方法中返回nil,那么调用该方法的控件本身和其子控件都不是最合适的view,也就是在自己身上没有找到更合适的view。那么最合适的view就是该控件的父控件。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
//后调用,判断点在不在当前view上(方法调用者的坐标系上)如果返回YES,代表点在方法调用者的坐标系上;返回NO代表点不在方法调用者的坐标系上,那么方法调用者也就不能处理事件。
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

从传递链开始调用这两个方法。即父视图调用->子视图调用。

不能触摸事件的三种情况
  • userInteractionEnabled = NO
  • 如果把父控件隐藏,那么子控件也会隐藏,隐藏的控件不能接受事件
  • 如果设置一个控件的透明度<0.01,会直接影响子控件的透明度。alpha:0.0~0.01为透明。

传递过程

  • 如果当前view是控制器的view,那么控制器就是上一个响应者,事件就传递给控制器;如果当前view不是控制器的view,那么父视图就是当前view的上一个响应者,事件就传递给它的父视图
  • 在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理
  • 如果window对象也不处理,则其将事件或消息传递给UIApplication对象
  • 如果UIApplication也不能处理该事件或消息,则将其丢弃

UIView动画与CoreAnimation区别

UIView动画其实就是对Core Animation的一种封装,向客户程序员呈现更简洁的接口。
UIView是CALayer的代理。在block外面,这个方法将返回一个NSNull(是尖括号的null,nil打印出来是圆括号的null),而在block里面返回了一个叫做UIViewAdditiveAnimationAction类的对象,这个类是一个私有类,遵循了苹果一罐的命名规范: xxAction,一定就是一个实现了CAAction协议的对象了。

相关文章

  • app生命周期、控制器生命周期和事件传递、响应

    生命周期 app生命周期 控制器生命周期 事件 touch事件和手势 触摸事件首先传递到手势上,如果手势识别成功,...

  • iOS面试题-UI篇

    控制器的生命周期 就是问的viewController的生命周期,下面已经按方法执行顺序进行了排序 触摸事件的传递...

  • 事件传递和响应机制

    iOS中的事件 1.事件的生命周期 事件的生命周期从事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的...

  • iOS事件的传递和响应机制

    iOS中的事件 事件的生命周期 事件的生命周期从事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vi...

  • iOS 事件传递机制

    事件传递机制 响应者链的事件传递过程:如果当前view是控制器的view,那么控制器就是上一个响应者,事件就传递给...

  • 一个菜鸟的搬运

    在iOS开发初级的总结 内存管理、修饰符的使用和区别、多线程、事件的传递和响应链、应用的生命周期、Notifica...

  • iOS-视图、控制器生命周期

    APP 有自己的生命周期,视图和控制器也有自己的生命周期和加载顺序 每个视图控制器都维护一个视图层次(view h...

  • 控制器VIew 生命周期

    控制器view⽣生命周期 控制器View的⽣生命周期⽅方法:只要是控制器的⽣生命周期⽅方法,都是以view开头. ...

  • 面试-响应者链和事件传递

    这篇文章主要整理一下面试中会问到的一个知识点:响应者链跟事件传递按照时间顺序,事件的生命周期是这样的:事件的产生和...

  • 控制器的生命周期代码演示

    控制器的生命周期代码演示 // 控制器的生命周期方法一般是以view开头// ARC下控制器view的生命周期方法...

网友评论

      本文标题:app生命周期、控制器生命周期和事件传递、响应

      本文链接:https://www.haomeiwen.com/subject/ozvffctx.html