转:UIView之userInteractionEnabled属性介绍
属性作用
该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互。
当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用户事件,并将这些事件从消息队列中移除出去。当值设置为YES后,这些用户事件会正常的派发至UIView本身(前提事件确实发生在该view上),UIView会按照之前注册的事件处理方法来响应这些事件。
当视图对象的userInteractionEnabled设置为NO的时候,用户触发的事件,如触摸,键盘等,将会被该视图忽略(其他视图照常响应),并且该视图对象也会从事件响应队列中被移除。 当userInteractionEnabled设为YES时,则事件可以正常的传递给该视图对象。 userInteractionEnabled的属性默认值就是YES。
ps:响应者链是能够响应事件的对象组成的链,事件在该链上传递,最终结果事件或被处理或被抛弃。所以一个对象在不在响应者链里是其能否响应事件的首要前提条件!
在一次动画执行流程中,动画包含的所有UIView都会被临时禁止用户交互,而不管每个UIView本身userInteractionEnabled此时的属性值是YES还是NO。但是在配置动画时,通过添加UIViewAnimationOptionAllowUserInteraction选项可以禁止这种行为的发生,使UIView即使是在执行动画期间依然能响应用户事件。
发挥作用的简单原理描述
熟悉IOS消息响应链的开发者都了解Hit-Testing的基本过程,此处对此不做深究,我们可以简单的理解为在一次用户的touch交互中,是hit-test决定了Application的整个view层次结构中,到底该由哪个view去接收并处理该事件。其基本的筛选过程可以粗糙的叙述为:
- touch事件发生,创建UIEvent对象
- 按照Application的view层次结构,逐层调用每个view的hitTest:withEvent:方法,并传入该event对象,view根据hitTest:withEvent:方法和来决定touch点是否包含在自己的bounds中;
- 如果view的bounds包含了touch点,该view会遍历自己的subview,并调用每个subview的pointInside:withEvent:方法来进一步决定touch事件是发生在自己本身,还是自己的subview上。
- 重复第二,三步,并筛选出最终接受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属性介绍的更多相关文章
- UIView之userInteractionEnabled属性介绍
来源:http://my.oschina.net/hmj/blog/108002 属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后 ...
- 【iOS开发】UIView之userInteractionEnabled属性介绍
http://my.oschina.net/hmj/blog/108002 属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UI ...
- UIView之userInteractionEnabled属性介绍-特殊子类覆盖多见于UIImageView和UILabel
属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用 ...
- 关于UIView的userInteractionEnabled属性
关于UIView的userInteractionEnabled属性 如果父视图为ParentView包含一个Button,如果再ParentView上添加子视图ChildView,且ChildView ...
- iOS开发常用小技巧记录(持续更新)
以下问题都是自己在项目中遇到的,解决问题的方法肯定有多种,我所列举的不一定就是最好的解决办法.如有问题欢迎大家指正,补充,交流. 解决同时按两个按钮进两个view的问题.[button setExcl ...
- UI第五节——手势
#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL ...
- IOS的UI总结
一.UIView常见属性 1.frame 位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点(以父控件的左上角为原点(0,0)) 3.bounds 位置和尺寸(以自己的左上角为 ...
- iOS开发 爱特开发技术bug总结
#pragma mark 每天总结学习两小时 效率 和 每天学习 研究底层 多进去看看 // .................................................... ...
- clipToBounds
最近在开发H5平台的iOS移动侧,遇到些问题,随手记录下来. 1 UIView的clipToBounds 窗口裁剪,默认是NO,表示如果父窗口的大小已经不足以显示子窗口,也不进行裁剪,而是显示,但这时 ...
随机推荐
- linux 常用命令-编辑模式
1.编辑模式就是通过vi或者vim打包文件,进入编辑模式,vim是vi的升级版,vim除了报错vi的命令外还包括一些额外的命令,本文以vim命令为例,如果需要查询而不需要编辑文件则可以通过cat命令查 ...
- C# Linq找不到行或已更改
前段时间工作中的一个新需求,有机会用到了Linq to SQL.使用后的第一感觉,就是方便很多,也为整个项目节约了一大把的开发时间,甚至代码量也少了很多.不过在程序的实际运行中,始终会遇到一些莫名其妙 ...
- Leetcode题库——11.盛最多水的容器
@author: ZZQ @software: PyCharm @file: maxArea.py @time: 2018/10/11 21:47 说明:给定 n 个非负整数 a1,a2,...,an ...
- ubuntu下安装matlab2015b
========= 安装过程 1.下载MATLAB2015b破解版 操作系统:Ubuntu 16.04 LTS 程序文件:Matlab2015b-glnxa64破解版 解压提取文件:在ubuntu系统 ...
- Android之自定义View学习(一)
Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...
- 停止ipv6
在Centos5.5默认的状态下,ipv6是被启用的.因为我们不使用ipv6,所以,可以停止ipv6,以最大限度地保证安全和快速.首先确认一下ipv6是不是处于被启动的状态.[root@sample ...
- 蜗牛慢慢爬 LeetCode 36.Valid Sudoku [Difficulty: Medium]
题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...
- vsftpd的配置文件说明
vsftpd的配置文件说明: vsftpd.ftpusers:位于/etc目录下.它指定了哪些用户账户不能访问FTP服务器,例如root等. vsftpd.user_list:位于/etc目录下.该文 ...
- 【Web Shell】- 技术剖析中国菜刀 – Part I
这里的中国菜刀不是指切菜做饭的工具,而是中国安全圈内使用非常广泛的一款Webshell管理工具,想买菜刀请出门左拐东门菜市场王铁匠处.中国菜刀用途十分广泛,支持多种语言,小巧实用,据说是一位中国军人退 ...
- [转帖]升级 Ubuntu,解决登录时提示有软件包可以更新的问题
升级 Ubuntu,解决登录时提示有软件包可以更新的问题 2017年12月05日 11:58:17 阅读数:2953更多 个人分类: ubuntu Connecting to ... Connecti ...