// // SelectiveDeliveryEventsView.swift // Crush // // Created by Leon on 2025/7/27. // import UIKit /// 选择性传递View,常用做容器,只上方的一些控制事件可响应。(✅允许Control事件) class SelectiveDeliveryEventsView: UIView { override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { // 1. 如果 view 是隐藏的或不交互,返回 nil if self.isHidden || self.alpha < 0.01 || !self.isUserInteractionEnabled { return nil } // 2. 遍历子视图,看看是否有 UIControl 响应点击 for subview in subviews.reversed() { let convertedPoint = subview.convert(point, from: self) if let hitView = subview.hitTest(convertedPoint, with: event) { if hitView is UIControl { return hitView // 点到了控件,返回控件自身,停止传递 } } } // 3. 没有控件响应,返回 nil 让事件传递给父视图 return nil } }