Swift实现iOS App多个页面按顺序依次弹出

按照需求要求,在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多个弹框按顺序依次弹出 比如首页弹窗

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容