iOS 进阶 第十七天(0420)

0420 凡是继承了UIResponder的类都可以做响应者 响应事件的传递是由底到高来传递,响应者链条是由高到底来响应

相应事件的传递(由底到高 找到正在和用户触摸交互的view)

准则:事件由父控件传递给子控件,找到最适合处理这个事件的view来处理.如果父控件不能接收触摸事件,那么子控件就不可能收到触摸事件.

图解如下:

UIView不接收触摸事件的三种情况,如下图:


如何找到最适合处理这个事件的view

如下图:


响应者链条(由高到底,找到第一个实现了touches方法的view)

是触摸touches方法顺着响应者链条由高到底传递,逐步传递到上一个实现了touches方法的响应者 来响应事件.如果这个view的touches方法使用super,则先调父类的touches在调用子类(本类)的touches.就如视窗的开发,视频列表的cell都继承自一个父view,我只在父view里面实现了touches方法,如果我在子类里面实现了touches方法(且没有使用super),那么父类就不能响应touches方法了,因为在响应者链条里已经找到了第一个能够响应touches方法的view即子类的view.

下图所示:

总结:响应事件的传递是由底到高传递,系统先交给UIApplication处理,UIApplication再交给主窗口(keyWindow)来处理,主窗口根据视图结构找到最适合处理这个触摸事件的view,这样响应事件的传递到此完成.(最适合处理这个事件的view有两个判断标准:1、自己是否正在被触摸.2、自己能否处理触摸事件(能否处理触摸有三个判断条件).即使你是最适合处理这个事件的view,但你不一定就处理这个事件,还要通过响应者链条找到第一个实现了touches方法的响应者,这个响应者来调用touches方法来处理这个触摸事件).响应者链条是由高到底传递,由最适合处理触摸事件的view开始向底寻找第一个实现了touches方法的响应者view,如果这个view的touches方法也实现了super方法,则父类也会响应触摸调用touches方法响应.至此,整个触摸事件的处理过程完毕.


面试问答

时间: 2024-08-05 11:18:21

iOS 进阶 第十七天(0420)的相关文章

iOS 进阶 第二十一天(0531)

0531 - Autolayout 不仅可以做屏幕适配还可以做系统适配 uidynamic 做物理动画.能做的效果如下图: Autolayout Autolayout 是一种“自动布局”技术,专门用来布局UI界面的.有了Autolayout,请忘记frame Autolayout 要比 Autoresizing 强大,两者水火不相容 Autolayout的2个核心概念 参照 约束 使用代码实现Autolayout - VFL(Visual Format Language) 实现思路如下: NSL

iOS进阶_地图上定位的标志——大头针

一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大头针类,我自定义的为MyAnnotation 大头针: 在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”.只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置).title(标题).subtitl

iOS 进阶 第一天(0323)

0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的大小都不起作用,那么就要想到从iOS6开始出现的AutoLayout.这个面试必面 iOS 进阶 第一天(0323)

iOS 进阶 第十五天(0417)

0417 创建UICollectionViewCell的Xib方法如下图 枚举定义导航跳转方式 js跳转到网页指定锚点 如下图所示: iOS 进阶 第十五天(0417)

iOS 进阶 第二天(0324)

0324 创建transform transform 是形变属性. 如下图: 如果按照上面的方法来创建的话是这样解释:是相对初始状态来说的,不会在变化后的基础上进行形变.如果要持续变化就要自己去不断改变要变化的tx或者ty的值 如果要在当前的transform上直接进行不断改变就要按照下面的写法,如下图所示: 当然旋转也是一样,如下图: 当然缩放也是一样,如下图: plist 从本地程序包读取文件 懒加载数据 如下图: bundle 如下图: UIImageView的序列帧动画(每隔一段时间换一

iOS 进阶 第九天(0408)

0408 makekeyAndVisible解释 一个程序可以有多个Window,但只有一个窗口能够成为主窗口.如图中所示,此时的window2是主窗口.主窗口用处大了.从iOS7开始无论是主窗口还是次窗口,都可以交互,比如文本框输入文字.但在iOS6及其之前的版本,非KeyWindow(非主窗口)是无法交互的,即无法向文本框中输入文字 如果发现一个文本框不能输入文字,那就就要想到这个文本框所在的窗口是不是主窗口 iOS主窗口和非主窗口的表现: 获取当前程序的主窗口 一些总结: 键盘也是在一个窗

iOS 进阶 第六天(0402)

0402 通知和代理的区别 代理是一对一的,只能是调用实现了协议里的方法,对象作为实现了该方法才能执行方法 通知是多对多,它是通过通知中心分发 通知要及时移除,如果不及时移除可能会收到多次通知,就好像C#中的事件注册多次一样.也可能(通知中心不会保留被通知的对象)是被通知的对象已经销毁,但通知中心仍保留这个通知继续通知造成野指针错误,应用可能会崩溃. 同时的添加和移除很容易和KVO混在一起,只要注意addObserver和removeObserver的时候不选择forKeyPath就可以了. 下

iOS 进阶 第十一天(0411)

0411 UItaBbar的结构 每一个数组都有一个方法,那就是下面这个,如下图所示: 如果想看系统控件是怎么构成的,那么就采用遍历其子控件的方式来做,如上一图中所示 在iOS7及其以后的系统里,控制器ViewController的View都是通栏的,从头到脚.但在iOS6及其以前的系统里控制器ViewContorller的View的高度要去掉被遮盖的部分. strong和weak 对象销毁准则: 非ARC:只要对象的引用计数器为0,系统自动会销毁此对象 ARC:只要没有任何强指针指向此对象,系

iOS 进阶 第三天(0326)

0326 Xib:描述软件界面,轻量级,一般用来描述局部界面 Xib的获取,如下图所示: xib在我们开发的时候叫xib,但如果运行在我们手机里会生成nib.所以xib和nib两种方法来访问xib iOS 进阶 第三天(0326)