【问题标题】:Loading screen while downloading images from Firebase从 Firebase 下载图像时加载屏幕
【发布时间】:2020-07-25 21:52:06
【问题描述】:

我有一堆图像,我必须使用以下代码从数据库中获取,其中 url 是一个数组,其中包含指向 Firebase 存储上的图像的链接。

func downloadFromServer(url: [String], imageNumber: Int){
    for i in url{
    let i = URL(string: i)
        print("I" , i)
        URLSession.shared.dataTask(with: i!) { data, response, error in
         guard
             let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
             let data = data, error == nil,
             let image = UIImage(data: data)

             else { return }
            print("Here", image)
         DispatchQueue.main.async() {
                print("Appended")
                imageArrayWatch.append(image)
                //imageArr.append(image)


         }
         }.resume()
    }

}

我希望我的应用程序在我从数据库中获取图像时显示加载屏幕。但是,当我尝试像这样在我的视图控制器中调用showSpinner 时

self.showSpinner(onView: self.view)
downloadFromServer(url: imageName)
self.removeSpinner()

显示和删除微调器功能只是显示加载屏幕。这不起作用,因为我的 downloadFromServer 函数在从数据库中获取所有图像之前退出,并且我只看到加载屏幕一秒钟。当我的所有图像都附加到 mageArrayWatch 数组时,我怎样才能使我的加载屏幕完成?

【问题讨论】:

    标签: arrays swift firebase


    【解决方案1】:

    你需要一个调度组

    var imageArrayWatch = [UIImage]()
    
    func downloadFromServer(url: [String], imageNumber: Int){
        let g = DispatchGroup()      ////// 1
        for i in url{
        let i = URL(string: i)
            print("I" , i)
            g.enter()         ////// 2
            URLSession.shared.dataTask(with: i!) { data, response, error in
             guard
                 let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                 let data = data, error == nil,
                 let image = UIImage(data: data)
    
                else {  g.leave() ;   return }   ////// 3
                print("Here", image)
             DispatchQueue.main.async() {
                    print("Appended")
                self.imageArrayWatch.append(image)
                g.leave()    ////// 4
             }
             }.resume()
        }
    
        g.notify(queue: .main) {       ////// 5
    
            // stop loading here
    
        }
    }
    

    【讨论】:

    • 如果你也能引入完成处理程序会更有帮助。
    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2018-01-22
    • 2017-07-19
    相关资源
    最近更新 更多