Event Delivery: 事件处理逻辑

当用户产生一个Event事件的时候,UIKit会创建一个event对象,里面包含处理这个对象所需要的信息。然后将该对象放置在active app(一个程序对象用来初始化用户事件链路并全权管理运行中的程序)的事件队列里面。
事件处理过程是按照一个指定的栈模式,直到有一个对象可以处理。单例的UIApplication对象会手相在队列顶部取出这个事件并派发下去处理;典型的会将事件发送到应用的关键对象Window(保存屏幕矩形区域内的图形内容并在事件派发过程中扮演一个重要角色)
Window将event派发给一个初始对象来处理:
Touch Event:window会首先尝试将事件派发给发生touch事件的view
Motion and remote control events: window首先发送shaking-motion 或 remote control event事件给第一个responder来处理。
Hit-Testing:用来找到接受Touch事件的view;当发送touch事件时,iOS会首先找到边界内的相关View,然后再逐个排除并递归子view,直到找到最小的view,就是要找的hit-test view。  hitTest:withEvent: 方法会返回这个hit-test view并返回指定的CGPoint和UIEvent。这个方法首先会调用   pointInside:withEvent: 来判断是否在这个view的边界内,并返回YES/No来决定是否递归往下。
Responder chain:如果初始对象不处理这个事件,UIKIt就会分发这个事件给链上的下一个响应者。每一个链上的对象都可以决定是否处理这个事件。如果不处理则调用   nextResponder 分发给下一个响应对象,知道该事件被处理或者没有更多的responder。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值