首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS:在uicollectionview中添加UIProgressView,以显示上传到firebase存储的上传百分比

iOS:在uicollectionview中添加UIProgressView,以显示上传到firebase存储的上传百分比
EN

Stack Overflow用户
提问于 2018-07-22 16:44:14
回答 1查看 212关注 0票数 1

我正在开发一个将图像列表上传到firebase存储的iOS应用程序,我需要在uicollectionview的每个单元格中放置一个进度视图(它显示数据源中的每个图像),以指示将此图像上传到firebase存储的百分比。

我尝试了下面的代码:

代码语言:javascript
运行
复制
func Upload(imageView: UIImageView)
{
    // Data in memory
    var data = Data()
    data = UIImageJPEGRepresentation(self.pickedImage, 0.8)!

    // Create a root reference
    let storageRef = Storage.storage().reference()
    let imageName = NSUUID().uuidString

    // Create a reference to the file you want to upload
    let imageRef = storageRef.child("images/\(imageName).jpg")

    // Upload the file to the path "images/rivers.jpg"
    let uploadTask = imageRef.putData(data, metadata: nil) { (metadata, error) in
        guard let metadata = metadata else {
            // Uh-oh, an error occurred!
            return
        }
    }

    let observer = uploadTask.observe(.progress) { snapshot in
        print("snapshot.progress",snapshot.progress) 
    }

    uploadTask.observe(.progress) { snapshot in
        let percentComplete = 100.0 * Double(snapshot.progress!.completedUnitCount)
            / Double(snapshot.progress!.totalUnitCount)
        print("percentComplete",percentComplete)
        let placeholderImage = UIImage(named: "la")
        imageView.sd_addActivityIndicator()
        imageView.sd_showActivityIndicatorView()
        imageView.sd_setImage(with: imageRef, placeholderImage: placeholderImage)
    }

    uploadTask.observe(.success) { snapshot in
       self.url = imageName
        print(imageName)
        print("success")
        imageView.sd_removeActivityIndicator()
    }
     uploadTask.observe(.failure) { snapshot in
        print("Failuer")
    }
}

和:

代码语言:javascript
运行
复制
arrayOfImages?[(arrayOfImages?.count)! - 1]?.Upload(imageView: cell.workImage)

但是我不能得到它,因为在UICollectionView中重用单元,我怎么才能得到它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-07-22 16:51:15

1-创建一个类,并将此代码粘贴到函数中

2-在该类中创建进度属性,并在进度完成和图像的另一个属性中定期更新它

3-在类内创建一个实例数组,并用镜像初始化它,然后开始上传

4-在cellForRowAt中获取每个索引的当前进度值,这是避免单元重用和上传正在上传或当前上传的图像的方法

//

应该是这样的

代码语言:javascript
运行
复制
class Upload {

    var currentState:State = .none

    var progress:Float = 0

    var img:UIImage

    init(image:UIImage) {

        img = image


    }

    func start () {

        currentState = .uploading

        ///

        let observer = uploadTask.observe(.progress) { snapshot in
            self.progress = snapshot.progress
        }

        ///


         uploadTask.observe(.success) { snapshot in
            currentState = .uploaded
         }

        //

    }


}

enum State {

    case uploading,uploaded,none
}

//

代码语言:javascript
运行
复制
var arr = [Upload]()

for i in 0..<numberOfImages {

    let img = UIImage(named: "\(i).png") // or get it anyWay

    let up = Upload(image: img)

    up.start() // start it in cellForRowAt if item state is none

    arr.append(up)

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51463422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档