美文网首页
iOS OC技术(二)UIKit(UIView)

iOS OC技术(二)UIKit(UIView)

作者: 麦哲文 | 来源:发表于2019-02-26 19:03 被阅读0次

    UILabel一个简单的文本标签。

    它是一种很简单的控件,我们在昨天的按钮之后添加个文本标签。

    运行显示:

    继承自UIView的,本身不能响应点击事件的,用来展示信息的元素。这类元素使用起来很简单,可以作为其他元素的父视图(或者说盒子),也可以直接展示一些数据或颜色、图形等。

    在这里可能产生疑问:本身不响应点击事件,也就是说能够响应点击事件喽。

    对的。

    根据按钮能够响应点击事件,我们可以猜测,用户点击屏幕,点击的操作,从设备屏幕告诉应用,应用再告诉所点击的元素。

    那么具体是怎样实现的呢。

    实际开发中,我们能够以各种方式实现普通View的点击响应操作:

    1. 添加手势

    2. touch响应

    3. hitTest方法(注意递归调用,可缓存实现点击相应)

    由于篇幅不想过长,具体实现以外链形式展现。

    本篇的重点在这里:

    下图苹果官方提供的响应链响应方式,我们使用hitTest和touch响应的方法来验证它。

    通过重写touchesBegin和hitTest方法,作为监听

    我们可以抓到页面层级如下的视图:

    它的查找和响应机制如下

    上述结果论证了,点击事件的查找方向:Touch->Window->SuperView-> ... -> PointView

    而消息的响应,是从 PointView-> ... ->SuperView->ViewController->Window->Application->AppDelegate

    即:手触碰屏幕后,先找到窗口,再从窗口一层层子视图找下去,找点点击的目标视图。

    而响应的时候,是根据找到的目标视图,判断目标视图是否实现了点击方法,再一层层向上找,最终把消息传递给AppDelegate。

    也就是说:从子视图开始,到AppDelegate点击的时候,哪个实现了点击方法,消息就发给谁。

    至于什么时候停止,去掉调用父类的方法就停止了(因为子类实现点击方法,不需要父类进行操作了)。

    总结:

    响应控件的查找是从设备到目标视图。

    而iOS内部的控件响应机制是从目标视图到AppDelegate。

    这两个的顺序是相反的。

    相关文章

      网友评论

          本文标题:iOS OC技术(二)UIKit(UIView)

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