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
|
|||
|
|
}
|
|||
|
|
}
|