获取本地视频缩略图产生内存警告的问题

最近在做一个获取本地相册所有视频缩略图的需求,用到了AVAsset与PHAsset。但是在滑动collectionView的时候会报内存警告,而且滑动的快了cell会疯狂刷新。有没有大佬给我个解决办法啊。下面附上代码



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: VideoListViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! VideoListViewCell
        if assetsFetchResults?.count != 0 && assetsFetchResults != nil {
            //assetsFetchResults为所有视频的PHAsset
            let asset = assetsFetchResults![(indexPath as NSIndexPath).row]
            let options = PHVideoRequestOptions()
            options.version = .current
            options.deliveryMode = .automatic
            self.imageManager.requestAVAsset(forVideo: asset, options: options, resultHandler: { (videoAsset, audioMix, info) in
                guard videoAsset != nil else { return }
                let seconds = ceil(Double(videoAsset!.duration.value) / Double(videoAsset!.duration.timescale))
                let timeStr = CameraUtilities.timeDescriptionOfTimeInterval(interval: seconds)
                let generator = AVAssetImageGenerator(asset: videoAsset!)
                generator.appliesPreferredTrackTransform = true
                let needTime = CMTimeMakeWithSeconds(0.0, 600)
                var actualTime = CMTime()
                let image = try? generator.copyCGImage(at: needTime, actualTime: &actualTime)
                guard image != nil else { return }
                cell.setData(bgImage: UIImage(cgImage: image!), timeStr: timeStr)
            })
            cell.updateCellWithItem(item: asset)
        }
        cell.layer.masksToBounds = true
        
        return cell
    }



解决方案:


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: VideoListViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! VideoListViewCell
        if assetsFetchResults?.count != 0 && assetsFetchResults != nil {
            let asset = assetsFetchResults![(indexPath as NSIndexPath).row]
            self.imageManager.requestImage(for: asset, targetSize: assetGridThumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: { (image, info) in
                guard image != nil else { return }
                cell.setData(bgImage: image!, timeStr: CameraUtilities.timeDescriptionOfTimeInterval(interval: asset.duration))
            })
            
            cell.updateCellWithItem(item: asset)
        }
        
        cell.layer.masksToBounds = true
        
        return cell
    }

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值