十分钟了解响应者链条(代码:swift)

十分钟了解响应者链条(代码:swift),第1张

概述十分钟了解响应链条代码:swift) 响应者链条 事件的响应 用户点击屏幕产生的一个触摸事件,经过一系列的传递过程后,会找到一个最适合的视图来处理事件.找到最合适的视图控件后,就会调用控件的touches方法来作具体的时间处理.touches的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理 什么是响应者链条? 由多个响应者对象连接起来的链条 什么是响应者对象? 继承了UIR 十分钟了解响应者链条(代码:swift) 响应者链条 事件的响应

用户点击屏幕产生的一个触摸事件,经过一系列的传递过程后,会找到一个最适合的视图来处理事件.找到最合适的视图控件后,就会调用控件的touches方法来作具体的时间处理.touches的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理

什么是响应者链条?

由多个响应者对象连接起来的链条

什么是响应者对象?

继承了UIResponder的对象

系统是如何寻找最合适的VIEw

1.先判断自己是否能接收触摸事件

2.再判断触摸的当前点在不在自己身上

3.如果在自己身上,它会从后往前遍历子控件,遍历出每一个控件后,重启前两步

4.如果没有符合条件的子控件,那么自身就是最合适的VIEw

在寻找最合适VIEw的过程中,系统会调用2个方法 hitTest pointInsIDe 在开发中或多或少会需要一些特殊的点击,例如:

一个按钮被一个半透明的VIEw部分遮挡,需要点击到按钮的时候,按钮始终响应

一个VIEw超出了父视图的范围,需要点击超出范围的VIEw也有响应

当一个控件不能接收时间时一般有以下几种情况

1.不接收用户交互userInteractionEnabled = NO

2.当一个控件隐藏时HIDden = YES

3.当一个控件为透明白时

4.触摸时间的传递是从父控件传递到子控件的,如果一个父控件不能接收事件,那么他里面的子控件也不能接收.

一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWionDW -->递归找到最适合处理事件的控件-->控件调用touches方法-->判断是否实现touches方法-->没有实现默认会将事件传递给上一个响应者-->找到上一个响应者 代码演示之按钮被一个半透明的VIEw部分遮挡,按钮始终响应 效果
响应者链条测试.gif storyBoard处理
storyBoard VIEwController
import UIKitclass VIEwController: UIVIEwController {    @IBOutlet weak var button: UIbutton!    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()    }    @IBAction clickbutton(sender: AnyObject) {        print("按钮被点击了")    }  }
WHTestVIEw(即半透明vIEw)代码
WHTestVIEw: UIVIEw { pointInsIDe(point: CGPoint,withEvent event: UIEvent?) -> Bool {        let BtnPiont = convertPoint(point,toVIEw: button)        if button.pointInsIDe(BtnPiont,withEvent: event){            return false        }        return super.pointInsIDe(point,withEvent: event)    }   }
注意:WHTestVIEw中的button要反向拖线 总结

以上是内存溢出为你收集整理的十分钟了解响应者链条(代码:swift)全部内容,希望文章能够帮你解决十分钟了解响应者链条(代码:swift)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存