У меня есть UICollectionViewCompositionalLayout. В DidSelectItemAt начинаю загрузку файла. Внутри элементов просмотра коллекции у меня есть метка, показывающая процент загруженного файла. Я использую этот код для этого и для обновления своей ячейки:
Но когда мой файл загружается и я использую этот метод reloadItem(indexPath: IndexPath) для обновления ячейки, я получаю некоторые зависания при прокрутке представления коллекции и зависания, если Я снова нажимаю на ячейку, которая в данный момент показывает ход загрузки. Моя проблема заключается внутри этого метода reloadItem(indexPath: IndexPath). Но как решить эту проблему с обновлением ячейки?
У меня есть UICollectionViewCompositionalLayout. В DidSelectItemAt начинаю загрузку файла. Внутри элементов просмотра коллекции у меня есть метка, показывающая процент загруженного файла. Я использую этот код для этого и для обновления своей ячейки: [code]func createDataSource() { dataSource = UICollectionViewDiffableDataSource(collectionView: collectionView) { collectionView, indexPath, item in switch self.sections[indexPath.section].identifier {
case "cell":
let cell = self.configure(DCell.self, with: item, for: indexPath)
if indexPath.row < self.items.count { let item = self.items[indexPath.row] switch item.state { case .downloading: cell.title.text = "\(String(format: "%.f%%", item.progress * 100))" case .completed: cell.title.text = "Completed" case .failed: cell.title.text = "Fail" case .none: break } } return cell
var snapshot = NSDiffableDataSourceSnapshot() snapshot.appendSections(sections) for section in sections { snapshot.appendItems(section.item, toSection: section) } dataSource?.apply(snapshot)
snapshot.reloadItems([needReloadItem]) dataSource?.apply(snapshot, animatingDifferences: false) } [/code] код из DownloadManager для отслеживания прогресса: [code]func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { if totalBytesExpectedToWrite > 0 { if let onProgress = onProgress { calculateProgress(session: session, completionHandler: onProgress) } } }
private func calculateProgress(session : URLSession, completionHandler : @escaping (Int, Int, Float) -> ()) { session.getTasksWithCompletionHandler { (tasks, uploads, downloads) in let progress = downloads.map({ (task) -> Float in if task.countOfBytesExpectedToReceive > 0 { return Float(task.countOfBytesReceived) / Float(task.countOfBytesExpectedToReceive) } else { return 0.0 } }) completionHandler(session.getSessionDescription(), Int(session.accessibilityHint!)!, progress.reduce(0.0, +)) } } [/code] Но когда мой файл загружается и я использую этот метод reloadItem(indexPath: IndexPath) для обновления ячейки, я получаю некоторые зависания при прокрутке представления коллекции и зависания, если Я снова нажимаю на ячейку, которая в данный момент показывает ход загрузки. Моя проблема заключается внутри этого метода reloadItem(indexPath: IndexPath). Но как решить эту проблему с обновлением ячейки?