Swift变乱转达和相应过程

计算机软件开发 2024-9-29 11:52:13 102 0 来自 中国
当view被点击,变乱转达过程为:
1、体系检测得手指触(Touch)操纵时会将其打包成一个UIEvent对象,并放入当前运动Application的变乱队列
2、UIApplication将处于使命队列最前端的变乱向下分发,即UIWindow
3、UIWindow将变乱向下分发,即UIView
4、UIView首先看本身是否能处置处罚变乱,触摸点是否在本身身上;能处置处罚且触摸点在本身身上,就继承探求子视图
5、遍历子控件,重复以上两不
6、如果没有找到,即本身最恰当处置处罚变乱;若本身不能处置处罚,则不做任那边置处罚
UIView不担当变乱处置处罚的情况:
1、alpha < 0.01
2、userInteractionEnabled = NO
3、hidden = True
4、超出父控件地区
怎样确定最恰当处置处罚变乱的控件?
1、本身能相应变乱
2、触摸点在本身身上
3、从后往前遍历子控件,重复上两步
4、如果没有符合条件的,那么本身就是最恰当处置处罚的
当变乱转达时,会调用hitTest方法返回最符合相应的view
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {            //1、如果控件不答应与用户交互,那么返回nil            if !isUserInteractionEnabled || alpha <= 0.01 || isHidden{                print("无法交互")                return nil            }            //2、如果点击的点不在当前控件中,返回nil            if !self.point(inside: point, with: event) {                return nil;            }            //3、从后往前遍历子控件            for i in (0..<subviews.count).reversed() {                print("i:",i)                let childv: UIView = subviews                //当前触摸点的坐标转为相对于子控件触摸点的坐标                let childp: CGPoint = convert(point, to: childv)                //判定是否找到了更符合的子控件                let fitv = childv.hitTest(childp, with: event)                if (fitv != nil) {                    return fitv                }            }            //没找到,则返回本身            return self        }
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:55, Processed in 0.128585 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表