首页 > 解决方案 > 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 () 函数。我怎样才能做到这一点?

我的通知中心正确显示了启动画面 - 我有问题只是隐藏它

标签: iosswift

解决方案


是 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)
}

推荐阅读