美文网首页
【Swift】EBannerViewSwift 库 双击会崩溃(

【Swift】EBannerViewSwift 库 双击会崩溃(

作者: 哗啦啦啦呃 | 来源:发表于2023-01-30 15:50 被阅读0次

记录一下EBannerView通知崩溃的解决办法

出现了一点点小问题,通知在连续多次点击之后会崩溃。报错的地方是在EBBannerWindow 文件的 hitTest()里面。

修改方法:按如下方式添加一段代码
原Swift代码:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        var view: UIView?
        for v in rootViewController?.view.subviews ?? [UIView]() {
            if v.frame.contains(point) {
                view = v
                break
            }
        }
        if view == nil {
            if #available(iOS 13.0, *) {
                return UIApplication.shared.keyWindow?.hitTest(point, with: event)
            } else {
                return super.hitTest(point, with: event)
            }
        } else {
            let p = convert(point, to: view)
            return view?.hitTest(p, with: event)
        }
    }

修改后:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        var view: UIView?
        for v in rootViewController?.view.subviews ?? [UIView]() {
            if v.frame.contains(point) {
                view = v
                break
            }
        }
        if view == nil {
            if #available(iOS 13.0, *) {
                //修改通知连点两次会崩溃的问题
                let frontToBackWindow = UIApplication.shared.windows
                for window in frontToBackWindow {
                    let windowOnMainScreen = window.screen == UIScreen.main
                    let windowIsVisible = !window.isHidden && window.alpha > 0
                    let windowLevelNormal = window.windowLevel == UIWindow.Level.normal
                    if windowIsVisible && windowLevelNormal && windowOnMainScreen {
                        return window.hitTest(point, with: event)
                    }
                }
                return UIApplication.shared.keyWindow?.hitTest(point, with: event)
            } else {
                return super.hitTest(point, with: event)
            }
        } else {
            let p = convert(point, to: view)
            return view?.hitTest(p, with: event)
        }
    }

参考文档:https://www.jianshu.com/p/6608d911f456
挺感谢这位大神

相关文章

网友评论

      本文标题:【Swift】EBannerViewSwift 库 双击会崩溃(

      本文链接:https://www.haomeiwen.com/subject/ziimhdtx.html