作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个将图像列表上传到 firebase 存储的 iOS 应用程序,我需要在 uicollectionview 的每个单元格内放置一个进度 View (显示数据源中的每个图像)以指示将此图像上传到 firebase 存储的百分比.
我试试这段代码:
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")
}
}
和:
arrayOfImages?[(arrayOfImages?.count)! - 1]?.Upload(imageView: cell.workImage)
但我无法得到它,因为在 UICollectionView 中重用了单元格,我怎样才能得到它?
最佳答案
1- 创建一个类并将这段代码粘贴到一个函数中
2- 在该类中创建进度属性,并在进度完成和图像的另一个属性中定期更新它
3- 在类中创建一个实例数组并用图像初始化它并开始上传
4- 在 cellForRowAt
中获取每个索引的当前进度值,这就是避免单元格重复使用和上传已上传或当前正在上传的图像的方法
//
应该是这样的
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
}
//
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)
}
关于iOS:在 uicollectionview 中添加 UIProgressView 以显示上传到 firebase 存储的上传百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51463422/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!