事件处理过程是按照一个指定的栈模式,直到有一个对象可以处理。单例的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。 总结
以上是内存溢出为你收集整理的Event Delivery: 事件处理逻辑全部内容,希望文章能够帮你解决Event Delivery: 事件处理逻辑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)