iOS常用

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

2021-07-29  本文已影响0人  左方

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

上一篇 下一篇

猜你喜欢

热点阅读