十分钟了解响应者链条(代码:swift)
十分钟了解响应者链条(代码:swift)响应者链条事件的响应用户点击屏幕产生的一个触摸事件,经过一系列的传递过程后,会找到一个最适合的视图来处理事件.找到最合适的视图控件后,就会调用控件的touches方法来作具体的时间处理.touches的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理
由多个响应者对象连接起来的链条
继承了UIResponder的对象
1.先判断自己是否能接收触摸事件 2.再判断触摸的当前点在不在自己身上 3.如果在自己身上,它会从后往前遍历子控件,遍历出每一个控件后,重启前两步 4.如果没有符合条件的子控件,那么自身就是最合适的View 在寻找最合适View的过程中,系统会调用2个方法
在开发中或多或少会需要一些特殊的点击,例如:
当一个控件不能接收时间时一般有以下几种情况1.不接收用户交互userInteractionEnabled = NO 2.当一个控件隐藏时Hidden = YES 3.当一个控件为透明白时 4.触摸时间的传递是从父控件传递到子控件的,如果一个父控件不能接收事件,那么他里面的子控件也不能接收. 一次完整的触摸事件的传递响应的过程
代码演示之按钮被一个半透明的View部分遮挡,按钮始终响应
响应者链条测试.gif
storyBoard
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction clickButton(sender: AnyObject) {
print("按钮被点击了")
}
}
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)
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |