按照需求要求,在App启动时,会模态弹出-隐私政策确认页-强制升级页-也许以后还会有其他的弹窗。
///创建一个初始为0的信号量
let semaphore = DispatchSemaphore.init(value: 0)
func applicationDidBecomeActive(_ application: UIApplication) {
//创建一个队列,为了操作信号量
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
//第一个弹框,UI的创建和显示,要在主线程
//首次登陆,检查是否同意隐私政策
self.checkIsFirst()
}
// 某个信号进行等待或等待降低信号量,只有当信号量大于0时才会停止等待,继续向下执行
self.semaphore.wait()
DispatchQueue.main.async {
// 强制升级
self.getUpgradeInfo()
}
}
}
///检查是否同意隐私政策
func checkIsFirst() {
let abcVC = abcViewController()
abcVC.agreeBlock = {
privacyVC.dismiss(animated: true) {
self.semaphore.signal()//释放信号量
}
}
let nav = UINavigationController.init(rootViewController: abcVC)
if #available(iOS 13.0, *) {
nav.isModalInPresentation = true
}
nav.preferredContentSize = CGSize.init(width: 490*SCREEN_SCALE, height: 576*SCREEN_SCALE)
nav.modalPresentationStyle = .formSheet
rootVC.present(nav, animated: true) {}
}
/// 强制升级
func getUpgradeInfo() {
let alert = UIAlertController.init(title: "请立即升级App", message: nil, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "立即升级", style: .default) { action in
self.semaphore.signal()//释放信号量
}
alert.addAction(okAction)
rootVC.present(alert, animated: true, completion: nil)
}
参考资料:
1.Swift队列组、信号量
2.iOS多个弹框按顺序依次弹出 比如首页弹窗