32 lines
1.0 KiB
Swift
32 lines
1.0 KiB
Swift
//
|
||
// 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
|
||
}
|
||
}
|