[iOS diary] UIImageView,UILabel等加gesture recognizer不成功,神秘属性userInteractionEnabled

在尝试为UIImageView添加手势识别时遇到问题,即使设置userInteractionEnabled为true,由于UIImageView位于另一个UIImageView之上,需启用父层UIImageView的userInteractionEnabled才能生效。iOS事件处理遵循自底向上构建响应者链的机制,hitTest方法用于确定第一响应者。此外,触摸事件和运动事件在确定first responder上有区别,触摸事件通过HitTest,运动事件则直接从响应链的指定first responder开始处理。
摘要由CSDN通过智能技术生成

某天,我对一个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的消息处理是,当消息被人处理后默认不再向父层传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值