属性作用

该属性值为布尔类型,如属性本身的名称所释,该属性决定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. 聊聊、Java 命令 第一篇

    网上很多讲 Javac 和 Java 命令的,我觉得还是要自己写一写,做一个自己的总结,也方便以后查询. 开始之前先看看 help 命令,基本上任何一个软件都会提供这个命令. 没有什么比 -help ...

  2. python 模块初识

    python的强大之处在于有丰富的实现各种功能的标准库和第三方库,另外还允许用户自己建立库文件, 标准模块(又称为库)包括sys, os, glob, socket, threading, _thre ...

  3. 【homework week5】初步了解敏捷开发——自由与约束的哲学统一

    “自由与束缚的哲学统一”或许不该放到标题上去,毕竟它只是我灵光一闪的感悟.但这个spark让我感到高中到大学的哲学应该也没有白学,这是让人非常兴奋的一件事. 所以我还是把它放到了标题上. 来谈敏捷软件 ...

  4. jdk -version could not open jvm.cfg 的解决办法

    java 时出现 could not open jvm.cfg 的解决办法     问题描述: 重装JDK并更变目录后,出现JAVA -VERSION  出现could not open jvm.cf ...

  5. Mysql,phpmyadmin密码忘了怎么办

    1.关闭mysql服务 # service mysql stop 如果提示mysql: unrecognized service这样的错误提示. 先查看查找mysql.server,使用:find / ...

  6. iOS-@inerface的11条规范写法

    总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件. 1.读写权限 1.1实例变量的@public,@protected,@priv ...

  7. 【bzoj4259/bzoj4503】残缺的字符串/两个串 FFT

    bzoj4259 题目描述 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有 ...

  8. 【Luogu】P4172水管局长(LCT)

    题目链接 有个结论是x到y的路径上最长边权值等于最小生成树上最长边权值,于是问题转化为最小生成树. 再考虑把问题反过来,删边变成加边. 于是变成动态维护最小生成树,LCT可以做到. #include& ...

  9. 2018 ACM南京网络赛H题Set解题报告

    题目描述 给定\(n\)个数$a_i$,起初第\(i\)个数在第\(i\)个集合.有三种操作(共\(m\)次): 1 $u$ $v$ 将第$u$个数和第$v$个数所在集合合并 2 $u$ 将第$u$个 ...

  10. Php中常见的4种随机密码生成方法详解

    使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...