Commit 63c05ef8 authored by shenyong's avatar shenyong

首页数据构造修改

parent a7703dda
...@@ -45,6 +45,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -45,6 +45,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
AdvManager.shared.initAdertisementSDK() AdvManager.shared.initAdertisementSDK()
PMEmailManager.shareManager.restore() PMEmailManager.shareManager.restore()
// 相册基本资源加载
PhotoManager.shared.config() PhotoManager.shared.config()
return true return true
......
...@@ -260,3 +260,14 @@ class TrashDatabase { ...@@ -260,3 +260,14 @@ class TrashDatabase {
sqlite3_close(db) sqlite3_close(db)
} }
} }
extension TrashDatabase{
func dealHomeData(type:Int){
}
}
import Foundation
import Photos
actor AssetSizeCache {
static let shared = AssetSizeCache()
private let cache: NSCache<NSString, NSNumber> = NSCache<NSString, NSNumber>()
private let fileQueue = DispatchQueue(label: "com.assetsize.fileoperations", qos: .utility)
// 临时存储,用于跟踪修改
private var tempStorage: [String: Int64] = [:]
private var hasChanges: Bool = false
private let cachePath: String = {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0].appendingPathComponent("AssetSizeCache.plist").path
}()
private init() {
Task {
await loadCache()
}
}
private func loadCache() {
fileQueue.sync {
if let dict = NSDictionary(contentsOfFile: cachePath) as? [String: Int64] {
for (key, value) in dict {
cache.setObject(NSNumber(value: value), forKey: key as NSString)
tempStorage[key] = value
}
}
}
}
func getSize(for asset: PHAsset) -> Int64? {
// 优先从内存缓存中读取
if let size = tempStorage[asset.localIdentifier] {
return size
}
return cache.object(forKey: asset.localIdentifier as NSString)?.int64Value
}
func setSize(_ size: Int64, for asset: PHAsset) {
cache.setObject(NSNumber(value: size), forKey: asset.localIdentifier as NSString)
tempStorage[asset.localIdentifier] = size
hasChanges = true
}
// 手动触发保存到文件
func saveToFile() {
guard hasChanges else { return }
let path = self.cachePath
let storageToSave = self.tempStorage
fileQueue.async {
(storageToSave as NSDictionary).write(toFile: path, atomically: true)
}
hasChanges = false
}
func clearCache() {
cache.removeAllObjects()
tempStorage.removeAll()
hasChanges = true
let path = self.cachePath
fileQueue.async {
try? FileManager.default.removeItem(atPath: path)
}
}
}
//
// PhotoCleanTool.swift
// PhoneManager
//
// Created by edy on 2025/5/15.
//
import Foundation
struct PhotoCleanTool{
// app内手动删除资源
func deleteLocalResouces(for ids:[String]){
let other = PhotoManager.shared.otherModels.filter{ids.contains($0.localIdentifier)}
let screen = PhotoManager.shared.screenShotModels.filter{ids.contains($0.localIdentifier)}
let video = PhotoManager.shared.videoModels.filter{ids.contains($0.localIdentifier)}
PhotoManager.shared.otherModels = other
PhotoManager.shared.screenShotModels = screen
PhotoManager.shared.videoModels = video
}
// 删除无效资源
func cleanIneffectiveResources(){
}
}
...@@ -88,6 +88,15 @@ class PhotoManager{ ...@@ -88,6 +88,15 @@ class PhotoManager{
// 重复图片分组 // 重复图片分组
var duplicateModels:[[AssetModel]] = [] var duplicateModels:[[AssetModel]] = []
// 过滤垃圾桶/保留相似图片分组
var filterSimilarModels:[[AssetModel]] = []
// 过滤垃圾桶/保留相似截图分组
var filterSimilarScreenShotModels:[[AssetModel]] = []
// 过滤垃圾桶/保留相似视频分组
var filterSimilarVideoModels:[[AssetModel]] = []
// // 过滤垃圾桶/保留重复图片分组
// var filterDuplicateModels:[[AssetModel]] = []
// 截图 // 截图
var screenShotModels:[AssetModel] = [] var screenShotModels:[AssetModel] = []
// 视频 // 视频
...@@ -95,6 +104,14 @@ class PhotoManager{ ...@@ -95,6 +104,14 @@ class PhotoManager{
// 其他 // 其他
var otherModels:[AssetModel] = [] var otherModels:[AssetModel] = []
// 过滤垃圾桶/保留截图
var filterScreenShotModels:[AssetModel] = []
// 过滤垃圾桶/保留视频
var filterVideoModels:[AssetModel] = []
// 过滤垃圾桶/保留其他
var filterOtherModels:[AssetModel] = []
private(set) var screenShotTotalSize:Int64 = 0 private(set) var screenShotTotalSize:Int64 = 0
private(set) var videoTotalSize:Int64 = 0 private(set) var videoTotalSize:Int64 = 0
private(set) var otherTotalSize:Int64 = 0 private(set) var otherTotalSize:Int64 = 0
...@@ -331,13 +348,30 @@ extension PhotoManager{ ...@@ -331,13 +348,30 @@ extension PhotoManager{
// 获取文件大小 // 获取文件大小
func getAssetSize(for asset:PHAsset) ->Int64{ // func getAssetSize(for asset:PHAsset) ->Int64{
// if let resource = PHAssetResource.assetResources(for: asset).first,
// let size = resource.value(forKey: "fileSize") as? Int64 {
// return size
// } else {
// return 0
// }
// }
func getAssetSize(for asset: PHAsset) async -> Int64 {
// 先尝试从缓存获取
if let cachedSize = await AssetSizeCache.shared.getSize(for: asset) {
return cachedSize
}
// 如果缓存中没有,则计算大小
if let resource = PHAssetResource.assetResources(for: asset).first, if let resource = PHAssetResource.assetResources(for: asset).first,
let size = resource.value(forKey: "fileSize") as? Int64 { let size = resource.value(forKey: "fileSize") as? Int64 {
// 将计算结果存入缓存
await AssetSizeCache.shared.setSize(size, for: asset)
return size return size
} else {
return 0
} }
return 0
} }
...@@ -585,6 +619,10 @@ extension PhotoManager{ ...@@ -585,6 +619,10 @@ extension PhotoManager{
} }
} }
func getTotalSize(source:[[AssetModel]]) ->Double{
return source.flatMap{$0}.reduce(0){$0+$1.assetSize}
}
// 获取所有资产的总数 // 获取所有资产的总数
// func fetchTotalAssets(completion: @escaping ([PHAsset]) -> Void) { // func fetchTotalAssets(completion: @escaping ([PHAsset]) -> Void) {
// DispatchQueue.global(qos: .background).async { // DispatchQueue.global(qos: .background).async {
...@@ -606,10 +644,9 @@ extension PhotoManager{ ...@@ -606,10 +644,9 @@ extension PhotoManager{
// } // }
} }
extension PhotoManager{ extension PhotoManager{
// 批量转模型
func convertAssetsToModel(for assets: [PHAsset], mediaType: Int) async -> [AssetModel] { func convertAssetsToModel(for assets: [PHAsset], mediaType: Int) async -> [AssetModel] {
let batchSize = 4 // 控制并发数量 let batchSize = 4 // 控制并发数量
var results: [AssetModel] = [] var results: [AssetModel] = []
...@@ -624,7 +661,7 @@ extension PhotoManager{ ...@@ -624,7 +661,7 @@ extension PhotoManager{
group.addTask { group.addTask {
return AssetModel( return AssetModel(
localIdentifier: asset.localIdentifier, localIdentifier: asset.localIdentifier,
assetSize: Double(self.getAssetSize(for: asset)), assetSize: Double(await self.getAssetSize(for: asset)),
createDate: asset.creationDate ?? Date(), createDate: asset.creationDate ?? Date(),
mediaType: mediaType mediaType: mediaType
) )
...@@ -640,6 +677,7 @@ extension PhotoManager{ ...@@ -640,6 +677,7 @@ extension PhotoManager{
return results return results
} }
// 获取总数据
func getModelsData(){ func getModelsData(){
Task{ Task{
let start = CFAbsoluteTimeGetCurrent() let start = CFAbsoluteTimeGetCurrent()
...@@ -660,3 +698,5 @@ extension PhotoManager{ ...@@ -660,3 +698,5 @@ extension PhotoManager{
} }
} }
} }
...@@ -10,7 +10,7 @@ import Photos ...@@ -10,7 +10,7 @@ import Photos
import UIKit import UIKit
@MainActor
class PhotoSimilarManager: @unchecked Sendable { class PhotoSimilarManager: @unchecked Sendable {
static let shared = PhotoSimilarManager() static let shared = PhotoSimilarManager()
...@@ -198,7 +198,6 @@ class PhotoSimilarManager: @unchecked Sendable { ...@@ -198,7 +198,6 @@ class PhotoSimilarManager: @unchecked Sendable {
} else { } else {
assetSize = 0 assetSize = 0
} }
let model = AssetModel( let model = AssetModel(
localIdentifier: asset.localIdentifier, localIdentifier: asset.localIdentifier,
assetSize: assetSize, assetSize: assetSize,
......
...@@ -9,7 +9,7 @@ import Foundation ...@@ -9,7 +9,7 @@ import Foundation
import Photos import Photos
import UIKit import UIKit
@MainActor
class ScreenshotSimilarJSONManager: @unchecked Sendable { class ScreenshotSimilarJSONManager: @unchecked Sendable {
static let shared = ScreenshotSimilarJSONManager() static let shared = ScreenshotSimilarJSONManager()
......
...@@ -44,7 +44,7 @@ private actor VideoAssetCacheManager { ...@@ -44,7 +44,7 @@ private actor VideoAssetCacheManager {
} }
@MainActor
class VideoSimilarJSONManager: @unchecked Sendable { class VideoSimilarJSONManager: @unchecked Sendable {
static let shared = VideoSimilarJSONManager() static let shared = VideoSimilarJSONManager()
private let stateManager = VideoSimilarStateManager() private let stateManager = VideoSimilarStateManager()
......
...@@ -162,6 +162,9 @@ class CustomProgressBar: UIView { ...@@ -162,6 +162,9 @@ class CustomProgressBar: UIView {
var chaoticProgress: CGFloat = 0 { var chaoticProgress: CGFloat = 0 {
didSet { didSet {
guard chaoticProgress != oldValue else{
return
}
scheduleProgressUpdate() scheduleProgressUpdate()
} }
} }
...@@ -240,7 +243,7 @@ class CustomProgressBar: UIView { ...@@ -240,7 +243,7 @@ class CustomProgressBar: UIView {
guard let self = self else { return } guard let self = self else { return }
// 计算总容量和各部分比例 // 计算总容量和各部分比例
let total = max(self.totalProgress, 0.001) // 避免除以0 let total = max(self.totalProgress + self.chaoticProgress, 0.001) // 避免除以0
let usedRatio = min(max(self.usedProgress / total, 0), 1) let usedRatio = min(max(self.usedProgress / total, 0), 1)
let chaoticRatio = min(max(self.chaoticProgress / total, 0), 1) let chaoticRatio = min(max(self.chaoticProgress / total, 0), 1)
......
...@@ -31,8 +31,9 @@ class HomeView:UIView { ...@@ -31,8 +31,9 @@ class HomeView:UIView {
// var model:PhotosManagerModel? // var model:PhotosManagerModel?
var viewModel:HomeViewModel? // var viewModel:HomeviewModel
private var viewModel = HomeViewModel.shared
var attribet:NSAttributedString? var attribet:NSAttributedString?
...@@ -73,41 +74,51 @@ class HomeView:UIView { ...@@ -73,41 +74,51 @@ class HomeView:UIView {
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
viewModel = HomeViewModel() // viewModel = HomeViewModel()
setupUI() setupUI()
viewModel?.setupBindings() viewModel.setupBindings()
viewModel?.homeDataChanged = {[weak self] section,row in viewModel.homeDataChanged = {[weak self] section,row in
guard let weakSelf = self else { return } guard let weakSelf = self else { return }
DispatchQueue.main.async {
if let cell = weakSelf.collectionView.cellForItem(at: IndexPath(row: row, section: section)) as? HomeTitleCollectionCell { if let cell = weakSelf.collectionView.cellForItem(at: IndexPath(row: row, section: section)) as? HomeTitleCollectionCell {
// 只更新需要改变的内容 // 只更新需要改变的内容
let model = weakSelf.viewModel?.headerGroup[row] let model = weakSelf.viewModel.headerGroup[row]
cell.reloadUIWithModel(model: model) cell.reloadUIWithModel(model: model)
} }
if let cell = weakSelf.collectionView.cellForItem(at: IndexPath(row: row, section: section)) as? HomeOtherCollectionCell { if let cell = weakSelf.collectionView.cellForItem(at: IndexPath(row: row, section: section)) as? HomeOtherCollectionCell {
// 只更新需要改变的内容 // 只更新需要改变的内容
let model = weakSelf.viewModel?.cardGroup[row] let model = weakSelf.viewModel.cardGroup[row]
cell.reloadUIWithModel(model: model) cell.reloadUIWithModel(model: model)
} }
weakSelf.homeHeader?.progressBar.chaoticProgress = CGFloat(weakSelf.viewModel?.totalSize ?? 0) weakSelf.homeHeader?.progressBar.chaoticProgress = CGFloat(weakSelf.viewModel.totalSize)
weakSelf.reloadHeadSize() weakSelf.reloadHeadSize()
} }
viewModel?.coverHadChange = { [weak self] in }
viewModel.reloadCellHeight = {[weak self] in
guard let weakSelf = self else { return } guard let weakSelf = self else { return }
print("刷新一次封面") DispatchQueue.main.async {
weakSelf.collectionView.reloadData() weakSelf.collectionView.reloadData()
} }
}
// viewModel.coverHadChange = { [weak self] in
// guard let weakSelf = self else { return }
// print("刷新一次封面")
// weakSelf.collectionView.reloadData()
// }
collectionView.reloadData() collectionView.reloadData()
} }
func reloadHeadSize(){ func reloadHeadSize(){
self.attribet = setFileAndCount(count: viewModel?.totalFilesCount ?? 0, fileSize: Double(viewModel?.totalSize ?? 0)) self.attribet = setFileAndCount(count: viewModel.totalFilesCount, fileSize: Double(viewModel.totalSize))
tipLabel.attributedText = attribet tipLabel.attributedText = attribet
} }
...@@ -230,10 +241,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -230,10 +241,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
switch section { switch section {
case 0: case 0:
return viewModel?.headerGroup.count ?? 0 // model?.titleModelArray.count ?? 0 return viewModel.headerGroup.count// model?.titleModelArray.count ?? 0
case 1: case 1:
return viewModel?.cardGroup.count ?? 0 //model?.otherModelArray.count ?? 0 return viewModel.cardGroup.count//model?.otherModelArray.count ?? 0
default: default:
return 0 return 0
...@@ -248,7 +259,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -248,7 +259,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
switch section { switch section {
case 0: case 0:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeTitleCollectionCell.identifiers, for: indexPath) as! HomeTitleCollectionCell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeTitleCollectionCell.identifiers, for: indexPath) as! HomeTitleCollectionCell
let model = viewModel?.headerGroup[indexPath.row] let model = viewModel.headerGroup[indexPath.row]
cell.reloadUIWithModel(model: model) cell.reloadUIWithModel(model: model)
// cell.reloadCoverData() // cell.reloadCoverData()
cell.homeTititlAction = {[weak self] idx in cell.homeTititlAction = {[weak self] idx in
...@@ -259,14 +270,14 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -259,14 +270,14 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
self.titleCallBack(model,.similar) self.titleCallBack(model,.similar)
} }
} }
cell.reloadCoverData(viewModel?.headCoverImages[indexPath.row] ?? []) // cell.reloadCoverData(viewModel.headCoverImages[indexPath.row] ?? [])
if indexPath.row == 0 { // if indexPath.row == 0 {
self.dupHeadCell = cell // self.dupHeadCell = cell
// cell.reloadCoverData(viewModel?.dupCoverImage ?? []) // // cell.reloadCoverData(viewModel.dupCoverImage ?? [])
}else{ // }else{
// cell.reloadCoverData(viewModel?.similarCoverImage ?? []) // // cell.reloadCoverData(viewModel.similarCoverImage ?? [])
self.similarHeadCell = cell // self.similarHeadCell = cell
} // }
if cell.model?.assets.count ?? 0 > 0 { if cell.model?.assets.count ?? 0 > 0 {
cell.fileLabel?.isHidden = false cell.fileLabel?.isHidden = false
...@@ -278,15 +289,15 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -278,15 +289,15 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
case 1: case 1:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeOtherCollectionCell.identifier, for: indexPath) as! HomeOtherCollectionCell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeOtherCollectionCell.identifier, for: indexPath) as! HomeOtherCollectionCell
cell.dealMediaType(indexPath.row) cell.dealMediaType(indexPath.row)
let model = viewModel?.cardGroup[indexPath.row] let model = viewModel.cardGroup[indexPath.row]
cell.reloadUIWithModel(model: model) cell.reloadUIWithModel(model: model)
Task { // Task {
if let image = await viewModel?.coverCache.getImage(index: indexPath.row) { // if let image = await viewModel.coverCache.getImage(index: indexPath.row) {
await MainActor.run { // await MainActor.run {
cell.setCoverImageOrVideo(image: image) // cell.setCoverImageOrVideo(image: image)
} // }
} // }
} // }
return cell return cell
default: default:
return UICollectionViewCell() return UICollectionViewCell()
...@@ -298,10 +309,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -298,10 +309,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
if indexPath.section == 0 { if indexPath.section == 0 {
let model = viewModel?.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row] let model = viewModel.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row]
if model?.assets.count ?? 0 > 0 { if model.assets.count > 0 {
return (model?.assets.first?.count ?? 0) > 2 ? ((collection.width - marginLR - 20) / 2.5) + 64 : ((collection.width - 2 * marginLR - 10) / 2) + 64 return (model.assets.first?.count ?? 0) > 2 ? ((collection.width - marginLR - 20) / 2.5) + 64 : ((collection.width - 2 * marginLR - 10) / 2) + 64
}else{ }else{
return 52 return 52
...@@ -310,9 +321,9 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -310,9 +321,9 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}else { }else {
let model = viewModel?.cardGroup[indexPath.row] //model?.otherModelArray[indexPath.row] let model = viewModel.cardGroup[indexPath.row] //model?.otherModelArray[indexPath.row]
return itemWidth + 12 + UILabel.getSizeWith(font: UIFont.systemFont(ofSize: 16, weight: .bold),lineSpacing: 5, width: itemWidth - 32, numberOfLines: 0, content: model?.folderName ?? "").height return itemWidth + 12 + UILabel.getSizeWith(font: UIFont.systemFont(ofSize: 16, weight: .bold),lineSpacing: 5, width: itemWidth - 32, numberOfLines: 0, content: model.folderName).height
} }
} }
...@@ -360,7 +371,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -360,7 +371,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if (indexPath.section == 0) { if (indexPath.section == 0) {
let smodel = viewModel?.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row] let smodel = viewModel.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row]
if indexPath.row == 0 { if indexPath.row == 0 {
titleCallBack(smodel,.duplicates) titleCallBack(smodel,.duplicates)
}else{ }else{
...@@ -368,8 +379,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -368,8 +379,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
} }
}else{ }else{
guard let smodel = viewModel?.cardGroup[indexPath.row] else { return } //model?.otherModelArray[indexPath.row] //guard let smodel = viewModel.cardGroup[indexPath.row] else { return } //model?.otherModelArray[indexPath.row]
let smodel = viewModel.cardGroup[indexPath.row]
otherItemCallBack(smodel,indexPath.row) otherItemCallBack(smodel,indexPath.row)
} }
} }
...@@ -385,8 +396,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -385,8 +396,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
} }
header.cleanNowButtonCallback = {[weak self] in header.cleanNowButtonCallback = {[weak self] in
guard let self = self else {return} guard let self = self else {return}
let smodel = self.viewModel?.headerGroup[0] //self.model?.titleModelArray[0] let smodel = self.viewModel.headerGroup[0]
let vc = HomeInfoViewController(ids: smodel!.assets , type: .duplicates,titleText: smodel!.folderName) let vc = HomeInfoViewController(ids: smodel.assets , type: .duplicates,titleText: smodel.folderName)
self.responderViewController()?.navigationController?.pushViewController(vc, animated: true) self.responderViewController()?.navigationController?.pushViewController(vc, animated: true)
} }
if indexPath.section != 0 { if indexPath.section != 0 {
......
...@@ -281,6 +281,14 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -281,6 +281,14 @@ class HomeOtherCollectionCell: UICollectionViewCell {
}else{ }else{
self.sizeLabel.text = String(format: "(%.2lf) GB" ,sizeKB/(1000 * 1000)) self.sizeLabel.text = String(format: "(%.2lf) GB" ,sizeKB/(1000 * 1000))
} }
let placeImage = self.mediaType == 0 ? "othermoren" : self.mediaType == 2 ? "photosmoren" : "videosmoren"
if let id = model.assets.first?.first?.localIdentifier{
imageView.asset.load(withLocalIdentifier:id,placeholder: UIImage(named: placeImage))
}else{
self.imageView.image = UIImage.init(named: placeImage)
}
} }
......
...@@ -131,18 +131,26 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -131,18 +131,26 @@ class HomeTitleCollectionCell:UICollectionViewCell {
fileLabel?.text = "\(count)" + " Photos " + (model.allFileSize > 0 ? "(\(formatFileSize(model.allFileSize)))" : "(Calculating...)") fileLabel?.text = "\(count)" + " Photos " + (model.allFileSize > 0 ? "(\(formatFileSize(model.allFileSize)))" : "(Calculating...)")
fileLabel?.sizeToFit() fileLabel?.sizeToFit()
collectionView?.reloadData()
}
func reloadCoverData(_ assets:[AssetModel]){
assetsModels.removeAll() assetsModels.removeAll()
if let assets = model.assets.first{
assetsModels = assets.compactMap({ model in assetsModels = assets.compactMap({ model in
return ImageCollectionModel.init(asset: model) return ImageCollectionModel.init(asset: model)
}) })
Print("刷新头部封面\(self)",assets.count)
collectionView?.reloadData() collectionView?.reloadData()
} }
}
// func reloadCoverData(_ assets:[AssetModel]){
// assetsModels.removeAll()
// assetsModels = assets.compactMap({ model in
// return ImageCollectionModel.init(asset: model)
// })
// Print("刷新头部封面\(self)",assets.count)
// collectionView?.reloadData()
// }
override func layoutSubviews() { override func layoutSubviews() {
super.layoutSubviews() super.layoutSubviews()
......
...@@ -48,8 +48,6 @@ class ImageCollectionCell:UICollectionViewCell { ...@@ -48,8 +48,6 @@ class ImageCollectionCell:UICollectionViewCell {
backImageView?.asset.load(withLocalIdentifier: model.asset.localIdentifier,placeholder: UIImage.init(named: "othermoren")) backImageView?.asset.load(withLocalIdentifier: model.asset.localIdentifier,placeholder: UIImage.init(named: "othermoren"))
} }
} }
......
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