Commit 18dcf1a5 authored by yqz's avatar yqz

Merge branch 'dev_zhaoqian' into yQz0507

* dev_zhaoqian:
  【优化】部分图表替换
  【优化】选择框时间选择记住时间
  【优化】修复bug
  【新增】列表页垃圾桶

# Conflicts:
#	PhoneManager/Class/Page/Secret/PMShowImgVideoController.swift
parents 6e9fa4c3 ab524572
{
"images" : [
{
"filename" : "Frame.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Frame.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Frame.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Frame.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Frame.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "Frame_1318.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Frame_1318@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame_1318@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "重复项说明-icon-未选中.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "重复项说明-icon-未选中@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "重复项说明-icon-未选中@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "重复项说明-icon-选中.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "重复项说明-icon-选中@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "重复项说明-icon-选中@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "重复项说明-icon-选中.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "重复项说明-icon-选中@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "重复项说明-icon-选中@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
......@@ -370,8 +370,6 @@ class CompressCompletedViewController : BaseViewController{
// 移除VC中的数据
let compressVC = self.navigationController?.viewControllers.first(where: { $0 is CompressController }) as! CompressController as CompressController
compressVC.resourceData.removeAll { $0.localIdentifier == flag }
// 移除单利中的数据
Singleton.shared.resourceModel.removeAll{ $0.localIdentifier == flag }
}
}
......
......@@ -117,21 +117,9 @@ class CompressController : BaseViewController {
}
self.resourceData.removeAll()
let datas = Singleton.shared.resourceModel
if datas.count > 0 {
// 这里需要重新排序下
self.resourceData = datas
self.sortByType(sortType: self.currentSort)
}else{
PMLoadingHUD.share.show("Loading...", "Please wait on the screen. This might take several minutes.")
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return}
self.resourceData = models
Singleton.shared.resourceModel = self.resourceData
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss()
}
}
}
}
......@@ -231,10 +219,16 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CompressCustomHeaderView", for: indexPath) as! CompressCustomHeaderView
header.sortViewSubmitCallBack = { [weak self] fileterModel in
header.sortViewSubmitCallBack = { [weak self] filterModel in
guard let self else {return}
self.currentSort = fileterModel.sortType
self.sortByType(sortType: self.currentSort)
// 重新获取数据,过滤数据
self.currentSort = filterModel.sortType
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return}
// 过滤数据
let tempData = self.filterDataByDate(orgModels: models , startDate: filterModel.startDate, endDate: filterModel.endDate)
self.resourceData = tempData
}
}
header.changeView.callBack = {[weak self] flag in
guard let self else {return}
......@@ -247,13 +241,9 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
if self.currentResourceType == .compressPhoto {
self.getViewData()
}else{
PMLoadingHUD.share.show("Loading...", "Please wait on the screen. This might take several minutes.")
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: flag) { [weak self] models in
guard let self else {return}
self.resourceData = models
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss()
}
}
}
}
......@@ -271,6 +261,17 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
}
}
private func filterDataByDate(orgModels : [AssetModel], startDate:Date? ,endDate : Date?)->[AssetModel]{
var array = orgModels
if startDate != nil {
array = array.filter({$0.createDate >= startDate!})
}
if endDate != nil {
array = array.filter({$0.createDate <= endDate!})
}
return array
}
func sortByType(sortType:ResouceSortType){
switch sortType {
case .largest:
......
......@@ -9,6 +9,8 @@ import Foundation
class CompressCustomHeaderView: UICollectionReusableView{
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var modeData = [AssetModel]() {
......@@ -169,12 +171,15 @@ class CompressCustomHeaderView: UICollectionReusableView{
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 这里将原来的数据传递过去
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -68,45 +68,13 @@ class CompressViewModel{
/// 获取相册所有图片
/// - Returns: 图片信息
func getAllPhotosToAssets(sortType: ResouceSortType, assetType : CompressType,_ finished: @escaping Finished){
var models : [AssetModel] = []
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
var photosAssets : PHFetchResult<PHAsset>
PhotoManager.shared.reloadTrashAndKeep()
if assetType == .compressPhoto {
photosAssets = PHAsset.fetchAssets(with: .image, options: fetchOptions)
}else{
photosAssets = PHAsset.fetchAssets(with: .video, options: fetchOptions)
}
// 获取到了所有图片的assets
let assetsArray = photosAssets.objects(at: IndexSet(0..<photosAssets.count))
let group = DispatchGroup()
var count = 0
for asset in assetsArray {
group.enter()
DispatchQueue.global().async {
// 图片大小
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)
}
}
let sizeInMB = assetSize
// 获取图片的日期
let creationDate = asset.creationDate!
// 获取图片的localIdentifier
let localIdentifier = asset.localIdentifier
let model = AssetModel.init(localIdentifier: localIdentifier, assetSize: Double(sizeInMB), createDate: creationDate)
models.append(model)
count = count + 1
group.leave()
if count == assetsArray.count {
models = PhotoManager.shared.filterOtherModels + PhotoManager.shared.filterScreenShotModels
}else {
models = PhotoManager.shared.filterVideoModels
}
// 默认按照文件大小排序
if sortType == .largest {
finished(models.sorted { $0.assetSize > $1.assetSize })
......@@ -117,10 +85,6 @@ class CompressViewModel{
}else{
finished(models.sorted { $0.createDate < $1.createDate })
}
}
}
}
}
......
......@@ -47,21 +47,21 @@ class HomePhotosDetailViewController : BaseViewController {
self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight + 78)
self.deleteViewBottomConstraint?.update(offset: safeHeight + 78)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight)
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height)
}else if self.selectedModel.count == 1{
self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Photo", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight)
self.deleteViewBottomConstraint?.update(offset: 0)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
}else{
self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Photos", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight)
self.deleteViewBottomConstraint?.update(offset: 0)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
}
......@@ -194,10 +194,10 @@ class HomePhotosDetailViewController : BaseViewController {
self.view.addSubview(self.deleteButtonView)
self.deleteButtonView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15)
make.height.equalTo(78)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(-safeHeight + 78).constraint
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(78 + safeHeight)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(safeHeight + 78).constraint
}
self.view.addSubview(self.defaultImageView)
......@@ -224,8 +224,8 @@ class HomePhotosDetailViewController : BaseViewController {
self.view.addSubview(self.trashSubView)
self.trashSubView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-safeHeight)
make.height.equalTo(78)
make.bottom.equalToSuperview().offset(0)
make.height.equalTo(78 + safeHeight)
}
// 判断垃圾桶有没有数据
let array = TrashDataManager.getCurrentMediaTypeTrashData(mediaType: self.mediaType == PhotsFileType.Other ? TrashTypeEnum.other : TrashTypeEnum.shot)
......@@ -238,7 +238,7 @@ class HomePhotosDetailViewController : BaseViewController {
if array.count > 0 {
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
}else{
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight)
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height)
}
}
}
......@@ -290,6 +290,9 @@ class HomePhotosDetailViewController : BaseViewController {
let vc : TrashViewController = TrashViewController()
vc.currentPage = self.mediaType == PhotsFileType.Other ? 2 : 3
vc.dissmisCallBack = {
self.getCurrentPageData {
self.collectionView.reloadData()
}
self.addTrashView()
}
self.present(vc, animated: true)
......@@ -303,8 +306,13 @@ class HomePhotosDetailViewController : BaseViewController {
self.addTrashView()
}
}
self.addListener()
}
deinit {
NotificationCenter.default.removeObserver(self)
}
func showTipsVC(){
guard let mediaType = mediaType else{
......@@ -409,6 +417,7 @@ class HomePhotosDetailViewController : BaseViewController {
completed(cachedImage!)
}
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [model.localIdentifier], options: nil)
let assetsArray = fetchResult.objects(at: IndexSet(0..<fetchResult.count))
let options = PHImageRequestOptions()
......@@ -561,13 +570,13 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
if kind == UICollectionView.elementKindSectionHeader {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HomePhotosDetailCustomHeaderView", for: indexPath) as! HomePhotosDetailCustomHeaderView
// 记录当前的 headerView
header.countLabel.text = "\(self.resourceData.count) Photos"
header.countLabel.attributedText = header.getAttrText(fullText: "\(self.resourceData.count) Photos")
header.modelTitlelabel.text = self.mediaType?.rawValue
currentHeaderView = header
header.sortViewSubmitCallBack = {[weak self] filterModel in
guard let self else {return}
PhotoManager.shared.reloadTrashAndKeep()
var dataS : [AssetModel] = []
if self.mediaType == .Other{
dataS = PhotoManager.shared.filterOtherModels
......@@ -823,7 +832,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
// 更新下头部数量
DispatchQueue.main.async {
if self.currentHeaderView != nil {
self.currentHeaderView?.countLabel.text = "\(self.resourceData.count) Photos"
self.currentHeaderView?.countLabel.attributedText = self.currentHeaderView?.getAttrText(fullText: "\(self.resourceData.count) Photos")
}
}
......@@ -848,5 +857,26 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
private func addListener(){
NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToPhotosDetailPageName, object: nil, queue: .main) { [weak self] notification in
guard let self = self,
let type = notification.userInfo?["type"] as? String else { return }
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false)
let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(mediaType: type == "Other" ? PhotsFileType.Other : PhotsFileType.screenshots)
targetVC.navigationController?.pushViewController(vc, animated: true)
}
}
NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToVideosDetailPageName, object: nil, queue: .main) { [weak self] notification in
guard let self else {return}
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false)
let vc:HomeVideoDetailController = HomeVideoDetailController()
targetVC.navigationController?.pushViewController(vc, animated: true)
}
}
}
}
......@@ -40,21 +40,21 @@ class HomeVideoDetailController :BaseViewController {
self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight + 78)
self.deleteViewBottomConstraint?.update(offset: safeHeight + 78)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight)
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height)
} else if self.selectedModel.count == 1{
self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Video", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight)
self.deleteViewBottomConstraint?.update(offset: 0)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78)
}else{
self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Videos", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -safeHeight)
self.deleteViewBottomConstraint?.update(offset: 0)
}
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
}
......@@ -146,6 +146,10 @@ class HomeVideoDetailController :BaseViewController {
completed()
}
deinit {
NotificationCenter.default.removeObserver(self)
}
// MARK: 数据操作 - 辅助方法
/// 过滤垃圾桶数据 - 当前页面数据本身就是已经过滤了垃圾桶数据库的数据了,所以只需要过滤掉单利中的数据
......@@ -228,10 +232,10 @@ class HomeVideoDetailController :BaseViewController {
self.view.addSubview(self.deleteButtonView)
self.deleteButtonView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15)
make.height.equalTo(78)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(-safeHeight + 78).constraint
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(78 + safeHeight)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(safeHeight + 78).constraint
}
self.view.addSubview(self.defaultImageView)
self.defaultImageView.snp.makeConstraints { make in
......@@ -269,6 +273,9 @@ class HomeVideoDetailController :BaseViewController {
let vc : TrashViewController = TrashViewController()
vc.currentPage = 1
vc.dissmisCallBack = {
self.getCurrentPageData {
self.collectionView.reloadData()
}
self.addTrashView()
}
self.present(vc, animated: true)
......@@ -282,6 +289,8 @@ class HomeVideoDetailController :BaseViewController {
self.addTrashView()
}
}
self.addListener()
}
/// 是否添加垃圾桶数据
......@@ -291,8 +300,8 @@ class HomeVideoDetailController :BaseViewController {
self.view.addSubview(self.trashSubView)
self.trashSubView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-safeHeight)
make.height.equalTo(78)
make.bottom.equalToSuperview().offset(0)
make.height.equalTo(78 + safeHeight)
}
// 判断垃圾桶有没有数据
let array = TrashDataManager.getCurrentMediaTypeTrashData(mediaType:TrashTypeEnum.video)
......@@ -305,7 +314,7 @@ class HomeVideoDetailController :BaseViewController {
if array.count > 0 {
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 78 - safeHeight)
}else{
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight)
self.collectionView.frame = CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height)
}
}
}
......@@ -385,6 +394,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
self.navigationController?.pushViewController(vc, animated: true)
}else {
let vc = PMShowImgVideoController()
vc.oldPageIndexPath = indexPath
vc.state = .similarVideos
vc.currentIdx = 0
let dataSource = ImageSeletedCollectionItem()
......@@ -429,8 +439,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
}
self.navigationController?.pushViewController(vc, animated: true)
}
} errorHandler: {
......@@ -487,10 +495,10 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
// 记录当前的 headerView
currentHeaderView = header
header.compressionTipView.reloadData()
header.sizeLabel.text = "\(self.resourceData.count) Videos"
header.sizeLabel.attributedText = header.getAttrText(fullText: "\(self.resourceData.count) Videos")
header.sortViewSubmitCallBack = {[weak self] filterModel in
guard let self else {return}
PhotoManager.shared.reloadTrashAndKeep()
let dataS : [AssetModel] = PhotoManager.shared.filterVideoModels
let tempData = self.filterDataByDate(orgModels: dataS , startDate: filterModel.startDate, endDate: filterModel.endDate)
// 重新更新下数据源
......@@ -751,7 +759,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
if self.currentHeaderView != nil {
self.currentHeaderView?.sizeLabel.text = "\(self.resourceData.count) Videos"
self.currentHeaderView?.sizeLabel.attributedText = self.currentHeaderView?.getAttrText(fullText: "\(self.resourceData.count) Videos")
}
UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: {
......@@ -779,4 +787,24 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
private func addListener(){
NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToPhotosDetailPageName, object: nil, queue: .main) { [weak self] notification in
guard let self = self,
let type = notification.userInfo?["type"] as? String else { return }
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false)
let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(mediaType: type == "Other" ? PhotsFileType.Other : PhotsFileType.screenshots)
targetVC.navigationController?.pushViewController(vc, animated: true)
}
}
NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToVideosDetailPageName, object: nil, queue: .main) { [weak self] notification in
guard let self else {return}
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false)
let vc:HomeVideoDetailController = HomeVideoDetailController()
targetVC.navigationController?.pushViewController(vc, animated: true)
}
}
}
}
......@@ -26,8 +26,8 @@ class PhotoRemoveViewController: BaseViewController {
let formatter = DateFormatter()
lazy var navView : PhotoRemoveNavView = {
let view = PhotoRemoveNavView()
lazy var navView : PhotoVideoDetailNavView = {
let view = PhotoVideoDetailNavView()
return view
}()
......@@ -83,7 +83,7 @@ class PhotoRemoveViewController: BaseViewController {
formatter.dateStyle = .medium
formatter.timeStyle = .none
if let type = self.mediaType {
self.navView.mediaType = type
self.navView.showType = type == .video ? .dateAndSizeNav : .dateTimeNav
}
self.view.addSubview(self.navView)
self.navView.snp.makeConstraints { make in
......@@ -95,8 +95,8 @@ class PhotoRemoveViewController: BaseViewController {
self.view.addSubview(self.trashSubView)
self.trashSubView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
self.bottomConstraint = make.bottom.equalToSuperview().offset(78).constraint
make.height.equalTo(78)
self.bottomConstraint = make.bottom.equalToSuperview().offset(78 + safeHeight).constraint
make.height.equalTo(78 + safeHeight)
}
self.trashSubView.clearTashDataCallBack = {[weak self] in
......@@ -239,7 +239,7 @@ class PhotoRemoveViewController: BaseViewController {
self.trashSubView.isHidden = false
UIView.animate(withDuration: 0.1) {
// 更新约束
self.bottomConstraint?.update(offset: -safeHeight)
self.bottomConstraint?.update(offset: 0)
}
}
}
......@@ -247,7 +247,7 @@ class PhotoRemoveViewController: BaseViewController {
DispatchQueue.main.async {
UIView.animate(withDuration: 0.1) {
// 更新约束
self.bottomConstraint?.update(offset: -78)
self.bottomConstraint?.update(offset: 78 + safeHeight)
}completion: { finished in
self.trashSubView.isHidden = true
}
......@@ -552,16 +552,6 @@ class PhotoRemoveViewController: BaseViewController {
}
}
}
@objc func popCurrentPage(){
}
deinit {
NotificationCenter.default.removeObserver(self)
}
......
......@@ -9,6 +9,8 @@ import Foundation
class DateSelectButtonView : UIView {
var closeCallBack : ()->Void = {}
var type : PikerDateType?
lazy var dateButton : UIButton = {
......@@ -54,6 +56,7 @@ class DateSelectButtonView : UIView {
@objc func closeButtonAction(){
reSetButtonTitle()
self.closeCallBack()
}
func reSetButtonTitle() {
......
......@@ -117,6 +117,7 @@ class HomeInfoView :UIView {
self.headerView.sortViewSubmitCallBack = {[weak self]filterModel in
PhotoManager.shared.reloadTrashAndKeep()
guard let self else {return}
var dataS : [[AssetModel]] = []
if self.type == .SimilarVideos{
......@@ -497,6 +498,8 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
class HomeInfoTitleView:UIView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var type : PhotsFileType?
......@@ -610,12 +613,13 @@ class HomeInfoTitleView:UIView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -9,6 +9,8 @@ import Foundation
class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = {
......@@ -38,13 +40,21 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
lazy var countLabel :UILabel = {
let label = UILabel()
label.text = "0 Photos"
label.textAlignment = .left
label.textColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .regular)
label.attributedText = self.getAttrText(fullText: "0 Photos")
return label
}()
func getAttrText(fullText:String)->NSMutableAttributedString{
let attributedString = NSMutableAttributedString(string: fullText)
let range = (fullText as NSString).range(of: "Photos")
attributedString.addAttribute(.foregroundColor, value: UIColor(red: 0.6, green: 0.6, blue: 0.6,alpha:1), range: range)
return attributedString
}
private func setUI(){
self.addSubview(self.modelTitlelabel)
......@@ -86,12 +96,13 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -8,6 +8,8 @@
import Foundation
class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = {
......@@ -34,14 +36,23 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
}()
lazy var sizeLabel :UILabel = {
let label = UILabel()
label.text = "0 Videos"
label.textAlignment = .left
label.textColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .regular)
label.attributedText = self.getAttrText(fullText: "0 Videos")
return label
}()
func getAttrText(fullText:String)->NSMutableAttributedString{
let attributedString = NSMutableAttributedString(string: fullText)
let range = (fullText as NSString).range(of: "Videos")
attributedString.addAttribute(.foregroundColor, value: UIColor(red: 0.6, green: 0.6, blue: 0.6,alpha:1), range: range)
return attributedString
}
private func setUI(){
self.addSubview(self.modelTitlelabel)
......@@ -99,12 +110,13 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -111,10 +111,6 @@ class PhotoDataManager {
let dataUpdated = Notification.Name("DataUpdatedNotification")
NotificationCenter.default.post(name: dataUpdated, object: nil, userInfo: nil)
})
// 将单利中的数据也删除
for item in data {
Singleton.shared.resourceModel.removeAll{ $0.localIdentifier == item.localIdentifier }
}
}
// 从文件读取
......
......@@ -8,7 +8,12 @@
import UIKit
import SnapKit
class PhotoRemoveNavView: UIView {
enum PhotoVideoDetailNavType {
case dateTimeNav
case dateAndSizeNav
}
class PhotoVideoDetailNavView: UIView {
public var backButton:UIButton!
......@@ -22,11 +27,11 @@ class PhotoRemoveNavView: UIView {
var reSetCallBack:()->Void = {}
public var mediaType : TrashTypeEnum = .shot {
public var showType : PhotoVideoDetailNavType = .dateTimeNav {
didSet{
if mediaType == .video {
if showType == .dateAndSizeNav {
self.sizeLbel.isHidden = false
self.topConstraint?.update(offset: 22 + statusBarHeight)
self.topConstraint?.update(offset: 19 + statusBarHeight)
}else{
self.sizeLbel.isHidden = true
self.topConstraint?.update(offset: 6 + statusBarHeight)
......@@ -68,7 +73,7 @@ class PhotoRemoveNavView: UIView {
sizeLbel.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalToSuperview().offset(statusBarHeight)
make.top.equalToSuperview().offset(statusBarHeight - 3)
make.height.equalTo(22)
}
......
......@@ -35,7 +35,7 @@ class ResourceFilterBoxView : UIView {
var startDate : Date?
var endDate : Date?
var currentIndex: Int = 0
var currentSortType: ResouceSortType = .largest
let tableData: [String] = ["The largest", "The smallest", "The latest", "The oldest"]
var callBack : callBack<Any> = {sortType in}
......@@ -112,12 +112,75 @@ class ResourceFilterBoxView : UIView {
return view
}()
override init(frame: CGRect) {
init(frame: CGRect,startDate : Date?, endDate :Date?,sortType: ResouceSortType?) {
super.init(frame: frame)
self.startDate = startDate
self.endDate = endDate
if let sortType = sortType {
self.currentSortType = sortType
}
addViews()
setUpUI()
self.setDefaultDataInPage()
}
private func setDefaultDataInPage(){
// 设置按钮
resetByType(date: self.startDate, type: PikerDateType.start)
resetByType(date: self.endDate, type: PikerDateType.end)
// 设置选择框
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
/// 设置当前年月
/// - Parameters:
/// - date: 时间
/// - type: 类型
private func resetByType(date:Date?,type:PikerDateType){
if let date = date {
let timeNumber = getYearAndMonthFromDate(currentDate: date)
if let year = timeNumber.0{
if let month = timeNumber.1 {
self.resetDateStringFromYearAndMonth(year: year, month: month, type: type)
}
}
}
}
/// 通过时间获取年月
/// - Parameter currentDate: 当前时间
/// - Returns: 年和月
private func getYearAndMonthFromDate(currentDate : Date)->(Int?,Int?){
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month], from: currentDate)
return (components.year,components.month)
}
/// 设置按钮显示
/// - Parameters:
/// - year: 年
/// - month: 月
/// - type: 按钮类型
func resetDateStringFromYearAndMonth(year: Int, month: Int ,type: PikerDateType){
DispatchQueue.main.async {
if type == .start {
self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.startDateButton.closeButton.isHidden = false
self.startDate = self.dateFrom(year: year, month: month)
}else {
self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.endDateButton.closeButton.isHidden = false
self.endDate = self.lastDayOfMonth(year: year, month: month)
}
}
}
func getMonthEn(month: Int) -> String {
// 检查输入是否在有效范围内(1-12)
guard (1...12).contains(month) else {
......@@ -149,6 +212,13 @@ class ResourceFilterBoxView : UIView {
self.selectedView.addSubview(self.tableView)
self.selectedView.addSubview(self.applyButton)
self.startDateButton.closeCallBack = {
self.startDate = nil
}
self.endDateButton.closeCallBack = {
self.endDate = nil
}
self.startDateButton.reSetButtonTitle()
self.endDateButton.reSetButtonTitle()
......@@ -219,27 +289,10 @@ class ResourceFilterBoxView : UIView {
self.removeFromSuperview()
cWindow?.hideBlur()
self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: getSortTypeByTag(tag:self.currentIndex)))
self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: self.currentSortType))
// 开始排序
}
func getSortTypeByTag(tag : Int) -> ResouceSortType{
var tempType : ResouceSortType = .largest
switch self.currentIndex {
case 0:
tempType = .largest
case 1:
tempType = .smallest
case 2:
tempType = .latest
case 3:
tempType = .oldest
default:
break
}
return tempType
}
func dateFrom(year: Int, month: Int) -> Date? {
var components = DateComponents()
components.year = year
......@@ -320,17 +373,7 @@ class ResourceFilterBoxView : UIView {
self.dismissDatePicker()
}
self.datePicker?.onConfirm = {type,year,month in
DispatchQueue.main.async {
if type == .start {
self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.startDateButton.closeButton.isHidden = false
self.startDate = self.dateFrom(year: year, month: month)
}else {
self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.endDateButton.closeButton.isHidden = false
self.endDate = self.lastDayOfMonth(year: year, month: month)
}
}
self.resetDateStringFromYearAndMonth(year: year, month: month, type: type)
self.dismissDatePicker()
}
}
......@@ -359,10 +402,10 @@ extension ResourceFilterBoxView : UITableViewDataSource,UITableViewDelegate {
cell.selectButton.setTitle(tableData[indexPath.row], for: .normal)
cell.callBack = { [weak self] cellTag in
guard let self = self else { return }
self.currentIndex = cellTag as! Int
self.currentSortType = getSortTypeByTag(index: cellTag as! Int)
self.tableView.reloadData()
}
if indexPath.row == currentIndex {
if getSortTypeByTag(index: indexPath.row) == currentSortType {
cell.selectButton.layer.borderWidth = 1.0
cell.selectButton.setTitleColor(UIColor(red: 0, green: 0.51, blue: 1, alpha: 1), for: .normal)
} else {
......@@ -375,4 +418,20 @@ extension ResourceFilterBoxView : UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 56
}
func getSortTypeByTag(index : Int) -> ResouceSortType {
if index == 0 {
return ResouceSortType.largest
}
if index == 1 {
return ResouceSortType.smallest
}
if index == 2 {
return ResouceSortType.latest
}
if index == 3 {
return ResouceSortType.oldest
}
return ResouceSortType.largest
}
}
......@@ -64,20 +64,20 @@ class TrashSubView: UIView {
private func setUILocation(){
self.resourceCountlabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.centerY.equalToSuperview()
make.top.equalToSuperview().offset(28)
make.height.equalTo(22)
make.width.equalTo(30)
}
self.tipLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(17)
make.bottom.equalToSuperview().offset(-17)
make.bottom.equalToSuperview().offset(-17 - safeHeight)
make.left.equalTo(self.resourceCountlabel.snp.right).offset(11)
make.width.equalTo(100)
}
self.emptyButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-9)
make.height.equalTo(38)
make.centerY.equalToSuperview()
make.top.equalToSuperview().offset(20)
make.width.equalTo(145)
}
}
......
......@@ -20,9 +20,9 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell {
var choose : Bool = false {
didSet{
if choose {
self.selectImageView.image = UIImage(named: "ic_unsel_com")
self.selectImageView.image = UIImage(named: "重复项说明-icon-选中")
}else{
self.selectImageView.image = UIImage(named: "ic_sel_com")
self.selectImageView.image = UIImage(named: "Frame 6")
}
}
}
......@@ -101,8 +101,8 @@ class HomePhotosDetailCollectionCell : UICollectionViewCell {
}
self.selectImageView.snp.makeConstraints { make in
make.bottom.right.equalToSuperview().offset(-12)
make.height.width.equalTo(24)
make.bottom.right.equalToSuperview().offset(-6)
make.height.width.equalTo(18)
}
}
......
......@@ -59,8 +59,6 @@ class HomeVideoDetailCell : UICollectionViewCell {
print("无法获取图片")
}
}
}
}
}
......@@ -70,9 +68,9 @@ class HomeVideoDetailCell : UICollectionViewCell {
var choose : Bool = false {
didSet{
if choose {
self.selectImageView.image = UIImage(named: "ic_unsel_com")
self.selectImageView.image = UIImage(named: "重复项说明-icon-选中")
}else{
self.selectImageView.image = UIImage(named: "ic_sel_com")
self.selectImageView.image = UIImage(named: "Frame 6")
}
}
}
......@@ -104,7 +102,7 @@ class HomeVideoDetailCell : UICollectionViewCell {
lazy var playImageView: UIImageView = {
let view = UIImageView()
view.backgroundColor = .clear
view.image = UIImage(named: "btn_play_home")
view.image = UIImage(named: "Frame 5")
view.isUserInteractionEnabled = true
return view
}()
......@@ -114,7 +112,7 @@ class HomeVideoDetailCell : UICollectionViewCell {
lazy var saveSizeView: UIView = {
let view = UIView()
view.layer.masksToBounds = true
view.layer.cornerRadius = 4
view.layer.cornerRadius = 12
view.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
return view
}()
......@@ -123,21 +121,21 @@ class HomeVideoDetailCell : UICollectionViewCell {
let view = UILabel()
view.textAlignment = .left
view.textColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
view.font = UIFont.systemFont(ofSize: 12, weight: .regular)
view.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
view.text = "0.0MB"
return view
}()
lazy var moreImageView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "icon_left_setting_grey")
view.image = UIImage(named: "Frame 9")
view.backgroundColor = .clear
return view
}()
lazy var selectImageView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_sel_com")
view.image = UIImage(named: "Frame 6")
view.backgroundColor = .clear
view.isUserInteractionEnabled = true
......@@ -181,30 +179,28 @@ class HomeVideoDetailCell : UICollectionViewCell {
}
self.playImageView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.height.equalTo(43)
make.width.height.equalTo(18.38)
}
self.saveSizeView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.bottom.equalToSuperview().offset(-12)
make.height.equalTo(25)
make.width.equalTo(120)
make.left.top.equalToSuperview().offset(6)
make.height.equalTo(24)
make.width.equalTo(100)
}
self.saveSizeLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(8)
make.left.equalToSuperview().offset(11)
make.centerY.equalToSuperview()
make.height.equalTo(25)
make.width.equalTo(105)
make.height.equalTo(17)
}
self.moreImageView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-4)
make.right.equalToSuperview().offset(-10)
make.centerY.equalToSuperview()
make.height.width.equalTo(16)
}
self.selectImageView.snp.makeConstraints { make in
make.bottom.right.equalToSuperview().offset(-12)
make.height.width.equalTo(24)
make.bottom.right.equalToSuperview().offset(-6)
make.height.width.equalTo(18)
}
self.extensionView.snp.makeConstraints { make in
make.center.equalTo(self.selectImageView.snp.center)
......
......@@ -156,8 +156,8 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
seletedBtn = UIButton()
seletedBtn?.setImage(UIImage(named: "home_info_norl"), for: .normal)
seletedBtn?.setImage(UIImage(named: "home_info_seleted"), for: .selected)
seletedBtn?.setImage(UIImage(named: "重复项说明-icon-未选中"), for: .normal)
seletedBtn?.setImage(UIImage(named: "重复项说明-icon-选中"), for: .selected)
seletedBtn?.addTarget(self, action: #selector(seletedBtnClick), for: .touchUpInside)
self.backgroundColor = .clear
......
......@@ -28,6 +28,17 @@ class PMLoadingHUD{
}
}
func showLoding(_ title:String = "Loding...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){
disMiss()
DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play()
}
}
func disMiss(){
DispatchQueue.main.async {
self.loadingView.animationView.stop()
......
......@@ -54,8 +54,8 @@ class PMShowImgCell: UICollectionViewCell {
lazy var selectBtn: UIButton = {
let select = UIButton(type: .custom)
select.setImage(UIImage(named: "home_info_norl"), for: .normal)
select.setImage(UIImage(named: "home_info_seleted"), for: .selected)
select.setImage(UIImage(named: "Frame_1318"), for: .normal)
select.setImage(UIImage(named: "重复项说明-icon-选中 1"), for: .selected)
select.addTarget(self, action: #selector(selectTap), for: .touchUpInside)
contentView.addSubview(select)
return select
......
......@@ -33,8 +33,8 @@ class PMShowItemCell: UICollectionViewCell {
private lazy var selectBtn: UIButton = {
let select = UIButton(type: .custom)
select.setImage(UIImage(named: "home_info_norl"), for: .normal)
select.setImage(UIImage(named: "home_info_seleted"), for: .selected)
select.setImage(UIImage(named: "Frame 7"), for: .normal)
select.setImage(UIImage(named: "Frame 8"), for: .selected)
contentView.addSubview(select)
select.isUserInteractionEnabled = false
return select
......
......@@ -88,8 +88,8 @@ class PMShowVideoCell: UICollectionViewCell {
lazy var selectBtn: UIButton = {
let select = UIButton(type: .custom)
select.setImage(UIImage(named: "home_info_norl"), for: .normal)
select.setImage(UIImage(named: "home_info_seleted"), for: .selected)
select.setImage(UIImage(named: "Frame_1318"), for: .normal)
select.setImage(UIImage(named: "重复项说明-icon-选中 1"), for: .selected)
select.addTarget(self, action: #selector(selectTap), for: .touchUpInside)
contentView.addSubview(select)
return select
......
......@@ -29,6 +29,12 @@ class PMShowImgVideoController: BaseViewController {
var imageVideoPath:[String] = []
lazy var navView : PhotoVideoDetailNavView = {
let view = PhotoVideoDetailNavView()
return view
}()
// 首页过来的数据
var homeDataSource : [ImageSeletedCollectionItem]? {
didSet{
......@@ -42,7 +48,11 @@ class PMShowImgVideoController: BaseViewController {
}
}
var currentIdx = 0
var currentIdx = 0 {
didSet {
changeNavInfo()
}
}
var selectSet = NSMutableSet()
var backOrgPageCallBack : (IndexPath?,[ImageSeletedCollectionItem]?)->Void = {index,data in}
......@@ -52,6 +62,13 @@ class PMShowImgVideoController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
self.view.addSubview(self.navView)
self.navView.showType = .dateAndSizeNav
self.navView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(statusBarHeight + 44)
}
}
override func viewWillAppear(_ animated: Bool) {
......@@ -72,6 +89,17 @@ class PMShowImgVideoController: BaseViewController {
}
self.view.layoutIfNeeded()
self.MaxCollection.scrollToItem(at: IndexPath(row: currentIdx, section: 0), at: .centeredHorizontally, animated: false)
changeNavInfo()
}
private func changeNavInfo(){
DispatchQueue.main.async {
if let model = self.homeDataSource?[self.currentIdx].id {
self.navView.sizeLbel.text = formatFileSize(model.assetSize)
self.navView.titleLbel.text = self.changeDateToString(model: model)
}
}
}
......@@ -87,6 +115,13 @@ class PMShowImgVideoController: BaseViewController {
self.backOrgPageCallBack(self.oldPageIndexPath,self.homeDataSource)
}
private func changeDateToString(model : AssetModel) -> String{
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
return formatter.string(from: model.createDate)
}
private lazy var MaxCollection: UICollectionView = {
let flowlayout = UICollectionViewFlowLayout()
flowlayout.sectionInset = UIEdgeInsets()
......@@ -140,10 +175,20 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
let offsetx = MaxCollection.contentOffset.x
let width = collectView.width
let current:Int = Int(offsetx / width)
self.currentIdx = current
bottItems.scrollToItem(at: IndexPath(row: current, section: 0), at: .left, animated: true)
}
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
guard let collectView = scrollView as? UICollectionView else { return }
if collectView == MaxCollection {
let offsetx = MaxCollection.contentOffset.x
let width = collectView.width
self.currentIdx = Int(offsetx / width)
}
}
private func setMaxCollection(collectionView:UICollectionView) -> Void {
if collectionView == bottItems {
......@@ -152,15 +197,13 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
UIView.animate(withDuration: 0.5) {
collectionView.contentOffset = CGPointMake( idx * (68 + 10) , 0)
}
self.currentIdx = Int(idx)
MaxCollection.scrollToItem(at: IndexPath(row: Int(idx), section: 0), at: .centeredHorizontally, animated: true)
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
guard let collectView = scrollView as? UICollectionView else { return }
// if collectView == MaxCollection {
// bottItems.reloadData()
// }
self.setMaxCollection(collectionView: collectView)
}
......@@ -218,7 +261,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
showName.loadPhotoOrVideo { durs, icon in
cell.icon = icon
}
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.isCurrent = selectSet.contains(indexPath.row)
cell.callblock = {[weak self] in
guard let self = self else { return }
......@@ -275,7 +320,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PMShowImgCellID, for: indexPath) as! PMShowImgCell
cell.icon = self.homeDataSource![indexPath.row].image ?? UIImage()
cell.isCurrent = selectSet.contains(indexPath.row)
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.callblock = {[weak self] in
guard let self = self else { return }
self.vibrate()
......@@ -319,7 +366,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
// 表示这个是视频
cell.type = 1
cell.isCurrent = selectSet.contains(indexPath.row)
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.callblock = {[weak self] in
guard let self = self else { return }
self.vibrate()
......
......@@ -29,6 +29,7 @@ class TrashDataManager {
clearCurrentMediaTypeTrashSigtonData(mediaType: mediaType)
clearCurrentMediaTypeTrashDBData(mediaType: mediaType)
// 删除完成之后回调
PhotoManager.shared.removeDataWhenDeleteInPage(data: trashData)
comlete()
}
}else{
......
......@@ -15,8 +15,6 @@ class Singleton {
// 私有化初始化方法,防止外部创建新实例
private init() {}
var resourceModel : [AssetModel] = []
var maxDeleteCount : Int = 25
var trashData : [TrashTypeEnum : [AssetModel]] = [:]
......
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