美文网首页
UIResponder响应链相关理解

UIResponder响应链相关理解

作者: 民谣里不是故事就是诗丶 | 来源:发表于2018-08-31 14:43 被阅读18次

在iOS中,我们接收用户的操作并作出响应处理事件的,主要使用的是UIResponder类。我们常见的UIApplication、UIView、UIViewController这几个类是直接继承自UIResponder,所以这些类都可以响应事件。

什么是响应链呢?举个例子,用户在触摸屏幕后,会产生一系列的响应对象的集合,按照一定的层次结构执行响应。APP具体会通过下面三步来完成操作。

    1.  生成事件。当用户点击屏幕时,会产生一个触摸事件,并放入由Application管理的事件队列中,然后在队列中取出最前面的事件交给Window处理。
    2.  查找第一响应对象。Window收到事件后会在视图层次结构中找到最适合的一个视图来处理事件,通常一个窗口中最适合处理当前事件的对象称为第一响应对象。
    3.  处理事件。通常最后是第一响应对象处理事件,如果第一响应对象无法处理事件,就会把事件传递给下一个响应对象,直到Application。如果Application也无法处理,那就丢弃掉此事件。
    在上述系列操作中,所参与到的UIApplication、UIViewController和UIView就作为响应对象构成这次事件的响应链。view -> ViewController -> window -> Application -> 丢弃

在我们需要主动唤起键盘时经常调用[textField registerFirstResponder],注册成为第一响应者。其实在我们点击屏幕的时候,点击TextField控件的位置,Application.keywindow.vc就是通过hitTest:withEvent找到事件最合适的响应者,使[textField becomeFirstResponder]来唤起键盘的。


//UIView和CALayer的关系
说白了UIView和CALayer之间的关系就是MVC的关系,UIView就是C,CALayer就是M,负责绘图单元的笼统来说就是V。
什么是绘图单元?可以阅读像素绘制
笼统的说包括:CPU,GPU,屏幕等,一起来完成把图片显示到屏幕工作的单元。
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示。

//

相关文章

网友评论

      本文标题:UIResponder响应链相关理解

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