Commit 71bca841 authored by CZ1004's avatar CZ1004

修改数据源结构方式

parent 7ab40d47
...@@ -89,11 +89,11 @@ class HomeInfoViewController:BaseViewController { ...@@ -89,11 +89,11 @@ class HomeInfoViewController:BaseViewController {
return sview return sview
}() }()
var ids: [[String]]? var ids: [[AssetModel]]?
var titleText : String? var titleText : String?
init(ids: [[String]],type:PhotsFileType?,titleText:String) { init(ids: [[AssetModel]],type:PhotsFileType?,titleText:String) {
self.ids = ids self.ids = ids
self.type = type self.type = type
self.titleText = titleText self.titleText = titleText
......
...@@ -29,10 +29,10 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -29,10 +29,10 @@ class HomePhotosDetailViewController : BaseViewController {
private var videoDetailNavView:VideoDetaiNavView? private var videoDetailNavView:VideoDetaiNavView?
var resourceData : [String] = [] var resourceData : [AssetModel] = []
func dealData(){ func dealData(){
var dataArray : [String] = [] var dataArray : [AssetModel] = []
for item in self.model.assets { for item in self.model.assets {
dataArray = dataArray + item dataArray = dataArray + item
} }
...@@ -52,7 +52,7 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -52,7 +52,7 @@ class HomePhotosDetailViewController : BaseViewController {
} }
// 当前页面选中的 // 当前页面选中的
var selectedModel : [String] = [] { var selectedModel : [AssetModel] = [] {
didSet{ didSet{
if self.selectedModel.count == 0{ if self.selectedModel.count == 0{
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButton.setTitle("Delete", for: .normal)
...@@ -86,12 +86,6 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -86,12 +86,6 @@ class HomePhotosDetailViewController : BaseViewController {
}() }()
// lazy var emptyTrashView : EmptyTrashView = {
// let view = EmptyTrashView()
// view.backgroundColor = .white
// return view
// }()
lazy var deleteButton : UIButton = { lazy var deleteButton : UIButton = {
let view = UIButton() let view = UIButton()
view.setTitle("Delete", for: UIControl.State.normal) view.setTitle("Delete", for: UIControl.State.normal)
...@@ -137,12 +131,6 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -137,12 +131,6 @@ class HomePhotosDetailViewController : BaseViewController {
} }
// self.view.addSubview(self.emptyTrashView)
// self.emptyTrashView.snp.makeConstraints { make in
// make.left.right.equalToSuperview()
// make.bottom.equalToSuperview().offset(-34)
// make.height.equalTo(70)
// }
self.view.insertSubview(collectionView, at: 0) self.view.insertSubview(collectionView, at: 0)
self.view.addSubview(self.deleteButton) self.view.addSubview(self.deleteButton)
...@@ -195,7 +183,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -195,7 +183,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
cell.resourceIdent = self.resourceData[indexPath.row] cell.resourceIdent = self.resourceData[indexPath.row]
cell.currentOrder = indexPath.row cell.currentOrder = indexPath.row
if self.selectedModel.contains(cell.resourceIdent) { if self.selectedModel.contains(where: { $0.localIdentifier == cell.resourceIdent.localIdentifier }) {
cell.choose = true cell.choose = true
}else{ }else{
cell.choose = false cell.choose = false
...@@ -214,7 +202,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -214,7 +202,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
dataSource.isSeleted = true dataSource.isSeleted = true
dataSource.id = ident dataSource.id = ident
// 获取image // 获取image
dataSource.image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: ident) dataSource.image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: ident.localIdentifier)
vc.homeDataSource = [dataSource] vc.homeDataSource = [dataSource]
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
...@@ -225,7 +213,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -225,7 +213,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
if click == true { if click == true {
self.selectedModel.append(self.resourceData[order]) self.selectedModel.append(self.resourceData[order])
}else{ }else{
self.selectedModel.removeAll { $0 == self.resourceData[order] } self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier }
} }
DispatchQueue.main.async { DispatchQueue.main.async {
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
...@@ -338,54 +326,21 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -338,54 +326,21 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
/// 对当前页面资源排序(注意这里获取的资源是image) /// 对当前页面资源排序(注意这里获取的资源是image)
/// - Parameter sortType: 排序类型 /// - Parameter sortType: 排序类型
func sortByType(sortType:Int){ func sortByType(sortType:Int){
// 实际就是对Video数据排序 switch sortType {
var assetsWithSize: [(asset: PHAsset, size: Int64)] = [] case 0:
let allImagesResult = PHAsset.fetchAssets(withLocalIdentifiers: self.resourceData, options: nil) self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize }
let allImages = allImagesResult.objects(at: IndexSet(0..<allImagesResult.count)) break
for item in allImages { case 1:
let resources = PHAssetResource.assetResources(for: item) self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize }
for resource in resources { break
if let fileSize = resource.value(forKey: "fileSize") as? Int64 { case 2:
assetsWithSize.append((item, fileSize)) self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate }
} break
} case 3:
} self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate }
if sortType == 0 || sortType == 1 { break
if sortType == 0 { default:
assetsWithSize = assetsWithSize.sorted { $0.size < $1.size } break
}else{
assetsWithSize = assetsWithSize.sorted { $0.size > $1.size }
}
// 输出排序后的资源信息
var sources:[String] = []
for (_, item) in assetsWithSize.enumerated() {
sources.append(item.asset.localIdentifier)
}
self.resourceData = sources
}
if sortType == 2 || sortType == 3 {
var assetsWithDate: [(asset: PHAsset, size: Int64)] = []
if sortType == 2 {
assetsWithDate = assetsWithSize.sorted {
guard let date1 = $0.asset.creationDate, let date2 = $1.asset.creationDate else {
return false
}
return date1 > date2
}
}else{
assetsWithDate = assetsWithSize.sorted {
guard let date1 = $0.asset.creationDate, let date2 = $1.asset.creationDate else {
return false
}
return date1 < date2
}
}
var sources:[String] = []
for item in assetsWithDate {
sources.append(item.asset.localIdentifier)
}
self.resourceData = sources
} }
} }
...@@ -393,7 +348,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -393,7 +348,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
@objc func deleteButtonAction(){ @objc func deleteButtonAction(){
// 删除当前选择 // 删除当前选择
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel, options: nil) let allIdent = self.selectedModel.map{ $0.localIdentifier }
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: allIdent, options: nil)
PHPhotoLibrary.shared().performChanges ({ PHPhotoLibrary.shared().performChanges ({
PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration) PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration)
}){ success, error in }){ success, error in
...@@ -401,7 +357,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -401,7 +357,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
print("删除文件成功") print("删除文件成功")
// 移除当前总数据源的数据 // 移除当前总数据源的数据
for item in self.selectedModel { for item in self.selectedModel {
self.resourceData.removeAll{ $0 == item } self.resourceData.removeAll{ $0.localIdentifier == item.localIdentifier }
} }
}else { }else {
if let error = error { if let error = error {
......
...@@ -25,10 +25,10 @@ class HomeVideoDetailController :BaseViewController { ...@@ -25,10 +25,10 @@ class HomeVideoDetailController :BaseViewController {
private var videoDetailNavView:VideoDetaiNavView? private var videoDetailNavView:VideoDetaiNavView?
var resourceData : [String] = [] var resourceData : [AssetModel] = []
func dealData(){ func dealData(){
var dataArray : [String] = [] var dataArray : [AssetModel] = []
for item in self.model.assets { for item in self.model.assets {
dataArray = dataArray + item dataArray = dataArray + item
} }
...@@ -46,7 +46,7 @@ class HomeVideoDetailController :BaseViewController { ...@@ -46,7 +46,7 @@ class HomeVideoDetailController :BaseViewController {
} }
// 当前页面选中的 // 当前页面选中的
var selectedModel : [String] = [] { var selectedModel : [AssetModel] = [] {
didSet{ didSet{
DispatchQueue.main.async { [self] in DispatchQueue.main.async { [self] in
if self.selectedModel.count == 0 { if self.selectedModel.count == 0 {
...@@ -182,7 +182,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -182,7 +182,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
cell.resourceIdent = self.resourceData[indexPath.row] cell.resourceIdent = self.resourceData[indexPath.row]
cell.currentOrder = indexPath.row cell.currentOrder = indexPath.row
if self.selectedModel.contains(cell.resourceIdent) { if self.selectedModel.contains(where: { $0.localIdentifier == cell.resourceIdent!.localIdentifier }) {
cell.choose = true cell.choose = true
}else{ }else{
cell.choose = false cell.choose = false
...@@ -193,7 +193,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -193,7 +193,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
if click == true { if click == true {
self.selectedModel.append(self.resourceData[order]) self.selectedModel.append(self.resourceData[order])
}else{ }else{
self.selectedModel.removeAll { $0 == self.resourceData[order] } self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier }
} }
DispatchQueue.main.async { DispatchQueue.main.async {
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
...@@ -220,7 +220,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -220,7 +220,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
dataSource.image = image dataSource.image = image
// 表示这个是视频 // 表示这个是视频
vc.homeDataSource = [dataSource] vc.homeDataSource = [dataSource]
vc.getVideoURLFromLocalIdentifier(localIdentifier: ident) { url, error in vc.getVideoURLFromLocalIdentifier(localIdentifier: ident.localIdentifier) { url, error in
if url != nil{ if url != nil{
DispatchQueue.main.async { DispatchQueue.main.async {
...@@ -322,7 +322,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -322,7 +322,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
@objc func deleteButtonAction(){ @objc func deleteButtonAction(){
// 删除当前选择 // 删除当前选择
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel, options: nil) let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel.map{$0.localIdentifier}, options: nil)
PHPhotoLibrary.shared().performChanges ({ PHPhotoLibrary.shared().performChanges ({
PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration) PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration)
}){ success, error in }){ success, error in
...@@ -330,7 +330,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -330,7 +330,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
print("删除文件成功") print("删除文件成功")
// 移除当前总数据源的数据 // 移除当前总数据源的数据
for item in self.selectedModel { for item in self.selectedModel {
self.resourceData.removeAll{ $0 == item } self.resourceData.removeAll{ $0.localIdentifier == item.localIdentifier }
} }
}else { }else {
if let error = error { if let error = error {
...@@ -384,55 +384,21 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -384,55 +384,21 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
} }
func sortByType(sortType:Int){ func sortByType(sortType:Int){
switch sortType {
// 实际就是对Video数据排序 case 0:
var assetsWithSize: [(asset: PHAsset, size: Int64)] = [] self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize }
let allVideos = PHAsset.fetchAssets(withLocalIdentifiers: self.resourceData, options: nil) break
allVideos.enumerateObjects { (asset, index, stop) in case 1:
let resources = PHAssetResource.assetResources(for: asset) self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize }
for resource in resources { break
if let fileSize = resource.value(forKey: "fileSize") as? Int64 { case 2:
assetsWithSize.append((asset, fileSize)) self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate }
} break
} case 3:
} self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate }
if sortType == 0 || sortType == 1 { break
if sortType == 0 { default:
assetsWithSize = assetsWithSize.sorted { $0.size < $1.size } break
}else{
assetsWithSize = assetsWithSize.sorted { $0.size > $1.size }
}
// 输出排序后的资源信息
var sources:[String] = []
for (_, item) in assetsWithSize.enumerated() {
sources.append(item.asset.localIdentifier)
}
self.resourceData = sources
}
if sortType == 2 || sortType == 3 {
var assetsWithDate: [(asset: PHAsset, size: Int64)] = []
if sortType == 2 {
assetsWithDate = assetsWithSize.sorted {
guard let date1 = $0.asset.creationDate, let date2 = $1.asset.creationDate else {
return false
}
return date1 > date2
}
}else{
assetsWithDate = assetsWithSize.sorted {
guard let date1 = $0.asset.creationDate, let date2 = $1.asset.creationDate else {
return false
}
return date1 < date2
}
}
var sources:[String] = []
for item in assetsWithDate {
sources.append(item.asset.localIdentifier)
}
self.resourceData = sources
} }
} }
......
...@@ -9,7 +9,7 @@ import UIKit ...@@ -9,7 +9,7 @@ import UIKit
class HomeInfoView :UIView{ class HomeInfoView :UIView{
var ids:[[String]]? var ids:[[AssetModel]]?
var titleText : String? var titleText : String?
...@@ -72,7 +72,7 @@ class HomeInfoView :UIView{ ...@@ -72,7 +72,7 @@ class HomeInfoView :UIView{
return sview return sview
}() }()
init(frame: CGRect,ids:[[String]]?,type:PhotsFileType?,titleText:String?) { init(frame: CGRect,ids:[[AssetModel]]?,type:PhotsFileType?,titleText:String?) {
self.ids = ids self.ids = ids
self.titleText = titleText self.titleText = titleText
...@@ -164,9 +164,9 @@ class HomeInfoView :UIView{ ...@@ -164,9 +164,9 @@ class HomeInfoView :UIView{
setTitleView() setTitleView()
} }
func getSelectedArray() -> [String] { func getSelectedArray() -> [AssetModel] {
var selectedArray:[String] = [] var selectedArray:[AssetModel] = []
for smodel in models { for smodel in models {
...@@ -174,7 +174,7 @@ class HomeInfoView :UIView{ ...@@ -174,7 +174,7 @@ class HomeInfoView :UIView{
if smodel2.isSeleted ?? false { if smodel2.isSeleted ?? false {
selectedArray.append(smodel2.id) selectedArray.append(smodel2.id!)
} }
} }
} }
......
...@@ -10,5 +10,5 @@ import Photos ...@@ -10,5 +10,5 @@ import Photos
struct ImageCollectionModel { struct ImageCollectionModel {
var asset:String var asset:AssetModel
} }
...@@ -10,7 +10,7 @@ import UIKit ...@@ -10,7 +10,7 @@ import UIKit
class ImageSeletedCollectionItem { class ImageSeletedCollectionItem {
var id:String = "" var id:AssetModel?
var image:UIImage? var image:UIImage?
var isSeleted:Bool? var isSeleted:Bool?
} }
......
...@@ -130,7 +130,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -130,7 +130,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
guard let asset = model.assets.first?.first else {return} guard let asset = model.assets.first?.first else {return}
if self.mediaType == 0 { if self.mediaType == 0 {
let image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: asset) let image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: asset.localIdentifier)
DispatchQueue.main.async {[weak self] in DispatchQueue.main.async {[weak self] in
guard let self else {return} guard let self else {return}
imageView.image = image imageView.image = image
...@@ -148,7 +148,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -148,7 +148,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
// 异步请求 // 异步请求
options.isSynchronous = false options.isSynchronous = false
// 从 PHAsset 获取 AVAsset // 从 PHAsset 获取 AVAsset
if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [asset]){ if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [asset.localIdentifier]){
// 使用requestImageForAsset方法请求视频的第一帧图片 // 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in
// 处理获取到的图片 // 处理获取到的图片
......
...@@ -12,7 +12,7 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell { ...@@ -12,7 +12,7 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell {
var clickCallBack : (Bool,Int)->Void = {choose,order in} var clickCallBack : (Bool,Int)->Void = {choose,order in}
var cellCallBack : (String,Int)->Void = {ident,order in} var cellCallBack : (AssetModel,Int)->Void = {ident,order in}
var currentMediaType : Int = 0 var currentMediaType : Int = 0
...@@ -27,10 +27,10 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell { ...@@ -27,10 +27,10 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell {
} }
} }
var resourceIdent : String = "" { var resourceIdent : AssetModel = AssetModel(localIdentifier: "", assetSize: 0.0, createDate: Date()) {
didSet{ didSet{
DispatchQueue.global().async { DispatchQueue.global().async {
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [self.resourceIdent], options: nil) let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [self.resourceIdent.localIdentifier], options: nil)
let assetsArray = fetchResult.objects(at: IndexSet(0..<fetchResult.count)) let assetsArray = fetchResult.objects(at: IndexSet(0..<fetchResult.count))
let options = PHImageRequestOptions() let options = PHImageRequestOptions()
options.isNetworkAccessAllowed = true options.isNetworkAccessAllowed = true
......
...@@ -107,9 +107,6 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -107,9 +107,6 @@ class HomeTitleCollectionCell:UICollectionViewCell {
assetsModels.append(smodel) assetsModels.append(smodel)
} }
Print(assetsModels)
Print(model.assets)
DispatchQueue.main.async {[weak self] in DispatchQueue.main.async {[weak self] in
guard let self else {return} guard let self else {return}
......
...@@ -12,11 +12,11 @@ class HomeVideoDetailCell : UICollectionViewCell { ...@@ -12,11 +12,11 @@ class HomeVideoDetailCell : UICollectionViewCell {
var clickCallBack : (Bool,Int)->Void = {choose,order in} var clickCallBack : (Bool,Int)->Void = {choose,order in}
var cellCallBack : (String,Int)->Void = {ident,order in} var cellCallBack : (AssetModel,Int)->Void = {ident,order in}
var currentMediaType : Int = 0 var currentMediaType : Int = 0
var resourceIdent : String = "" { var resourceIdent : AssetModel? {
didSet{ didSet{
// 定义请求选项来获取视频的第一帧 // 定义请求选项来获取视频的第一帧
let options = PHImageRequestOptions() let options = PHImageRequestOptions()
...@@ -29,7 +29,7 @@ class HomeVideoDetailCell : UICollectionViewCell { ...@@ -29,7 +29,7 @@ class HomeVideoDetailCell : UICollectionViewCell {
// 异步请求 // 异步请求
options.isSynchronous = true options.isSynchronous = true
// 从 PHAsset 获取 AVAsset // 从 PHAsset 获取 AVAsset
if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [resourceIdent]){ if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [resourceIdent!.localIdentifier]){
// 使用requestImageForAsset方法请求视频的第一帧图片 // 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in
// 处理获取到的图片 // 处理获取到的图片
...@@ -149,7 +149,7 @@ class HomeVideoDetailCell : UICollectionViewCell { ...@@ -149,7 +149,7 @@ class HomeVideoDetailCell : UICollectionViewCell {
} }
@objc func cellClick(){ @objc func cellClick(){
cellCallBack(self.resourceIdent,self.currentOrder) cellCallBack(self.resourceIdent!,self.currentOrder)
} }
......
...@@ -34,7 +34,7 @@ class ImageCollectionCell:UICollectionViewCell { ...@@ -34,7 +34,7 @@ class ImageCollectionCell:UICollectionViewCell {
guard let self else {return} guard let self else {return}
let image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: model.asset) let image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: model.asset.localIdentifier)
DispatchQueue.main.async {[weak self] in DispatchQueue.main.async {[weak self] in
......
...@@ -71,7 +71,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -71,7 +71,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
// 异步请求 // 异步请求
options.isSynchronous = false options.isSynchronous = false
// 从 PHAsset 获取 AVAsset // 从 PHAsset 获取 AVAsset
if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id]){ if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id!.localIdentifier]){
// 使用requestImageForAsset方法请求视频的第一帧图片 // 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in
// 处理获取到的图片 // 处理获取到的图片
...@@ -89,7 +89,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -89,7 +89,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
} }
} }
}else{ }else{
if let asset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id]){ if let asset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id!.localIdentifier]){
let image = PhotoAndVideoMananger.mananger.getImageFromAsset(asset: asset) let image = PhotoAndVideoMananger.mananger.getImageFromAsset(asset: asset)
model.image = image model.image = image
......
...@@ -185,7 +185,7 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa ...@@ -185,7 +185,7 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PMShowVideoCellID, for: indexPath) as! PMShowVideoCell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PMShowVideoCellID, for: indexPath) as! PMShowVideoCell
// 获取相似视频的URL // 获取相似视频的URL
DispatchQueue.global().async { DispatchQueue.global().async {
self.getVideoURLFromLocalIdentifier(localIdentifier: self.homeDataSource![indexPath.row].id) {[weak self] url, error in self.getVideoURLFromLocalIdentifier(localIdentifier: self.homeDataSource![indexPath.row].id!.localIdentifier) {[weak self] url, error in
guard self != nil else {return} guard self != nil else {return}
if let error = error { if let error = error {
print("获取视频 URL 时出错: \(error.localizedDescription)") print("获取视频 URL 时出错: \(error.localizedDescription)")
......
...@@ -305,7 +305,7 @@ class PhotoSimilarityFinder { ...@@ -305,7 +305,7 @@ class PhotoSimilarityFinder {
} }
} }
static func processSimilarVideoGroups(videoGroups: [[PHAsset]], completion: @escaping ([[String]]) -> Void) { static func processSimilarVideoGroups(videoGroups: [[PHAsset]], completion: @escaping ([[AssetModel]]) -> Void) {
print("开始处理相似视频组...") print("开始处理相似视频组...")
// 创建并发队列 // 创建并发队列
...@@ -390,11 +390,14 @@ class PhotoSimilarityFinder { ...@@ -390,11 +390,14 @@ class PhotoSimilarityFinder {
// 等待所有处理完成 // 等待所有处理完成
group.notify(queue: .main) { group.notify(queue: .main) {
// 将结果转换为 localIdentifier 数组 // 将结果转换为 localIdentifier 数组
let result = filteredGroups.map { group in var result :[[AssetModel]] = []
group.map { $0.localIdentifier } for item in filteredGroups{
var model : [AssetModel] = []
for item2 in item {
model.append(AssetModel(localIdentifier: item2.localIdentifier, assetSize: findAssetSize(asset: item2), createDate: item2.creationDate!))
}
result.append(model)
} }
print("处理完成,剩余 \(result.count) 组相似视频")
completion(result) completion(result)
} }
} }
...@@ -437,4 +440,18 @@ class PhotoSimilarityFinder { ...@@ -437,4 +440,18 @@ class PhotoSimilarityFinder {
} }
} }
} }
/// 计算asset资源大小
/// - Parameter asset: 资源
/// - Returns: 文件大小
private static func findAssetSize(asset: PHAsset)->Double{
let resources = PHAssetResource.assetResources(for: asset)
var assetSize : Int = 0
for resource in resources {
if let fileSize = resource.value(forKey: "fileSize") as? Int64 {
assetSize += Int(fileSize)
}
}
return Double(assetSize)
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment