Коллекция View scroll freeze при создании скриншота видео с сервера - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть некоторые проблемы с загрузкой в ​​моем контроллере collectionView. Когда я загружаю видео, оно делает снимок экрана, а затем кэширует это изображение, чтобы оно больше не загружалось. Кэширование отлично работает, когда при прокрутке будет загружено новое видео, оно полностью заморозит, чтобы можно было загрузить новый скриншот видео. У меня есть функция ниже, которая делает "после трюк". Я также пытаюсь объединить вторую функцию, чтобы вызвать это, когда загрузка завершена, но я не могу понять, как заставить это работать.

func previewImageFromVideo(url: NSURL) -> UIImage? {
    let url = url as URL
    let request = URLRequest(url: url)
    let cache = URLCache.shared

    if
        let cachedResponse = cache.cachedResponse(for: request),
        let image = UIImage(data: cachedResponse.data)
    {
        return image
    }

    let asset = AVAsset(url: url)
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    imageGenerator.appliesPreferredTrackTransform = true
    imageGenerator.maximumSize = CGSize(width: 500, height: 500)

    var time = asset.duration
    time.value = min(time.value,2)

    var image: UIImage?

    do {
        let imageRef = try imageGenerator.copyCGImage(at: time, actualTime: nil)
        image = UIImage(cgImage: imageRef)
    } catch { }

    if
        let image = image,
        let pngData = UIImagePNGRepresentation(image)
    {
        let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil)!
        let cachedResponse = CachedURLResponse(response: response, data: pngData)

        cache.storeCachedResponse(cachedResponse, for: request)
    }

    return image
}

Это файл начала загрузки и обязательная функция, которая сообщит мне, когда она закончится:

//SESSION URL - DOWNLOAD WITH PROGRESS
func beginDownloadingFile(urlString: String) {
    print("Attempting to download file")

    let configuration = URLSessionConfiguration.default
    let operationQueue = OperationQueue()
    let urlSession = URLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)

    guard let url = URL(string: urlString) else { return }
    let downloadTask = urlSession.downloadTask(with: url)

    downloadTask.resume()
}

//DOWNLOAD WITH PROGRESS - BASIC APPROACH
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    print("Finished downloading file")


}
...