Commit 7e531da8 authored by CZ1004's avatar CZ1004

修改首页问题

parent 939708d2
...@@ -55,7 +55,7 @@ class ChargeInfoSettingView:UIView { ...@@ -55,7 +55,7 @@ class ChargeInfoSettingView:UIView {
// 存储到userDefaults // 存储到userDefaults
UserDefaults.standard.set(String(flag!), forKey: "chargePicInfo") UserDefaults.standard.set(String(flag!), forKey: "chargePicInfo")
let alert = UIAlertController(title: nil, message: "完成!", preferredStyle: .alert) let alert = UIAlertController(title: nil, message: "Done!", preferredStyle: .alert)
self.responderViewController()?.present(alert, animated: true, completion: nil) self.responderViewController()?.present(alert, animated: true, completion: nil)
// 2 秒后关闭弹窗 // 2 秒后关闭弹窗
......
...@@ -15,6 +15,7 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -15,6 +15,7 @@ class HomePhotosDetailViewController : BaseViewController {
private var currentHeaderView: HomePhotosDetailCustomHeaderView? private var currentHeaderView: HomePhotosDetailCustomHeaderView?
var mediaType : PhotsFileType?
@MainActor required init?(coder: NSCoder) { @MainActor required init?(coder: NSCoder) {
...@@ -36,6 +37,7 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -36,6 +37,7 @@ class HomePhotosDetailViewController : BaseViewController {
dataArray = dataArray + item dataArray = dataArray + item
} }
self.resourceData = dataArray self.resourceData = dataArray
self.sortByType(sortType: self.currentSort)
} }
var model : HomePhotosModel var model : HomePhotosModel
...@@ -201,11 +203,19 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -201,11 +203,19 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
cell.cellCallBack = {[weak self] ident,order in cell.cellCallBack = {[weak self] ident,order in
guard let self else {return} guard let self else {return}
DispatchQueue.main.async { DispatchQueue.main.async {
// 点击跳转详情,左右滑动删除照片
let vc : PreViewController = PreViewController() // 点击之后跳转详情页面
vc.dataSource = self.resourceData let vc = PMShowImgVideoController()
vc.imageIdent = ident vc.state = .similarPhotos
vc.currentIdx = 0
let dataSource = ImageSeletedCollectionItem()
dataSource.isSeleted = true
dataSource.id = ident
// 获取image
dataSource.image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: ident)
vc.homeDataSource = [dataSource]
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
} }
cell.clickCallBack = {[weak self] click,order in cell.clickCallBack = {[weak self] click,order in
...@@ -254,6 +264,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -254,6 +264,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// 点击之后跳转详情页面 // 点击之后跳转详情页面
} }
func referenceSizeForHeader(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGSize { func referenceSizeForHeader(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGSize {
return CGSize (width: self.collectionView.width, height: headerHeight) return CGSize (width: self.collectionView.width, height: headerHeight)
...@@ -278,6 +289,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -278,6 +289,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
guard let self else {return} guard let self else {return}
self.currentSort = sortType as! Int self.currentSort = sortType as! Int
self.sortByType(sortType: self.currentSort) self.sortByType(sortType: self.currentSort)
self.changeHeaderTitle()
} }
} }
...@@ -292,97 +304,87 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -292,97 +304,87 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
return footer return footer
} }
} }
func sortByType(sortType:Int){
let viewModel = CompressViewModel()
if self.datas.count > 0 { /// 改变标题
switch sortType { func changeHeaderTitle(){
var title : String = "Largest"
switch self.currentSort {
case 0: case 0:
self.currentHeaderView!.selectlabel.text = "Largest" title = "Largest"
// 按照文件大小降序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 1, sortKind: 0)
break break
case 1: case 1:
self.currentHeaderView!.selectlabel.text = "Smallest" title = "Smallest"
// 按照文件大小升序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 0, sortKind: 0)
break break
case 2: case 2:
self.currentHeaderView!.selectlabel.text = "Newest" title = "Newest"
// 按照时间降序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 1, sortKind: 1)
break break
case 3: case 3:
self.currentHeaderView!.selectlabel.text = "Oldest" title = "Oldest"
// 按照时间升序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 0, sortKind: 1)
break break
default: default:
break break
} }
var finalData : [String] = []
for item in self.datas {
finalData.append(item.ident)
}
self.resourceData = finalData
self.collectionView.reloadData()
}else{
DispatchQueue.global().async {
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.resourceData, options: nil)
let assetsArray = fetchResult.objects(at: IndexSet(0..<fetchResult.count))
let options = PHImageRequestOptions()
options.isSynchronous = false
options.deliveryMode = .highQualityFormat
options.isNetworkAccessAllowed = true
var count = 0
for item in assetsArray {
PHImageManager.default().requestImageDataAndOrientation(for: item, options: options) { (imageData, _, _, error) in
guard let originalData = imageData else {
return
}
let model = ResourceModel(ident: item.localIdentifier, orgSize: Double(originalData.count), createDate: item.creationDate!)
self.datas.append(model)
}
count = count + 1
// 表示结束了
if count == assetsArray.count {
DispatchQueue.main.async { DispatchQueue.main.async {
switch sortType { self.currentHeaderView!.selectlabel.text = title
case 0: self.collectionView.reloadData()
self.currentHeaderView!.selectlabel.text = "Largest"
// 按照文件大小降序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 1, sortKind: 0)
break
case 1:
self.currentHeaderView!.selectlabel.text = "Smallest"
// 按照文件大小升序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 0, sortKind: 0)
break
case 2:
self.currentHeaderView!.selectlabel.text = "Newest"
// 按照时间降序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 1, sortKind: 1)
break
case 3:
self.currentHeaderView!.selectlabel.text = "Oldest"
// 按照时间升序
self.datas = viewModel.sortRsource(resource: self.datas, sortType: 0, sortKind: 1)
break
default:
break
} }
var finalData : [String] = []
for item in self.datas {
finalData.append(item.ident)
} }
self.resourceData = finalData
self.collectionView.reloadData() /// 对当前页面资源排序(注意这里获取的资源是image)
/// - Parameter sortType: 排序类型
func sortByType(sortType:Int){
// 实际就是对Video数据排序
var assetsWithSize: [(asset: PHAsset, size: Int64)] = []
let allImagesResult = PHAsset.fetchAssets(withLocalIdentifiers: self.resourceData, options: nil)
let allImages = allImagesResult.objects(at: IndexSet(0..<allImagesResult.count))
for item in allImages {
let resources = PHAssetResource.assetResources(for: item)
for resource in resources {
if let fileSize = resource.value(forKey: "fileSize") as? Int64 {
assetsWithSize.append((item, fileSize))
} }
} }
} }
if sortType == 0 || sortType == 1 {
if sortType == 0 {
assetsWithSize = assetsWithSize.sorted { $0.size > $1.size }
}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
}
} }
...@@ -407,7 +409,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -407,7 +409,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
// 更新页面 // 更新页面
DispatchQueue.main.async { DispatchQueue.main.async {
self.clearSelected() self.clearSelected()
self.collectionView.reloadData() self.collectionView.reloadSections(IndexSet(integer: 0))
} }
} }
......
...@@ -60,6 +60,11 @@ class HomeViewController:BaseViewController { ...@@ -60,6 +60,11 @@ class HomeViewController:BaseViewController {
if otherItemRow == 2 || otherItemRow == 4{ if otherItemRow == 2 || otherItemRow == 4{
DispatchQueue.main.async { DispatchQueue.main.async {
let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(model: model) let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(model: model)
if otherItemRow == 2 {
vc.mediaType = .screenshots
}else{
vc.mediaType = .Other
}
vc.dealData() vc.dealData()
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
......
...@@ -54,7 +54,7 @@ class VideoDetaiNavView : UIView { ...@@ -54,7 +54,7 @@ class VideoDetaiNavView : UIView {
self.addSubview(self.seletedAllBtn) self.addSubview(self.seletedAllBtn)
self.seletedAllBtn.snp.makeConstraints { make in self.seletedAllBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-15) make.right.equalToSuperview().offset(-23)
make.centerY.equalTo(self.backButton.snp.centerY) make.centerY.equalTo(self.backButton.snp.centerY)
} }
......
...@@ -232,19 +232,6 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa ...@@ -232,19 +232,6 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
return return
} }
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
print("Access granted")
case .denied, .restricted:
print("Access denied")
case .notDetermined:
print("Access not determined")
@unknown default:
print("Unhandled authorization status")
}
}
let options = PHVideoRequestOptions() let options = PHVideoRequestOptions()
options.isNetworkAccessAllowed = true // 允许从网络下载 options.isNetworkAccessAllowed = true // 允许从网络下载
options.deliveryMode = .automatic // 要求高质量格式 options.deliveryMode = .automatic // 要求高质量格式
......
...@@ -799,6 +799,37 @@ class PhotoAndVideoMananger { ...@@ -799,6 +799,37 @@ class PhotoAndVideoMananger {
// MARK: - 处理截图数据------------------------------------------------------- // MARK: - 处理截图数据-------------------------------------------------------
/// 获取视频第一帧
/// - Parameters:
/// - ident: 视频的标识
/// - finished: 完成回调
func getVideoImageByIdent(ident: String,finished:@escaping (UIImage)->Void,errorHandler:@escaping ()->Void){
// 定义请求选项来获取视频的第一帧
let options = PHImageRequestOptions()
// 获取当前版本的照片或视频
options.version = .current
// 尽可能快地提供结果
options.deliveryMode = .opportunistic
// 允许从iCloud请求
options.isNetworkAccessAllowed = true
// 异步请求
options.isSynchronous = true
// 从 PHAsset 获取 AVAsset
if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [ident]){
// 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in
// 处理获取到的图片
if let thumbnailImage = image {
// 使用获取到的图片,例如显示在UIImageView上
finished(thumbnailImage)
} else {
errorHandler()
}
}
}
}
} }
......
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