记录一下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
挺感谢这位大神
网友评论