(Swift)处理子视图超出父视图部分,仍可点击

一)问题场景

如下图所示,黄色视图为父视图,红色为子视图,
默认情况下,红色视图超出黄色视图部分,点击无效;


(Swift)处理子视图超出父视图部分,仍可点击_第1张图片
截屏2021-03-25 下午6.00.46.png

二)解决方案

//重写父视图中如下方法
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?

三)源码示意

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    let supView = super.hitTest(point, with: event)
    for subView in self.subviews {
        //将父类point点转换成子类坐标系下的点
        let convertedPoint = subView.convert(point, from: self)
        let targetView = subView.hitTest(convertedPoint, with: event)
        if targetView != nil {
            return targetView
        }
    }
    return supView
}

你可能感兴趣的:((Swift)处理子视图超出父视图部分,仍可点击)