美文网首页
【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