某天,我对一个UIImageView addGestureRecognizer怎么搞都没有反应。后来,老大告诉我有这个属性,我enable之发现还是不行,后来才发现我的UIImageView是add到另外一个UIImageView上的,把父层UIImageView enable userInteractionEnabled之后就成功了。
这是因为iOS的事件机制先自底的UIApplication-UIWindow-UIView向顶递归利用HitTest寻找第一响应者,然后在形成的响应者链中递归回溯进行事件处理,若事件在高层被处理就不会再将该事件向响应链底层发送。如需要继续向底层发送,需进行特殊处理。
目测,userInteractionEnable是在自底向顶寻找第一响应者,构筑响应者链的时候作为辅助寻找的标志。
附:userInteractionEnable的翻译介绍:http://blog.csdn.net/likendsl/article/details/7575023
附:讲解iOS事件处理机制的好博文:http://www.cnblogs.com/Quains/p/3369132.html
里面有三句话很能概括事件处理
1、iOS判断哪个界面能接受消息是从View层级结构的父View向子View传递,即树状结构的根节点向叶子节点递归传递。2、hitTest和pointInside成对,且hitTest会调用pointInside。3、iOS的消息处理是,当消息被人处理后默认不再向父层传递。