gpt4 book ai didi

ios - swift:在 Collection View 中的标签中显示进度

转载 作者:行者123 更新时间:2023-11-28 07:43:17 24 4
gpt4 key购买 nike

我使用此代码下载文件并在标签中显示下载进度,并在 Storyboard 中创建标签:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MasterViewCell

let cellFilePath = "\(indexPath.section)\(indexPath.row).png"
let indexOfTask = allDownloadTasks.index { (task:URLSessionDownloadTask) -> Bool in
return task.currentRequest?.url?.lastPathComponent == cellFilePath
}

if indexOfTask == nil {

//cell.label?.isHidden = true
}
return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
let documentDirectoryPath:String = path[0]
let fileManager = FileManager()
let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/file.png"))

if fileManager.fileExists(atPath: destinationURLForFile.path){
animation()
} else {

let url = URL(string: "link")!
let downloadTaskLocal = self.backgroundSession.downloadTask(with: url)
self.allDownloadTasks.append(downloadTaskLocal) // Add a new task to the array
downloadTaskLocal.resume()

cell.label?.frame = CGRect(x: 70, y: 128, width: 82, height: 21)
cell.label?.isHidden = false

}
}

func urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didWriteData bytesWritten: Int64,
totalBytesWritten: Int64,
totalBytesExpectedToWrite: Int64){

DispatchQueue.main.async(execute: {() -> Void in

if let visibleIndexPath = self.collectionView?.indexPathsForVisibleItems {
for visibleIndexPath in visibleIndexPath {
if (downloadTask.currentRequest?.url?.lastPathComponent == "\(visibleIndexPath.section)\(visibleIndexPath.row).zip") {

var myCell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: visibleIndexPath) as! MasterViewCell
myCell = self.collectionView?.cellForItem(at: visibleIndexPath) as! MasterViewCell

myCell.label.text = "\(Int(CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite) * 100.0))%"

}
}
}
})
}

但是我有两个问题:

  1. 如果我下载了 6 个文件(按 6 个单元格),然后想继续下载不同的文件,我按下一个单元格。我在单元格中的标签未显示但下载有效。此外,如果我将在另一个单元格中开始下载,我的下载将正常工作,但不会显示标签。如何解决?

  2. 如果我在该单元格中下载了文件并且我的标签 = 100 之后,我在下一节滚动我的 Collection View ,我在一些不同的单元格中看到标签 = 100。但我没有在该单元格中下载文件。

最佳答案

您的手机正在被重复使用。确保在单元格类内的 prepareForReuse 方法中重置单元格。还要确保存储每个单元格的进度,并在 cellForRowAt 方法中将单元格出列时进行设置。

class MasterViewCell {

override func prepareForReuse() {
label.text = "0" //or whatever is supposed to be value for the default cell.
// Do other operations to clear your cell of any existing data for reused cells.
}

}

为了保存进度,只需声明一个变量数组并将该数组中的数据保存在相应的索引处。将单元格出队时,检查数组并使用数组中的值。我看到您有一个名为 urlSession 的方法,您可以在其中知道正在发生进度的单元格的 indexPath。只需将其值存储在该索引处的数组中。

关于ios - swift:在 Collection View 中的标签中显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51626021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com