属性作用

该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互。

当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用户事件,并将这些事件从消息队列中
移除出去。当值设置为YES后,这些用户事件会正常的派发至UIView本身(前提事件确实发生在该view上),UIView会按照之前注册的事件处理
方法来响应这些事件。

在一次动画执行流程中,动画包含的所有UIView都会被临时禁止用户交互,而不管每个UIView本身
userInteractionEnabled此时的属性值是YES还是NO。但是在配置动画时,通过添加
UIViewAnimationOptionAllowUserInteraction选项可以禁止这种行为的发生,使UIView即使是在执行动画期间
依然能响应用户事件。

发挥作用的简单原理描述

熟悉IOS消息响应链的开发者都了解Hit-Testing的基本过程,此处对此不做深究,我们可以简单的理解为在一次用户的touch交
互中,是hit-test决定了Application的整个view层次结构中,到底该由哪个view去接收并处理该事件。其基本的筛选过程可以粗糙的
叙述为:

  1. touch事件发生,创建UIEvent对象
  2. 按照Application的view层次结构,逐层调用每个view的hitTest:withEvent:方法,并传入该event对象,view根据hitTest:withEvent:方法和来决定touch点是否包含在自己的bounds中;
  3. 如果view的bounds包含了touch点,该view会遍历自己的subview,并调用每个subview的pointInside:withEvent:方法来进一步决定touch事件是发生在自己本身,还是自己的subview上。
  4. 重复第二,三步,并筛选出最终接受touch事件的view对象

我们关注的是筛选过程的第3步,view调用hitTest:withEvent:方法时,会受
userInteractionEnabled属性设置的影响,如果当view的该属性值设置为NO时,即使最终touch点确实包含在view的
bounds中,该view也会忽略touch事件,当然userInteractionEnabled的设置只是touch筛选的条件之一,在真正的筛
选过程中还包含了其他因素的考虑,因此还要参考hitTest:withEvent:的具体方法描述,但以上描述个人感觉足够我们理解
userInteractionEnabled属性的基本原理。

特殊子类的覆盖

userInteractionEnabled属性默认值为YES,但UIView的一些子类中对该属性进行了覆盖,并将其默认值设置为了
NO,其中UIImageView和UILabel就是这样的类。userInteractionEnabled属性在UIImageView和
UILabel的文档中都有简单的描述。在实际的界面开发过程中,我们经常用UIImageView来模拟按钮或其它可以响应用户touch事件的显示
区,并通过gesture来为其添加事件响应,因此为了保证事件能正常的接受,我们必须要显示的将UIImageView对象的
userInteractionEnabled的值设为YES 。

UIView之userInteractionEnabled属性介绍-特殊子类覆盖多见于UIImageView和UILabel的更多相关文章

  1. UIView之userInteractionEnabled属性介绍

    来源:http://my.oschina.net/hmj/blog/108002 属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后 ...

  2. 转:UIView之userInteractionEnabled属性介绍

    属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用 ...

  3. 【iOS开发】UIView之userInteractionEnabled属性介绍

    http://my.oschina.net/hmj/blog/108002 属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UI ...

  4. 关于UIView的userInteractionEnabled属性

    关于UIView的userInteractionEnabled属性 如果父视图为ParentView包含一个Button,如果再ParentView上添加子视图ChildView,且ChildView ...

  5. WMDestroy函数调用inherited,难道是为了调用子类覆盖函数?还有这样调用的?

    又碰到了: procedure TWinControl.WMDestroy(var Message: TWMDestroy); begin inherited; // important7 fixme ...

  6. java的子类覆盖梗

    项目上线,用户注册时验证码一直报错误,数据库也没问题,代码貌似也没问题. 后面排查到最后,发现是一个子类覆盖父属性问题. JAVA代码中,子类覆盖父类的私有.保护属性,如果不设置get.set方法,拿 ...

  7. Java中方法的继承以及父类未被子类覆盖的方法调用的问题

    在看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的? 是子类拥有了父类的该方法只是没有显示表示,还是子类调用了父类的该方法. 为此做了一下验证 代码如下: public ...

  8. Java vs C++:子类覆盖父类函数时缩小可访问性的不同设计

    Java 和 C++ 都是面向对象的语言,允许对象之间的继承.两个语言的继承都设置有允许子类覆盖父类的“虚函数”,加引号是因为 Java 中没有虚函数这一术语,但是我们的确可以把 Java 的所有函数 ...

  9. Java中子类覆盖父类方法所必须满足的条件

    因为太喜欢,所以转来,侵删! 参考自:http://www.it165.net/pro/html/201504/39284.html 一.描述 子类重写(覆盖)父类的方法必须满足的条件:1.父类中的方 ...

随机推荐

  1. ASP.NET下调用ffmpeg与mencoder实现视频转换截屏

    最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(a ...

  2. python中subprocess.Popen的args和shell参数的使用

    subprocess模块定义了一个类: Popen class subprocess.Popen( args,        bufsize=0,        executable=None,    ...

  3. Hadoop第三课

    1.3Hadoop基础知识 1.3.1术语解释 1.Hadoop1.0 • 第一代Hadoop,由分布式文件系统HDFS 和分布式计算框架MapReduce组成 • HDFS由一个NameNode和多 ...

  4. Leetcode 639.解码方法2

    解码方法2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以包含字符 ' ...

  5. Java实现对cookie的增删改查

    原文地址:http://blog.csdn.net/k21325/article/details/54377830 @RequestMapping(value="meeting/addGua ...

  6. Socket 编程中,TCP 流的结束标志与粘包问题

    因为 TCP 本身是无边界的协议,因此它并没有结束标志,也无法分包. socket和文件不一样,从文件中读,读到末尾就到达流的结尾了,所以会返回-1或null,循环结束,但是socket是连接两个主机 ...

  7. 基数排序(java实现)

    基数排序  就是先比较数组中元素的个位数,排序得到新的数组,然后比较新的数组中的十位数,排序得到新数组,然后再对最新得到的数组比较百位数.......依次循环 比如{82 ,31 ,29 ,71, 7 ...

  8. 习题:过路费(kruskal+并查集+LCA)

    过路费  [问题描述]在某个遥远的国家里,有 n 个城市.编号为 1,2,3,…,n.这个国家的政府修 建了 m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市 T 需 要收取的过路费 ...

  9. 【Luogu】P2491消防(单调队列)

    题目链接 首先可以想到路径一定是在直径上的. 然后对每个点dfs出不经过直径的以它开始的路径最大长度,记为dis 然后就可以求出直径之后枚举左右端点,设左端点l右端点r,直径上点距离直径上起点的距离用 ...

  10. [luogu_P2045]方格取数加强版

    [luogu_P2045]方格取数加强版 试题描述 给出一个 \(n \times n\) 的矩阵,每一格有一个非负整数 \(A_{i,j},(A_{i,j} \le 1000)\) 现在从 \((1 ...