ios - NotificationCenter - 显示和隐藏启动画面
问题描述
我有这个代码:
主视图控制器:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
// register notification
NotificationCenter.default.addObserver(self, selector: #selector(MainViewControler.StartUpdatingSplash), name: NSNotification.Name("updating.salestool"), object: nil)
}
@objc func StartUpdatingSplash() {
DispatchQueue.global().async {
EZLoadingActivity.show("LoadingMessage4".localized(), disableUI: true)
}
print("##### NOTIFICATION STEP: 1")
}
@objc func FinishUpdatingSplash() {
DispatchQueue.global().async {
EZLoadingActivity.hide()
}
NotificationCenter.default.removeObserver(self, name: Notification.Name("updating.salestool"), object: nil)
print("##### NOTIFICATION STEP: 2")
}
和 Config.swift:
NotificationCenter.default.post(name: NSNotification.Name("updating.salestool"), object: nil)
let dispatchImagesGroup = DispatchGroup()
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: FileFolders.GET_PHOTO.rawValue, parametr: FileFolders.GET_PHOTO.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: FileFolders.GET_INSPIRATION_PHOTO.rawValue , parametr: FileFolders.GET_INSPIRATION_PHOTO.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: FileFolders.GET_PACKSHOT.rawValue , parametr: FileFolders.GET_PACKSHOT.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/" + FileFolders.GET_TIPS_SLIDES.rawValue, parametr: FileFolders.GET_TIPS_SLIDES.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/" + FileFolders.GET_LEAFLETS_SLIDES.rawValue, parametr: FileFolders.GET_LEAFLETS_SLIDES.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadImages(toDownloads: jsonData, savedURL: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/" + FileFolders.GET_CONCEPTS_SLIDES.rawValue, parametr: FileFolders.GET_CONCEPTS_SLIDES.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.enter()
DispatchQueue.global().async {
self.downloadLeafletsPDF(toDownloads: jsonData, savedURL: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/" + FileFolders.GET_LEAFLETS_PDF.rawValue)
dispatchImagesGroup.leave()
}
dispatchImagesGroup.notify(queue: .global()) {
NotificationCenter.default.addObserver(self, selector: #selector(MainViewControler.FinishUpdatingSplash), name: NSNotification.Name("updating.salestool.aviko.qbmobile.com"), object: nil)
}
StartUpdatingSplash - 运行启动画面。
函数 downloadImages - 运行从 Internet 下载照片的线程。启动后的应用程序显示启动画面 (EZLoadingActivity),然后下载照片。
在完成所有这些用于下载照片的线程后,我想隐藏 EZLoadingActivity (EZLoadingActivity.hide),例如通过运行 FinishUpdatingSplash () 函数。我怎样才能做到这一点?
我的通知中心正确显示了启动画面 - 我有问题只是隐藏它
解决方案
是 MainViewControler 类中的函数 downloadImages 吗?
如果是真的,你可以直接调用 FinishUpdatingSplash:
dispatchImagesGroup.notify(queue: .global()) {
self.FinishUpdatingSplash()
}
如果为假,请在所有下载任务完成后发布通知。
dispatchImagesGroup.notify(queue: .global()) {
NotificationCenter.default.post(name: NSNotification.Name("FinishUpdatingSplashNotificationName"), object: nil
}
并且您需要像在 StartUpdatingSplash 中一样在 MainViewControler 中为此通知添加观察者:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
// register notification
NotificationCenter.default.addObserver(self, selector: #selector(MainViewControler.StartUpdatingSplash), name: NSNotification.Name("updating.salestool.aviko.qbmobile.com"), object: nil)
//new code
NotificationCenter.default.addObserver(self, selector: #selector(MainViewControler.StartUpdatingSplash), name: NSNotification.Name("FinishUpdatingSplashNotificationName"), object: nil)
}
推荐阅读
- python - Scipy rv_continuous fit 不检查输入数据范围
- c++ - 将函数指针传递给 C++ 中的模板
- c++ - 此输出如何来自 C++ 比较器以及 bool operator > () const 是如何工作的
- android - Android Firemonkey 应用程序变得太大
- kubernetes - Kubernetes 上的进程激活器
- python - Python Selenium 访问 Cookie-Consent
- jestjs - Apollo 缓存忽略字段别名作为键(MockedProvider)
- javascript - 避免几何形状的交叉
- laravel - Laravel 表单请求验证规则“必需”不适用于空值
- ios - 如何在 viewDidLoad 上调用 tableView?