Commit abc95e48 authored by yqz's avatar yqz

Merge branch 'develop_0409' into yQz0507

* develop_0409:
  【修复】合并代码问题
  【优化】修改部分bug、优化功能
  【优化】部分逻辑新增和bug修复
  优化
parents 0328cde7 2f09d72d
...@@ -21,14 +21,12 @@ class CompressController : BaseViewController { ...@@ -21,14 +21,12 @@ class CompressController : BaseViewController {
private var compressNav:CompressNavView? private var compressNav:CompressNavView?
// 排序 // 排序
var currentSort : Int = 0 { var currentSort : ResouceSortType = .largest {
didSet{ didSet{
clearSelected() clearSelected()
} }
} }
// 资源类型 - 相册或者视频 // 资源类型 - 相册或者视频
var currentResourceType : CompressType = .compressPhoto var currentResourceType : CompressType = .compressPhoto
...@@ -122,25 +120,20 @@ class CompressController : BaseViewController { ...@@ -122,25 +120,20 @@ class CompressController : BaseViewController {
let datas = Singleton.shared.resourceModel let datas = Singleton.shared.resourceModel
if datas.count > 0 { if datas.count > 0 {
// 这里需要重新排序下 // 这里需要重新排序下
if self.currentSort == 0 { self.resourceData = datas
self.resourceData = datas.sorted {$0.assetSize > $1.assetSize } self.sortByType(sortType: self.currentSort)
}else if self.currentSort == 1 {
self.resourceData = datas.sorted {$0.assetSize < $1.assetSize }
}else if self.currentSort == 2 {
self.resourceData = datas.sorted {$0.createDate > $1.createDate }
}else{
self.resourceData = datas.sorted {$0.createDate < $1.createDate }
}
}else{ }else{
PMLoadingHUD.share.show() 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 CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return} guard let self else {return}
self.resourceData = models self.resourceData = models
Singleton.shared.resourceModel = self.resourceData Singleton.shared.resourceModel = self.resourceData
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss() PMLoadingHUD.share.disMiss()
} }
} }
} }
}
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
...@@ -238,20 +231,10 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo ...@@ -238,20 +231,10 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader { if kind == UICollectionView.elementKindSectionHeader {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CompressCustomHeaderView", for: indexPath) as! CompressCustomHeaderView let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CompressCustomHeaderView", for: indexPath) as! CompressCustomHeaderView
header.callBack = {[weak self] text in header.sortViewSubmitCallBack = { [weak self] fileterModel in
guard let self else {return}
let sortView = CompressSortView(frame: self.view.bounds)
// 这两行是为了进入页面的时候选中
sortView.currentIndex = self.currentSort
sortView.tableView.reloadData()
self.view.addSubview(sortView)
sortView.callBack = {[weak self] sortType in
guard let self else {return} guard let self else {return}
self.currentSort = sortType as! Int self.currentSort = fileterModel.sortType
self.sortByType(sortType: self.currentSort, header: header) self.sortByType(sortType: self.currentSort)
}
} }
header.changeView.callBack = {[weak self] flag in header.changeView.callBack = {[weak self] flag in
guard let self else {return} guard let self else {return}
...@@ -264,9 +247,13 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo ...@@ -264,9 +247,13 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
if self.currentResourceType == .compressPhoto { if self.currentResourceType == .compressPhoto {
self.getViewData() self.getViewData()
}else{ }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 CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: flag) { [weak self] models in
guard let self else {return} guard let self else {return}
self.resourceData = models self.resourceData = models
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss()
}
} }
} }
} }
...@@ -284,34 +271,21 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo ...@@ -284,34 +271,21 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
} }
} }
func sortByType(sortType:ResouceSortType){
func sortByType(sortType:Int,header:CompressCustomHeaderView){
let viewModel = CompressViewModel()
switch sortType { switch sortType {
case 0: case .largest:
header.selectlabel.text = "Largest" self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize }
// 按照文件大小降序
self.resourceData = viewModel.sortRsource(resource: self.resourceData, sortType: 1, sortKind: 0)
break
case 1:
header.selectlabel.text = "Smallest"
// 按照文件大小升序
self.resourceData = viewModel.sortRsource(resource: self.resourceData, sortType: 0, sortKind: 0)
break break
case 2: case .smallest:
header.selectlabel.text = "Newest" self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize }
// 按照时间降序
self.resourceData = viewModel.sortRsource(resource: self.resourceData, sortType: 1, sortKind: 1)
break break
case 3: case .latest:
header.selectlabel.text = "Oldest" self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate }
// 按照时间升序
self.resourceData = viewModel.sortRsource(resource: self.resourceData, sortType: 0, sortKind: 1)
break break
default: case .oldest:
self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate }
break break
} }
} }
func updateSubmitButton(){ func updateSubmitButton(){
......
...@@ -9,7 +9,7 @@ import Foundation ...@@ -9,7 +9,7 @@ import Foundation
class CompressCustomHeaderView: UICollectionReusableView{ class CompressCustomHeaderView: UICollectionReusableView{
var callBack: callBack<Any> = {text in } var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var modeData = [AssetModel]() { var modeData = [AssetModel]() {
didSet{ didSet{
...@@ -51,35 +51,21 @@ class CompressCustomHeaderView: UICollectionReusableView{ ...@@ -51,35 +51,21 @@ class CompressCustomHeaderView: UICollectionReusableView{
return label return label
}() }()
lazy var btnView :UIView = { // 筛选按钮
let view = UIView() lazy var filterButton : UIButton = {
view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1) let button = UIButton(type: .custom)
view.layer.cornerRadius = 16 button.setImage(UIImage(named: "Frame 1"), for: .normal)
view.clipsToBounds = true button.setTitle("The largest", for: .normal)
button.layer.cornerRadius = 14
button.clipsToBounds = true
let tap = UITapGestureRecognizer() button.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 0.1000)
tap.addTarget(self, action: #selector(selectQulity)) button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
view.isUserInteractionEnabled = true button.setTitleColor(UIColor(red: 0.07, green: 0.07, blue: 0.07, alpha: 1), for: .normal)
view.addGestureRecognizer(tap) button.addTarget(self, action: #selector(filterButtonAction), for: .touchUpInside)
button.isHidden = false
return button
return view
}() }()
lazy var selectImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_newest_similar")
return view
}()
lazy var selectlabel :UILabel = {
let label = UILabel()
label.text = "Largest"
label.textAlignment = .center
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
return label
}()
lazy var siezLabel :UILabel = { lazy var siezLabel :UILabel = {
let label = UILabel() let label = UILabel()
label.text = "1.02 GB" label.text = "1.02 GB"
...@@ -128,9 +114,7 @@ class CompressCustomHeaderView: UICollectionReusableView{ ...@@ -128,9 +114,7 @@ class CompressCustomHeaderView: UICollectionReusableView{
private func setUI(){ private func setUI(){
self.addSubview(self.titlelabel) self.addSubview(self.titlelabel)
self.addSubview(self.btnView) self.addSubview(self.filterButton)
self.btnView.addSubview(self.selectImageView)
self.btnView.addSubview(self.selectlabel)
self.addSubview(self.siezLabel) self.addSubview(self.siezLabel)
self.addSubview(self.changeView) self.addSubview(self.changeView)
self.addSubview(self.tipView) self.addSubview(self.tipView)
...@@ -144,27 +128,17 @@ class CompressCustomHeaderView: UICollectionReusableView{ ...@@ -144,27 +128,17 @@ class CompressCustomHeaderView: UICollectionReusableView{
make.height.equalTo(28) make.height.equalTo(28)
} }
self.btnView.snp.makeConstraints { make in self.filterButton.snp.makeConstraints { make in
make.centerY.equalTo(self.titlelabel.snp.centerY)
make.right.equalToSuperview().offset(0) make.right.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(12) make.height.equalTo(28)
make.width.equalTo(103 * RScreenW()) make.width.equalTo(98)
make.height.equalTo(32)
}
self.selectImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.centerY.equalToSuperview()
make.width.height.equalTo(20)
}
self.selectlabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-12)
make.top.equalToSuperview().offset(6)
make.width.equalTo(60 * RScreenW())
make.height.equalTo(20)
} }
self.siezLabel.snp.makeConstraints { make in self.siezLabel.snp.makeConstraints { make in
make.left.equalTo(0) make.left.equalTo(0)
make.right.equalTo(0) make.right.equalTo(0)
make.top.equalTo(self.btnView.snp.bottom).offset(8) make.top.equalTo(self.filterButton.snp.bottom).offset(8)
make.height.equalTo(20) make.height.equalTo(20)
} }
self.changeView.snp.makeConstraints { make in self.changeView.snp.makeConstraints { make in
...@@ -193,10 +167,20 @@ class CompressCustomHeaderView: UICollectionReusableView{ ...@@ -193,10 +167,20 @@ class CompressCustomHeaderView: UICollectionReusableView{
} }
@objc func selectQulity(){ @objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 添加毛玻璃效果
cWindow.showBlur()
callBack("selectedQulity") cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
self.sortViewSubmitCallBack(model)
}
}
} }
......
...@@ -67,7 +67,7 @@ class CompressViewModel{ ...@@ -67,7 +67,7 @@ class CompressViewModel{
/// 获取相册所有图片 /// 获取相册所有图片
/// - Returns: 图片信息 /// - Returns: 图片信息
func getAllPhotosToAssets(sortType: Int, assetType : CompressType,_ finished: @escaping Finished){ func getAllPhotosToAssets(sortType: ResouceSortType, assetType : CompressType,_ finished: @escaping Finished){
var models : [AssetModel] = [] var models : [AssetModel] = []
...@@ -108,11 +108,11 @@ class CompressViewModel{ ...@@ -108,11 +108,11 @@ class CompressViewModel{
group.leave() group.leave()
if count == assetsArray.count { if count == assetsArray.count {
// 默认按照文件大小排序 // 默认按照文件大小排序
if sortType == 0 { if sortType == .largest {
finished(models.sorted { $0.assetSize > $1.assetSize }) finished(models.sorted { $0.assetSize > $1.assetSize })
}else if sortType == 1 { }else if sortType == .smallest {
finished(models.sorted { $0.assetSize < $1.assetSize }) finished(models.sorted { $0.assetSize < $1.assetSize })
}else if sortType == 2 { }else if sortType == .latest {
finished(models.sorted { $0.createDate > $1.createDate }) finished(models.sorted { $0.createDate > $1.createDate })
}else{ }else{
finished(models.sorted { $0.createDate < $1.createDate }) finished(models.sorted { $0.createDate < $1.createDate })
...@@ -123,29 +123,6 @@ class CompressViewModel{ ...@@ -123,29 +123,6 @@ class CompressViewModel{
} }
} }
/// 对资源进行排序
/// - Parameters:
/// - resource: 原资源
/// - sortType: 排序的类型,升序或者降序。0-升序,1-降序
/// - sortKind: 排序的种类 大小或者时间 0-大小,1-时间
/// - Returns: 返回排序结果
func sortRsource(resource:[AssetModel],sortType:Int,sortKind:Int)->[AssetModel]{
if sortKind == 0 {
if sortType == 0 {
return resource.sorted { $0.assetSize < $1.assetSize }
}else{
return resource.sorted { $0.assetSize > $1.assetSize }
}
}else{
if sortType == 0 {
return resource.sorted { $0.createDate < $1.createDate }
}else{
return resource.sorted { $0.createDate > $1.createDate }
}
}
}
/// 视频压缩 /// 视频压缩
/// - Parameters: /// - Parameters:
......
...@@ -314,6 +314,11 @@ class HomeInfoViewController:BaseViewController { ...@@ -314,6 +314,11 @@ class HomeInfoViewController:BaseViewController {
showTipsVC() showTipsVC()
self.tablewView.keepAllNoDataCallBack = {
self.ids = []
self.setDefaultPage()
}
} }
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
import Foundation import Foundation
import Photos import Photos
import SnapKit
class HomePhotosDetailViewController : BaseViewController { class HomePhotosDetailViewController : BaseViewController {
private var headerHeight : CGFloat = 98 private var headerHeight : CGFloat = 98
...@@ -15,7 +16,18 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -15,7 +16,18 @@ class HomePhotosDetailViewController : BaseViewController {
private var currentHeaderView: HomePhotosDetailCustomHeaderView? private var currentHeaderView: HomePhotosDetailCustomHeaderView?
var mediaType : PhotsFileType?
private var deleteViewBottomConstraint: Constraint?
var mediaType : PhotsFileType? {
didSet {
if mediaType == PhotsFileType.videos {
self.trashSubView.tipLabel.text = "The video in the trash can"
}else {
self.trashSubView.tipLabel.text = "The photo in the trash can"
}
}
}
var imageCache = NSCache<NSString, UIImage>() var imageCache = NSCache<NSString, UIImage>()
...@@ -25,17 +37,42 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -25,17 +37,42 @@ class HomePhotosDetailViewController : BaseViewController {
var resourceData : [AssetModel] = [] var resourceData : [AssetModel] = []
// 排序 // 排序
var currentSort : Int = 0 var currentSort : ResouceSortType = .largest
// 当前页面选中的 // 当前页面选中的
var selectedModel : [AssetModel] = [] { var selectedModel : [AssetModel] = [] {
didSet{ didSet{
DispatchQueue.main.async {
if self.selectedModel.count == 0{ if self.selectedModel.count == 0{
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
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)
}else if self.selectedModel.count == 1{ }else if self.selectedModel.count == 1{
self.deleteButton.setTitle("Delete \(self.selectedModel.count) Photo", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Photo", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -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 - safeHeight)
}else{ }else{
self.deleteButton.setTitle("Delete \(selectedModel.count) Photos", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Photos", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -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 - safeHeight)
}
if self.selectedModel.count > 0 {
self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{
self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
}
} }
} }
} }
...@@ -63,7 +100,7 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -63,7 +100,7 @@ class HomePhotosDetailViewController : BaseViewController {
let layout = WaterfallMutiSectionFlowLayout() let layout = WaterfallMutiSectionFlowLayout()
layout.delegate = self layout.delegate = self
let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 104), collectionViewLayout: layout) let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight), collectionViewLayout: layout)
sview.register(HomePhotosDetailCollectionCell.self, forCellWithReuseIdentifier: "HomePhotosDetailCollectionCell") sview.register(HomePhotosDetailCollectionCell.self, forCellWithReuseIdentifier: "HomePhotosDetailCollectionCell")
sview.register(HomePhotosDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomePhotosDetailCustomHeaderView") sview.register(HomePhotosDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomePhotosDetailCustomHeaderView")
...@@ -80,18 +117,20 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -80,18 +117,20 @@ class HomePhotosDetailViewController : BaseViewController {
}() }()
lazy var deleteButton : UIButton = { lazy var deleteButtonView : HomeDetailDeleteView = {
let view = UIButton() let view = HomeDetailDeleteView()
view.setTitle("Delete", for: UIControl.State.normal) view.addTopShadow()
view.setTitleColor(.white, for: .normal)
view.clipsToBounds = true
view.layer.cornerRadius = 23
view.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
view.addTarget(self, action: #selector(deleteButtonAction), for: .touchUpInside)
return view return view
}() }()
lazy var trashSubView : TrashSubView = {
let view = TrashSubView()
view.backgroundColor = .white
view.isHidden = true
return view
}()
func setUI(){ func setUI(){
...@@ -119,11 +158,11 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -119,11 +158,11 @@ class HomePhotosDetailViewController : BaseViewController {
}, completion: nil) }, completion: nil)
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{ }else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
} }
} }
...@@ -140,11 +179,11 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -140,11 +179,11 @@ class HomePhotosDetailViewController : BaseViewController {
}, completion: nil) }, completion: nil)
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{ }else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
} }
} }
} }
...@@ -153,12 +192,12 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -153,12 +192,12 @@ class HomePhotosDetailViewController : BaseViewController {
self.view.insertSubview(collectionView, at: 0) self.view.insertSubview(collectionView, at: 0)
self.view.addSubview(self.deleteButton) self.view.addSubview(self.deleteButtonView)
self.deleteButton.snp.makeConstraints { make in self.deleteButtonView.snp.makeConstraints { make in
make.top.equalTo(self.collectionView.snp.bottom).offset(16)
make.left.equalToSuperview().offset(15) make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15) make.right.equalToSuperview().offset(-15)
make.height.equalTo(46) make.height.equalTo(78)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(-safeHeight + 78).constraint
} }
self.view.addSubview(self.defaultImageView) self.view.addSubview(self.defaultImageView)
...@@ -174,9 +213,34 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -174,9 +213,34 @@ class HomePhotosDetailViewController : BaseViewController {
make.top.equalTo(self.defaultImageView.snp.bottom).offset(-30) make.top.equalTo(self.defaultImageView.snp.bottom).offset(-30)
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
} }
setDefaultPage() self.setDefaultPage()
}
/// 是否添加垃圾桶数据
func addTrashView(){
DispatchQueue.main.async {
self.trashSubView.removeFromSuperview()
self.view.addSubview(self.trashSubView)
self.trashSubView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-safeHeight)
make.height.equalTo(78)
}
// 判断垃圾桶有没有数据
let array = TrashDataManager.getCurrentMediaTypeTrashData(mediaType: self.mediaType == PhotsFileType.Other ? TrashTypeEnum.other : TrashTypeEnum.shot)
self.trashSubView.resourceCountlabel.text = String(array.count)
self.trashSubView.isHidden = array.count <= 0
self.deleteButtonView.isHidden = array.count > 0
self.videoDetailNavView?.startSelectButton.isHidden = array.count > 0
// 改变collection的位置
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)
}
}
} }
...@@ -189,18 +253,18 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -189,18 +253,18 @@ class HomePhotosDetailViewController : BaseViewController {
if self.resourceData.count == 0 { if self.resourceData.count == 0 {
self.defaultImageView.isHidden = false self.defaultImageView.isHidden = false
self.defaultTipLabel.isHidden = false self.defaultTipLabel.isHidden = false
self.currentHeaderView?.btnView.isHidden = true self.currentHeaderView?.filterButton.isHidden = true
self.videoDetailNavView?.startSelectButton.isHidden = true self.videoDetailNavView?.startSelectButton.isHidden = true
self.deleteButton.isHidden = true self.deleteButtonView.isHidden = true
}else{ }else{
self.defaultImageView.isHidden = true self.defaultImageView.isHidden = true
self.defaultTipLabel.isHidden = true self.defaultTipLabel.isHidden = true
self.currentHeaderView?.btnView.isHidden = false self.currentHeaderView?.filterButton.isHidden = false
self.videoDetailNavView?.startSelectButton.isHidden = false self.videoDetailNavView?.startSelectButton.isHidden = false
self.deleteButton.isHidden = false self.deleteButtonView.isHidden = false
} }
} }
self.addTrashView()
} }
} }
...@@ -212,6 +276,33 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -212,6 +276,33 @@ class HomePhotosDetailViewController : BaseViewController {
setUI() setUI()
showTipsVC() showTipsVC()
self.deleteButtonView.deleteCallBack = {
self.deleteButtonAction()
}
self.trashSubView.presentTashDetailViewClickCallBack = {[weak self] in
guard let self else {return}
// 进入垃圾桶详情页面
DispatchQueue.main.async {
let vc : TrashViewController = TrashViewController()
vc.currentPage = self.mediaType == PhotsFileType.Other ? 2 : 3
vc.dissmisCallBack = {
self.addTrashView()
}
self.present(vc, animated: true)
}
}
self.trashSubView.clearTashDataCallBack = {[weak self] in
guard let self else {return}
// 清除垃圾桶数据
TrashDataManager.clearTrashData(mediaType: self.mediaType == PhotsFileType.Other ? TrashTypeEnum.other : TrashTypeEnum.shot) {[weak self] in
guard let self else {return}
self.addTrashView()
}
}
} }
func showTipsVC(){ func showTipsVC(){
...@@ -256,6 +347,7 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -256,6 +347,7 @@ class HomePhotosDetailViewController : BaseViewController {
self.collectionView.reloadData() self.collectionView.reloadData()
} }
} }
addTrashView()
} }
...@@ -371,6 +463,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -371,6 +463,8 @@ 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 {
// 这里还需要判断下当前cell 是不是被选中了,选中了就不跳转左滑右滑动页面
if self.videoDetailNavView?.startSelectButton.isSelected == false {
// 点击之后跳转详情页面 // 点击之后跳转详情页面
if self.mediaType == .screenshots { if self.mediaType == .screenshots {
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .shot) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .shot)
...@@ -380,6 +474,43 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -380,6 +474,43 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .other) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .other)
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
}else {
// 跳转PMSHow页面
// 点击之后跳转详情页面
let vc = PMShowImgVideoController()
vc.state = .similarPhotos
vc.currentIdx = 0
vc.oldPageIndexPath = indexPath
let dataSource = ImageSeletedCollectionItem()
dataSource.isSeleted = cell.choose
dataSource.id = ident
// 获取image
dataSource.image = PhotoAndVideoMananger.mananger.getImageFromAssetID(id: ident.localIdentifier)
vc.homeDataSource = [dataSource]
vc.backOrgPageCallBack = {index,data in
if let data = data{
if let item = data.first{
if let selected = item.isSeleted {
if let index = index {
if selected == true {
self.selectedModel.append(self.resourceData[index.row])
}else {
self.selectedModel.removeAll(where: {$0.localIdentifier == self.resourceData[index.row].localIdentifier})
}
DispatchQueue.main.async {
if let tempCell = collectionView.cellForItem(at: index) as? HomePhotosDetailCollectionCell {
tempCell.choose = selected
}
}
}
}
}
}
}
self.navigationController?.pushViewController(vc, animated: true)
}
} }
} }
cell.clickCallBack = {[weak self] click,order in cell.clickCallBack = {[weak self] click,order in
...@@ -390,14 +521,6 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -390,14 +521,6 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier } self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier }
} }
self.vibrate() self.vibrate()
DispatchQueue.main.async {
if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal)
}
}
} }
return cell return cell
...@@ -442,19 +565,22 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -442,19 +565,22 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
header.modelTitlelabel.text = self.mediaType?.rawValue header.modelTitlelabel.text = self.mediaType?.rawValue
currentHeaderView = header currentHeaderView = header
header.sortCallback = {[weak self] in header.sortViewSubmitCallBack = {[weak self] filterModel in
guard let self else {return} guard let self else {return}
let sortView = CompressSortView(frame: self.view.bounds)
// 这两行是为了进入页面的时候选中
sortView.currentIndex = self.currentSort
sortView.tableView.reloadData()
self.view.addSubview(sortView) var dataS : [AssetModel] = []
sortView.callBack = {[weak self] sortType in if self.mediaType == .Other{
guard let self else {return} dataS = PhotoManager.shared.filterOtherModels
self.currentSort = sortType as! Int }else {
self.sortByType(sortType: self.currentSort) dataS = PhotoManager.shared.filterScreenShotModels
self.changeHeaderTitle() }
let tempData = self.filterDataByDate(orgModels: dataS , startDate: filterModel.startDate, endDate: filterModel.endDate)
// 重新更新下数据源
self.resourceData = tempData
self.sortByType(sortType: filterModel.sortType)
self.currentSort = filterModel.sortType
DispatchQueue.main.async {
self.collectionView.reloadData()
} }
} }
...@@ -470,52 +596,33 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -470,52 +596,33 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
} }
} }
/// 改变标题 func filterDataByDate(orgModels : [AssetModel], startDate:Date? ,endDate : Date?)->[AssetModel]{
func changeHeaderTitle(){ var array = orgModels
var title : String = "Largest" if startDate != nil {
switch self.currentSort { array = array.filter({$0.createDate >= startDate!})
case 0:
title = "Largest"
break
case 1:
title = "Smallest"
break
case 2:
title = "Newest"
break
case 3:
title = "Oldest"
break
default:
break
} }
DispatchQueue.main.async { if endDate != nil {
self.currentHeaderView!.selectlabel.text = title array = array.filter({$0.createDate <= endDate!})
self.collectionView.reloadData()
} }
return array
} }
/// 对当前页面资源排序(注意这里获取的资源是image) /// 对当前页面资源排序(注意这里获取的资源是image)
/// - Parameter sortType: 排序类型 /// - Parameter sortType: 排序类型
func sortByType(sortType:Int){ func sortByType(sortType:ResouceSortType){
switch sortType { switch sortType {
case 0: case .largest:
self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize } self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize }
break break
case 1: case .smallest:
self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize } self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize }
break break
case 2: case .latest:
self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate } self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate }
break break
case 3: case .oldest:
self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate } self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate }
break break
default:
break
} }
} }
...@@ -526,7 +633,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -526,7 +633,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
} }
@objc func deleteButtonAction(){ func deleteButtonAction(){
if selectedModel.count <= 0 { if selectedModel.count <= 0 {
return return
} }
...@@ -721,8 +828,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -721,8 +828,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
DispatchQueue.main.async { DispatchQueue.main.async {
// 删除完成之后,移除下当前选择的数据 // 删除完成之后,移除下当前选择的数据
self.selectedModel.removeAll() self.selectedModel.removeAll()
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: { UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.collectionView.reloadSections(IndexSet(integer: 0)) self.collectionView.reloadSections(IndexSet(integer: 0))
...@@ -731,4 +838,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -731,4 +838,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
setDefaultPage() setDefaultPage()
} }
} }
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
import Foundation import Foundation
import Photos import Photos
import SnapKit
class HomeVideoDetailController :BaseViewController { class HomeVideoDetailController :BaseViewController {
...@@ -14,6 +15,8 @@ class HomeVideoDetailController :BaseViewController { ...@@ -14,6 +15,8 @@ class HomeVideoDetailController :BaseViewController {
private var currentHeaderView: HomeVideoDetailCustomHeaderView? private var currentHeaderView: HomeVideoDetailCustomHeaderView?
private var deleteViewBottomConstraint: Constraint?
@MainActor required init?(coder: NSCoder) { @MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
...@@ -27,22 +30,42 @@ class HomeVideoDetailController :BaseViewController { ...@@ -27,22 +30,42 @@ class HomeVideoDetailController :BaseViewController {
var resourceData : [AssetModel] = [] var resourceData : [AssetModel] = []
// 排序 // 排序
var currentSort : Int = 0 var currentSort : ResouceSortType = .largest
// 当前页面选中的 // 当前页面选中的
var selectedModel : [AssetModel] = [] { var selectedModel : [AssetModel] = [] {
didSet{ didSet{
DispatchQueue.main.async { [self] in DispatchQueue.main.async {
if self.selectedModel.count != 0 { if self.selectedModel.count == 0{
if self.selectedModel.count == 1{ self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
self.deleteButton.setTitle("Delete", for: .normal) UIView.animate(withDuration: 0.1) {
// 更新约束
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)
} else if self.selectedModel.count == 1{ } else if self.selectedModel.count == 1{
self.deleteButton.setTitle("Delete \(self.selectedModel.count) Video", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Video", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -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 - safeHeight)
}else{ }else{
self.deleteButton.setTitle("Delete \(selectedModel.count) Videos", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete \(self.selectedModel.count) Videos", for: .normal)
UIView.animate(withDuration: 0.1) {
// 更新约束
self.deleteViewBottomConstraint?.update(offset: -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 - safeHeight)
} }
if self.selectedModel.count > 0 {
self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{
self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
} }
self.collectionView.collectionViewLayout.invalidateLayout()
} }
} }
} }
...@@ -52,7 +75,7 @@ class HomeVideoDetailController :BaseViewController { ...@@ -52,7 +75,7 @@ class HomeVideoDetailController :BaseViewController {
let layout = WaterfallMutiSectionFlowLayout() let layout = WaterfallMutiSectionFlowLayout()
layout.delegate = self layout.delegate = self
let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: statusBarHeight + 44, width: self.view.width - 2 * marginLR, height: self.view.height - (statusBarHeight + 44) - 102), collectionViewLayout: layout) let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - safeHeight), collectionViewLayout: layout)
sview.register(HomeVideoDetailCell.self, forCellWithReuseIdentifier: "HomeVideoDetailCell") sview.register(HomeVideoDetailCell.self, forCellWithReuseIdentifier: "HomeVideoDetailCell")
sview.register(HomeVideoDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomeVideoDetailCustomHeaderView") sview.register(HomeVideoDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomeVideoDetailCustomHeaderView")
...@@ -69,14 +92,18 @@ class HomeVideoDetailController :BaseViewController { ...@@ -69,14 +92,18 @@ class HomeVideoDetailController :BaseViewController {
}() }()
lazy var deleteButton : UIButton = { lazy var deleteButtonView : HomeDetailDeleteView = {
let view = UIButton() let view = HomeDetailDeleteView()
view.setTitle("Delete", for: UIControl.State.normal) view.addTopShadow()
view.setTitleColor(.white, for: .normal) return view
view.clipsToBounds = true }()
view.layer.cornerRadius = 23
view.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
view.addTarget(self, action: #selector(deleteButtonAction), for: .touchUpInside) lazy var trashSubView : TrashSubView = {
let view = TrashSubView()
view.backgroundColor = .white
view.tipLabel.text = "The video in the trash can"
view.isHidden = true
return view return view
}() }()
...@@ -165,11 +192,11 @@ class HomeVideoDetailController :BaseViewController { ...@@ -165,11 +192,11 @@ class HomeVideoDetailController :BaseViewController {
self.collectionView.reloadData() self.collectionView.reloadData()
}, completion: nil) }, completion: nil)
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{ }else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
} }
} }
...@@ -187,11 +214,11 @@ class HomeVideoDetailController :BaseViewController { ...@@ -187,11 +214,11 @@ class HomeVideoDetailController :BaseViewController {
}, completion: nil) }, completion: nil)
if self.selectedModel.count > 0 { if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{ }else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
} }
} }
} }
...@@ -199,12 +226,12 @@ class HomeVideoDetailController :BaseViewController { ...@@ -199,12 +226,12 @@ class HomeVideoDetailController :BaseViewController {
self.view.insertSubview(collectionView, at: 0) self.view.insertSubview(collectionView, at: 0)
self.view.addSubview(self.deleteButton) self.view.addSubview(self.deleteButtonView)
self.deleteButton.snp.makeConstraints { make in self.deleteButtonView.snp.makeConstraints { make in
make.top.equalTo(self.collectionView.snp.bottom).offset(16)
make.left.equalToSuperview().offset(15) make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15) make.right.equalToSuperview().offset(-15)
make.height.equalTo(46) make.height.equalTo(78)
self.deleteViewBottomConstraint = make.bottom.equalToSuperview().offset(-safeHeight + 78).constraint
} }
self.view.addSubview(self.defaultImageView) self.view.addSubview(self.defaultImageView)
self.defaultImageView.snp.makeConstraints { make in self.defaultImageView.snp.makeConstraints { make in
...@@ -230,6 +257,57 @@ class HomeVideoDetailController :BaseViewController { ...@@ -230,6 +257,57 @@ class HomeVideoDetailController :BaseViewController {
setUI() setUI()
showTipsVC() showTipsVC()
self.deleteButtonView.deleteCallBack = {
self.deleteButtonAction()
}
self.trashSubView.presentTashDetailViewClickCallBack = {[weak self] in
guard let self else {return}
// 进入垃圾桶详情页面
DispatchQueue.main.async {
let vc : TrashViewController = TrashViewController()
vc.currentPage = 1
vc.dissmisCallBack = {
self.addTrashView()
}
self.present(vc, animated: true)
}
}
self.trashSubView.clearTashDataCallBack = {[weak self] in
guard let self else {return}
// 清除垃圾桶数据
TrashDataManager.clearTrashData(mediaType: TrashTypeEnum.video) {[weak self] in
guard let self else {return}
self.addTrashView()
}
}
}
/// 是否添加垃圾桶数据
func addTrashView(){
DispatchQueue.main.async {
self.trashSubView.removeFromSuperview()
self.view.addSubview(self.trashSubView)
self.trashSubView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-safeHeight)
make.height.equalTo(78)
}
// 判断垃圾桶有没有数据
let array = TrashDataManager.getCurrentMediaTypeTrashData(mediaType:TrashTypeEnum.video)
self.trashSubView.resourceCountlabel.text = String(array.count)
self.trashSubView.isHidden = array.count <= 0
self.deleteButtonView.isHidden = array.count > 0
self.videoDetailNavView?.startSelectButton.isHidden = array.count > 0
// 改变collection的位置
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)
}
}
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
...@@ -240,6 +318,7 @@ class HomeVideoDetailController :BaseViewController { ...@@ -240,6 +318,7 @@ class HomeVideoDetailController :BaseViewController {
self.collectionView.reloadData() self.collectionView.reloadData()
} }
} }
addTrashView()
} }
func showTipsVC(){ func showTipsVC(){
...@@ -294,15 +373,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -294,15 +373,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}else{ }else{
self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier } self.selectedModel.removeAll { $0.localIdentifier == self.resourceData[order].localIdentifier }
} }
DispatchQueue.main.async {
if self.selectedModel.count > 0 {
self.deleteButton.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
}else{
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal)
}
}
} }
cell.cellCallBack = {[weak self] ident,order in cell.cellCallBack = {[weak self] ident,order in
guard let self else {return} guard let self else {return}
...@@ -310,8 +380,59 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -310,8 +380,59 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
// 获取视频的图片 // 获取视频的图片
PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: ident) { image in PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: ident) { image in
// 点击之后跳转详情页面 // 点击之后跳转详情页面
if self.videoDetailNavView?.startSelectButton.isSelected == false {
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .video) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .video)
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
}else {
let vc = PMShowImgVideoController()
vc.state = .similarVideos
vc.currentIdx = 0
let dataSource = ImageSeletedCollectionItem()
dataSource.isSeleted = cell.choose
dataSource.id = ident
dataSource.image = image
// 表示这个是视频
vc.homeDataSource = [dataSource]
vc.backOrgPageCallBack = {index,data in
if let data = data{
if let item = data.first{
if let selected = item.isSeleted {
if let index = index {
if selected == true {
self.selectedModel.append(self.resourceData[index.row])
}else {
self.selectedModel.removeAll(where: {$0.localIdentifier == self.resourceData[index.row].localIdentifier})
}
DispatchQueue.main.async {
if let tempCell = collectionView.cellForItem(at: index) as? HomePhotosDetailCollectionCell {
tempCell.choose = selected
}
}
}
}
}
}
}
vc.getVideoURLFromLocalIdentifier(localIdentifier: ident.localIdentifier) { url, error in
if url != nil{
DispatchQueue.main.async {
vc.url = url
self.navigationController?.pushViewController(vc, animated: true)
}
}else{
let alert = UIAlertController(title: nil, message: "ICloud video cannot be viewed", preferredStyle: .alert)
self.present(alert, animated: true, completion: nil)
// 2 秒后关闭弹窗
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
alert.dismiss(animated: true, completion: nil)
}
}
}
self.navigationController?.pushViewController(vc, animated: true)
}
} errorHandler: { } errorHandler: {
DispatchQueue.main.async { DispatchQueue.main.async {
let alert = UIAlertController(title: nil, message: "Get Video image failure", preferredStyle: .alert) let alert = UIAlertController(title: nil, message: "Get Video image failure", preferredStyle: .alert)
...@@ -367,19 +488,17 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -367,19 +488,17 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
currentHeaderView = header currentHeaderView = header
header.compressionTipView.reloadData() header.compressionTipView.reloadData()
header.sizeLabel.text = "\(self.resourceData.count) Videos" header.sizeLabel.text = "\(self.resourceData.count) Videos"
header.sortCallback = {[weak self] in header.sortViewSubmitCallBack = {[weak self] filterModel in
guard let self else {return} guard let self else {return}
let sortView = CompressSortView(frame: self.view.bounds)
// 这两行是为了进入页面的时候选中
sortView.currentIndex = self.currentSort
sortView.tableView.reloadData()
self.view.addSubview(sortView) let dataS : [AssetModel] = PhotoManager.shared.filterVideoModels
sortView.callBack = {[weak self] sortType in let tempData = self.filterDataByDate(orgModels: dataS , startDate: filterModel.startDate, endDate: filterModel.endDate)
guard let self else {return} // 重新更新下数据源
self.currentSort = sortType as! Int self.resourceData = tempData
self.sortByType(sortType: self.currentSort) self.sortByType(sortType: filterModel.sortType)
self.changeHeaderTitle() self.currentSort = filterModel.sortType
DispatchQueue.main.async {
self.collectionView.reloadData()
} }
} }
return header return header
...@@ -394,6 +513,17 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -394,6 +513,17 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
} }
} }
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 showPopView(popView: AdvTipDeleteView){ func showPopView(popView: AdvTipDeleteView){
...@@ -402,7 +532,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -402,7 +532,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
} }
@objc func deleteButtonAction(){ func deleteButtonAction(){
if selectedModel.count <= 0 { if selectedModel.count <= 0 {
return return
...@@ -580,17 +710,18 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -580,17 +710,18 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
if self.resourceData.count == 0 { if self.resourceData.count == 0 {
self.defaultImageView.isHidden = false self.defaultImageView.isHidden = false
self.defaultTipLabel.isHidden = false self.defaultTipLabel.isHidden = false
self.currentHeaderView?.btnView.isHidden = true self.currentHeaderView?.filterButton.isHidden = true
self.videoDetailNavView?.startSelectButton.isHidden = true self.videoDetailNavView?.startSelectButton.isHidden = true
self.deleteButton.isHidden = true self.deleteButtonView.deleteButton.isHidden = true
}else{ }else{
self.defaultImageView.isHidden = true self.defaultImageView.isHidden = true
self.defaultTipLabel.isHidden = true self.defaultTipLabel.isHidden = true
self.currentHeaderView?.btnView.isHidden = false self.currentHeaderView?.filterButton.isHidden = false
self.videoDetailNavView?.startSelectButton.isHidden = false self.videoDetailNavView?.startSelectButton.isHidden = false
self.deleteButton.isHidden = false self.deleteButtonView.deleteButton.isHidden = false
} }
} }
self.addTrashView()
} }
} }
...@@ -608,8 +739,8 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -608,8 +739,8 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
// 更新页面 // 更新页面
DispatchQueue.main.async { DispatchQueue.main.async {
self.selectedModel.removeAll() self.selectedModel.removeAll()
self.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1) self.deleteButtonView.deleteButton.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
self.deleteButton.setTitle("Delete", for: .normal) self.deleteButtonView.deleteButton.setTitle("Delete", for: .normal)
if self.currentHeaderView != nil { if self.currentHeaderView != nil {
self.currentHeaderView?.sizeLabel.text = "\(self.resourceData.count) Videos" self.currentHeaderView?.sizeLabel.text = "\(self.resourceData.count) Videos"
...@@ -623,52 +754,20 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -623,52 +754,20 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
setDefaultPage() setDefaultPage()
} }
func sortByType(sortType:ResouceSortType){
/// 改变标题
func changeHeaderTitle(){
var title : String = "Largest"
switch self.currentSort {
case 0:
title = "Largest"
break
case 1:
title = "Smallest"
break
case 2:
title = "Newest"
break
case 3:
title = "Oldest"
break
default:
break
}
DispatchQueue.main.async {
self.currentHeaderView!.selectlabel.text = title
self.collectionView.reloadData()
}
}
func sortByType(sortType:Int){
switch sortType { switch sortType {
case 0: case .largest:
self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize } self.resourceData = self.resourceData.sorted { $0.assetSize > $1.assetSize }
break break
case 1: case .smallest:
self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize } self.resourceData = self.resourceData.sorted { $0.assetSize < $1.assetSize }
break break
case 2: case .latest:
self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate } self.resourceData = self.resourceData.sorted { $0.createDate > $1.createDate }
break break
case 3: case .oldest:
self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate } self.resourceData = self.resourceData.sorted { $0.createDate < $1.createDate }
break break
default:
break
} }
} }
......
...@@ -23,6 +23,7 @@ class PhotoDetailViewController : BaseViewController { ...@@ -23,6 +23,7 @@ class PhotoDetailViewController : BaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
self.view.addSubview(self.closeButton) self.view.addSubview(self.closeButton)
self.closeButton.snp.makeConstraints { make in self.closeButton.snp.makeConstraints { make in
......
...@@ -77,6 +77,9 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -77,6 +77,9 @@ class PhotoRemoveViewController: BaseViewController {
// MARK: - 生命周期 // MARK: - 生命周期
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
formatter.dateStyle = .medium formatter.dateStyle = .medium
formatter.timeStyle = .none formatter.timeStyle = .none
if let type = self.mediaType { if let type = self.mediaType {
...@@ -295,7 +298,8 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -295,7 +298,8 @@ class PhotoRemoveViewController: BaseViewController {
photoView.mediaType = self.mediaType photoView.mediaType = self.mediaType
photoView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan))) photoView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan)))
view.addSubview(photoView) view.addSubview(photoView)
photoView.frame = CGRectMake(15, statusBarHeight + 44, self.view.width - 30, self.view.height - 78 - safeHeight - statusBarHeight - 44) photoView.frame = CGRectMake(0, 0, self.view.width - 30, 509 * RScreenH())
photoView.center = self.view.center
photoViews.append(photoView) photoViews.append(photoView)
} }
...@@ -470,7 +474,8 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -470,7 +474,8 @@ class PhotoRemoveViewController: BaseViewController {
private func resetViewPosition(_ view: PhotosRemoveBaseView) { private func resetViewPosition(_ view: PhotosRemoveBaseView) {
UIView.animate(withDuration: 0.3) { UIView.animate(withDuration: 0.3) {
view.transform = .identity view.transform = .identity
view.frame = CGRectMake(15, statusBarHeight + 44, self.view.width - 30, self.view.height - 78 - safeHeight - statusBarHeight - 44) view.frame = CGRectMake(0, 0, self.view.width - 30, 509 * RScreenH())
view.center = self.view.center
view.hideButtons() view.hideButtons()
} }
} }
...@@ -487,7 +492,8 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -487,7 +492,8 @@ class PhotoRemoveViewController: BaseViewController {
// 创建新视图并更新内容 // 创建新视图并更新内容
let newView = PhotosRemoveBaseView() let newView = PhotosRemoveBaseView()
newView.frame = CGRectMake(15, statusBarHeight + 44, self.view.width - 30, self.view.height - 78 - safeHeight - statusBarHeight - 44) newView.frame = CGRectMake(0, 0, self.view.width - 30, 509 * RScreenH())
newView.center = self.view.center
newView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan))) newView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan)))
newView.alpha = 0 newView.alpha = 0
view.addSubview(newView) view.addSubview(newView)
......
//
// HomeDetailDeleteView.swift
// PhoneManager
//
// Created by edy on 2025/5/19.
//
import UIKit
class HomeDetailDeleteView: UIView {
var deleteCallBack:(()->Void) = {}
lazy var deleteButton : UIButton = {
let view = UIButton()
view.setTitle("Delete", for: UIControl.State.normal)
view.setTitleColor(.white, for: .normal)
view.clipsToBounds = true
view.layer.cornerRadius = 23
view.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
view.addTarget(self, action: #selector(deleteButtonAction), for: .touchUpInside)
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .white
self.addSubview(self.deleteButton)
self.deleteButton.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15)
make.height.equalTo(46)
}
}
@objc func deleteButtonAction(){
self.deleteCallBack()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
...@@ -13,12 +13,16 @@ class HomeInfoView :UIView { ...@@ -13,12 +13,16 @@ class HomeInfoView :UIView {
var titleText : String? var titleText : String?
var isDragEnd : Bool = false
var type : PhotsFileType? var type : PhotsFileType?
var models:[HomeInfoTableItem] = [] var models:[HomeInfoTableItem] = []
var callBack:callBack<Any> = {text in} var callBack:callBack<Any> = {text in}
var keepAllNoDataCallBack : ()->Void = {}
var deleteCallBack:callBack<[AssetModel]> = {array in } var deleteCallBack:callBack<[AssetModel]> = {array in }
var titleShowHideCallBack:callBack<Bool> = {isShow in} var titleShowHideCallBack:callBack<Bool> = {isShow in}
...@@ -42,6 +46,7 @@ class HomeInfoView :UIView { ...@@ -42,6 +46,7 @@ class HomeInfoView :UIView {
lazy var headerView:HomeInfoTitleView = { lazy var headerView:HomeInfoTitleView = {
let sview:HomeInfoTitleView = HomeInfoTitleView(frame: CGRect(x: 0, y: 0, width: width, height: 84)) let sview:HomeInfoTitleView = HomeInfoTitleView(frame: CGRect(x: 0, y: 0, width: width, height: 84))
sview.titleLabel.text = self.titleText sview.titleLabel.text = self.titleText
sview.type = self.type
sview.filterButton.isHidden = self.type != .similar && self.type != .SimilarVideos sview.filterButton.isHidden = self.type != .similar && self.type != .SimilarVideos
return sview return sview
}() }()
...@@ -308,6 +313,7 @@ class HomeInfoView :UIView { ...@@ -308,6 +313,7 @@ class HomeInfoView :UIView {
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: deleteView.isHidden ? 12 : deleteView.height + 12 , right: 0) tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: deleteView.isHidden ? 12 : deleteView.height + 12 , right: 0)
self.nextRowButton.isHidden = !self.isShowNextRowButton() self.nextRowButton.isHidden = !self.isShowNextRowButton()
} }
} }
...@@ -315,45 +321,28 @@ class HomeInfoView :UIView { ...@@ -315,45 +321,28 @@ class HomeInfoView :UIView {
extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
@objc func nextRowButtonAction(){ @objc func nextRowButtonAction(){
self.tableScrollToNextRow()
}
// 重新设置models
func resetModels(){
var newArray : [HomeInfoTableItem] = []
for array in ids ?? [] {
var smodels:[ImageSeletedCollectionItem] = []
for id in array {
let smodel = ImageSeletedCollectionItem() self.tableScrollToNextRow()
smodel.id = id
smodel.isSeleted = false
smodels.append(smodel)
}
let smodel = HomeInfoTableItem()
smodel.type = type
smodel.smodels = smodels
smodel.titleText = titleText
newArray.append(smodel)
}
self.models = newArray
} }
/// 让表格自动滚动一行 /// 让表格自动滚动一行
private func tableScrollToNextRow() { private func tableScrollToNextRow() {
guard let indexPath = tableView.indexPathsForVisibleRows?.first else { return } guard let indexPath = tableView.indexPathsForVisibleRows?.first else { return }
let nextRow = indexPath.row + 1 // let nextRow = self.isDragEnd == true ? indexPath.row + 1 : indexPath.row + 2
let nextRow = indexPath.row + 2
let nextSection = indexPath.section let nextSection = indexPath.section
// 获取最后一个cell 看看是不是存在
guard let lastIndexPath = tableView.indexPathsForVisibleRows?.last else {return}
let lastNextRow = lastIndexPath.row + 1
guard lastNextRow < tableView.numberOfRows(inSection: nextSection) else {
// 滚动到最底部
tableView.scrollToRow(at: lastIndexPath, at: .bottom, animated: true)
return
}
// 检查下一行是否存在 // 检查下一行是否存在
guard nextRow < tableView.numberOfRows(inSection: nextSection) else { return } guard nextRow < tableView.numberOfRows(inSection: nextSection) else { return }
...@@ -370,6 +359,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -370,6 +359,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
// 直接滚动到调整后的位置 // 直接滚动到调整后的位置
tableView.setContentOffset(adjustedOffset, animated: true) tableView.setContentOffset(adjustedOffset, animated: true)
self.isDragEnd = false
} }
func scrollViewDidScroll(_ scrollView: UIScrollView) { func scrollViewDidScroll(_ scrollView: UIScrollView) {
...@@ -386,6 +376,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -386,6 +376,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
tableView.bringSubviewToFront(self.headerView) tableView.bringSubviewToFront(self.headerView)
} }
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
self.isDragEnd = true
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return models.count return models.count
...@@ -394,10 +388,25 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -394,10 +388,25 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: HomeInfoTableViewCell.identifier, for: indexPath) as! HomeInfoTableViewCell let cell = tableView.dequeueReusableCell(withIdentifier: HomeInfoTableViewCell.identifier, for: indexPath) as! HomeInfoTableViewCell
cell.saveKeepListFinishedCallback = { cell.saveKeepListFinishedCallback = {[weak self] index in
self.ids?.remove(at: indexPath.section) guard let self else {return}
self.resetModels() self.ids?.remove(at: index.section)
tableView.deleteRows(at: [indexPath], with: .automatic) self.models.remove(at: index.section)
DispatchQueue.main.async {
self.setTitleView()
}
// 禁用动画
UIView.performWithoutAnimation {
tableView.beginUpdates()
tableView.deleteRows(at: [index], with: .fade)
tableView.endUpdates()
}
if let data = self.ids {
if data.count <= 0 {
self.keepAllNoDataCallBack()
}
}
} }
cell.type = self.type cell.type = self.type
...@@ -439,10 +448,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -439,10 +448,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
for item in orgModels { for item in orgModels {
var array = item var array = item
if startDate != nil { if startDate != nil {
array = array.filter({$0.createDate > startDate!}) array = array.filter({$0.createDate >= startDate!})
} }
if endDate != nil { if endDate != nil {
array = array.filter({$0.createDate < endDate!}) array = array.filter({$0.createDate <= endDate!})
} }
if array.count >= 2 { if array.count >= 2 {
...@@ -490,6 +499,8 @@ class HomeInfoTitleView:UIView { ...@@ -490,6 +499,8 @@ class HomeInfoTitleView:UIView {
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in} var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var type : PhotsFileType?
lazy var titleLabel:UILabel = { lazy var titleLabel:UILabel = {
let sview:UILabel = UILabel() let sview:UILabel = UILabel()
...@@ -567,7 +578,12 @@ class HomeInfoTitleView:UIView { ...@@ -567,7 +578,12 @@ class HomeInfoTitleView:UIView {
let allNumberStr = "\(allNumber)" let allNumberStr = "\(allNumber)"
let seletedCountStr = "\(seletedCount)" let seletedCountStr = "\(seletedCount)"
let fullText = allNumberStr + " photos · \(seletedCountStr) selected" var fullText = "0 photos · 0 selected"
if self.type == .SimilarVideos {
fullText = allNumberStr + " videos · \(seletedCountStr) selected"
}else {
fullText = allNumberStr + " photos · \(seletedCountStr) selected"
}
let attributedString2 = NSMutableAttributedString(string: fullText, attributes: [ let attributedString2 = NSMutableAttributedString(string: fullText, attributes: [
......
...@@ -9,7 +9,7 @@ import Foundation ...@@ -9,7 +9,7 @@ import Foundation
class HomePhotosDetailCustomHeaderView : UICollectionReusableView { class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
var sortCallback : ()->Void = {} var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = { lazy var modelTitlelabel :UILabel = {
let label = UILabel() let label = UILabel()
...@@ -20,33 +20,22 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView { ...@@ -20,33 +20,22 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
return label return label
}() }()
lazy var btnView :UIView = { // 筛选按钮
let view = UIView() lazy var filterButton : UIButton = {
view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1) let button = UIButton(type: .custom)
view.layer.cornerRadius = 16 button.setImage(UIImage(named: "Frame 1"), for: .normal)
view.clipsToBounds = true button.setTitle("The largest", for: .normal)
button.layer.cornerRadius = 14
let tap = UITapGestureRecognizer() button.clipsToBounds = true
tap.addTarget(self, action: #selector(sortAction)) button.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 0.1000)
view.isUserInteractionEnabled = true button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
view.addGestureRecognizer(tap) button.setTitleColor(UIColor(red: 0.07, green: 0.07, blue: 0.07, alpha: 1), for: .normal)
button.addTarget(self, action: #selector(filterButtonAction), for: .touchUpInside)
return view button.isHidden = false
return button
}() }()
lazy var selectImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_newest_similar")
return view
}()
lazy var selectlabel :UILabel = {
let label = UILabel()
label.text = "Largest"
label.textAlignment = .center
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
return label
}()
lazy var countLabel :UILabel = { lazy var countLabel :UILabel = {
let label = UILabel() let label = UILabel()
label.text = "0 Photos" label.text = "0 Photos"
...@@ -59,13 +48,8 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView { ...@@ -59,13 +48,8 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
private func setUI(){ private func setUI(){
self.addSubview(self.modelTitlelabel) self.addSubview(self.modelTitlelabel)
self.addSubview(self.btnView)
self.addSubview(self.countLabel) self.addSubview(self.countLabel)
self.addSubview(self.filterButton)
self.btnView.addSubview(self.selectImageView)
self.btnView.addSubview(self.selectlabel)
self.modelTitlelabel.snp.makeConstraints { make in self.modelTitlelabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(0) make.left.equalToSuperview().offset(0)
...@@ -73,29 +57,17 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView { ...@@ -73,29 +57,17 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
make.width.equalTo(150 * RScreenW()) make.width.equalTo(150 * RScreenW())
make.height.equalTo(28) make.height.equalTo(28)
} }
self.filterButton.snp.makeConstraints { make in
self.btnView.snp.makeConstraints { make in make.centerY.equalTo(self.modelTitlelabel.snp.centerY)
make.right.equalToSuperview().offset(0) make.right.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(12) make.height.equalTo(28)
make.width.equalTo(103 * RScreenW()) make.width.equalTo(98)
make.height.equalTo(32)
}
self.selectImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.centerY.equalToSuperview()
make.width.height.equalTo(20)
}
self.selectlabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-12)
make.top.equalToSuperview().offset(6)
make.width.equalTo(60 * RScreenW())
make.height.equalTo(20)
} }
self.countLabel.snp.makeConstraints { make in self.countLabel.snp.makeConstraints { make in
make.left.equalTo(0) make.left.equalTo(0)
make.right.equalTo(0) make.right.equalTo(0)
make.top.equalTo(self.btnView.snp.bottom).offset(8) make.top.equalTo(self.filterButton.snp.bottom).offset(8)
make.height.equalTo(20) make.height.equalTo(20)
} }
} }
...@@ -112,7 +84,19 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView { ...@@ -112,7 +84,19 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
setUI() setUI()
} }
@objc func sortAction(){ @objc func filterButtonAction(){
sortCallback() if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
self.sortViewSubmitCallBack(model)
}
}
} }
} }
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
class HomeVideoDetailCustomHeaderView : UICollectionReusableView { class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
var sortCallback : ()->Void = {} var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = { lazy var modelTitlelabel :UILabel = {
let label = UILabel() let label = UILabel()
...@@ -18,34 +18,19 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView { ...@@ -18,34 +18,19 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
label.font = UIFont.systemFont(ofSize: 20, weight: .bold) label.font = UIFont.systemFont(ofSize: 20, weight: .bold)
return label return label
}() }()
// 筛选按钮
lazy var btnView :UIView = { lazy var filterButton : UIButton = {
let view = UIView() let button = UIButton(type: .custom)
view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1) button.setImage(UIImage(named: "Frame 1"), for: .normal)
view.layer.cornerRadius = 16 button.setTitle("The largest", for: .normal)
view.clipsToBounds = true button.layer.cornerRadius = 14
button.clipsToBounds = true
button.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 0.1000)
let tap = UITapGestureRecognizer() button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
tap.addTarget(self, action: #selector(sortAction)) button.setTitleColor(UIColor(red: 0.07, green: 0.07, blue: 0.07, alpha: 1), for: .normal)
view.isUserInteractionEnabled = true button.addTarget(self, action: #selector(filterButtonAction), for: .touchUpInside)
view.addGestureRecognizer(tap) button.isHidden = false
return button
return view
}()
lazy var selectImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_newest_similar")
return view
}()
lazy var selectlabel :UILabel = {
let label = UILabel()
label.text = "Largest"
label.textAlignment = .center
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
return label
}() }()
lazy var sizeLabel :UILabel = { lazy var sizeLabel :UILabel = {
let label = UILabel() let label = UILabel()
...@@ -56,71 +41,13 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView { ...@@ -56,71 +41,13 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
return label return label
}() }()
// lazy var tipBackView :UIView = {
// let view = UIView()
// view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
// view.layer.cornerRadius = 8
// view.clipsToBounds = true
// return view
// }()
// lazy var tipImageView :UIImageView = {
// let view = UIImageView()
// view.image = UIImage(named: "ic_cmpress_home_nor")
// return view
// }()
//
// lazy var tipLabel :UILabel = {
// let label = UILabel()
// label.text = "Video Compress"
// label.textAlignment = .left
// label.numberOfLines = 0
// label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
// return label
// }()
//
// lazy var tipDetailLabel :UILabel = {
// let label = UILabel()
// label.text = "Tap to start the process"
// label.textAlignment = .left
// label.numberOfLines = 0
// label.textColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
// label.font = UIFont.systemFont(ofSize: 12, weight: .regular)
// return label
// }()
//
// lazy var saveSizeLabel :UILabel = {
// let label = UILabel()
// label.text = "13.5M"
// label.textAlignment = .right
// label.textColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
// label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
// return label
// }()
//
// lazy var moreImageView :UIImageView = {
// let view = UIImageView()
// view.image = UIImage(named: "icon_left_setting_grey")
// return view
// }()
private func setUI(){ private func setUI(){
self.addSubview(self.modelTitlelabel) self.addSubview(self.modelTitlelabel)
self.addSubview(self.btnView) self.addSubview(self.filterButton)
self.addSubview(self.sizeLabel) self.addSubview(self.sizeLabel)
self.btnView.addSubview(self.selectImageView)
self.btnView.addSubview(self.selectlabel)
// self.addSubview(self.tipBackView)
// self.tipBackView.addSubview(self.tipImageView)
// self.tipBackView.addSubview(self.tipLabel)
// self.tipBackView.addSubview(self.tipDetailLabel)
// self.tipBackView.addSubview(self.saveSizeLabel)
// self.tipBackView.addSubview(self.moreImageView)
self.modelTitlelabel.snp.makeConstraints { make in self.modelTitlelabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(0) make.left.equalToSuperview().offset(0)
...@@ -129,31 +56,23 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView { ...@@ -129,31 +56,23 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
make.height.equalTo(28) make.height.equalTo(28)
} }
self.btnView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(12)
make.width.equalTo(103 * RScreenW())
make.height.equalTo(32)
}
self.selectImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.centerY.equalToSuperview()
make.width.height.equalTo(20)
}
self.selectlabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-12)
make.top.equalToSuperview().offset(6)
make.width.equalTo(60 * RScreenW())
make.height.equalTo(20)
}
self.sizeLabel.snp.makeConstraints { make in self.sizeLabel.snp.makeConstraints { make in
make.left.equalTo(0) make.left.equalTo(0)
make.right.equalTo(0) make.right.equalTo(0)
make.top.equalTo(self.btnView.snp.bottom).offset(8) make.top.equalTo(self.filterButton.snp.bottom).offset(8)
make.height.equalTo(20) make.height.equalTo(20)
} }
self.filterButton.snp.makeConstraints { make in
make.centerY.equalTo(self.modelTitlelabel.snp.centerY)
make.right.equalToSuperview().offset(0)
make.height.equalTo(28)
make.width.equalTo(98)
}
addSubview(compressionTipView) addSubview(compressionTipView)
compressionTipView.snp.makeConstraints { make in compressionTipView.snp.makeConstraints { make in
...@@ -164,47 +83,6 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView { ...@@ -164,47 +83,6 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
let tap = UITapGestureRecognizer(target: self, action: #selector(compressClick)) let tap = UITapGestureRecognizer(target: self, action: #selector(compressClick))
compressionTipView.addGestureRecognizer(tap) compressionTipView.addGestureRecognizer(tap)
// self.tipBackView.snp.makeConstraints { make in
// make.left.equalTo(0)
// make.right.equalTo(0)
// make.top.equalTo(self.sizeLabel.snp.bottom).offset(12)
// make.height.equalTo(70)
// }
//
// self.tipImageView.snp.makeConstraints { make in
// make.left.equalToSuperview().offset(15)
// make.centerY.equalToSuperview()
// make.width.height.equalTo(30)
//
// }
// self.tipLabel.snp.makeConstraints { make in
// make.left.equalTo(self.tipImageView.snp.right).offset(10)
// make.width.equalTo(150 * RScreenW())
// make.height.equalTo(22)
// make.top.equalToSuperview().offset(15)
// }
// self.tipDetailLabel.snp.makeConstraints { make in
// make.left.equalTo(self.tipImageView.snp.right).offset(10)
// make.width.equalTo(150 * RScreenW())
// make.height.equalTo(18)
// make.top.equalTo(self.tipLabel.snp.bottom).offset(0)
// }
//
// self.moreImageView.snp.makeConstraints { make in
// make.height.width.equalTo(20)
// make.right.equalToSuperview().offset(-15)
// make.centerY.equalToSuperview()
// }
//
// self.saveSizeLabel.snp.makeConstraints { make in
// make.centerY.equalToSuperview()
// make.right.equalTo(self.moreImageView.snp.left).offset(-10)
// make.height.equalTo(28)
// make.width.equalTo(100)
// }
} }
override init(frame: CGRect) { override init(frame: CGRect) {
...@@ -219,8 +97,20 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView { ...@@ -219,8 +97,20 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
setUI() setUI()
} }
@objc func sortAction(){ @objc func filterButtonAction(){
sortCallback() if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
self.sortViewSubmitCallBack(model)
}
}
} }
lazy var compressionTipView:VideocompressionHeadView = { lazy var compressionTipView:VideocompressionHeadView = {
......
...@@ -56,6 +56,7 @@ class PhotosRemoveBaseView: UIView { ...@@ -56,6 +56,7 @@ class PhotosRemoveBaseView: UIView {
self.imageView.isUserInteractionEnabled = true self.imageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer() let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(showDeatail)) tap.addTarget(self, action: #selector(showDeatail))
imageView.backgroundColor = .white
self.imageView.addGestureRecognizer(tap) self.imageView.addGestureRecognizer(tap)
} }
......
...@@ -118,10 +118,15 @@ class ResourceFilterBoxView : UIView { ...@@ -118,10 +118,15 @@ class ResourceFilterBoxView : UIView {
setUpUI() setUpUI()
} }
func getMonthEn(month: Int )-> String{ func getMonthEn(month: Int) -> String {
// 检查输入是否在有效范围内(1-12)
guard (1...12).contains(month) else {
return "Invalid Month" // 或抛出错误
}
let formatter = DateFormatter() let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US") formatter.locale = Locale(identifier: "en_US")
return formatter.monthSymbols[month] return formatter.monthSymbols[month - 1]
} }
override func removeFromSuperview() { override func removeFromSuperview() {
...@@ -240,6 +245,7 @@ class ResourceFilterBoxView : UIView { ...@@ -240,6 +245,7 @@ class ResourceFilterBoxView : UIView {
components.year = year components.year = year
components.month = month components.month = month
components.day = 1 // 设置为当月第一天 components.day = 1 // 设置为当月第一天
components.timeZone = TimeZone(identifier: "UTC")
// 使用公历日历 // 使用公历日历
let calendar = Calendar(identifier: .gregorian) let calendar = Calendar(identifier: .gregorian)
...@@ -260,6 +266,7 @@ class ResourceFilterBoxView : UIView { ...@@ -260,6 +266,7 @@ class ResourceFilterBoxView : UIView {
components.year = nextYear components.year = nextYear
components.month = nextMonth components.month = nextMonth
components.day = 1 components.day = 1
components.timeZone = TimeZone(identifier: "UTC")
let calendar = Calendar(identifier: .gregorian) let calendar = Calendar(identifier: .gregorian)
guard let nextMonthFirstDay = calendar.date(from: components) else { guard let nextMonthFirstDay = calendar.date(from: components) else {
...@@ -318,7 +325,6 @@ class ResourceFilterBoxView : UIView { ...@@ -318,7 +325,6 @@ class ResourceFilterBoxView : UIView {
self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal) self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.startDateButton.closeButton.isHidden = false self.startDateButton.closeButton.isHidden = false
self.startDate = self.dateFrom(year: year, month: month) self.startDate = self.dateFrom(year: year, month: month)
}else { }else {
self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal) self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.endDateButton.closeButton.isHidden = false self.endDateButton.closeButton.isHidden = false
......
...@@ -9,6 +9,8 @@ import UIKit ...@@ -9,6 +9,8 @@ import UIKit
class TrashSubView: UIView { class TrashSubView: UIView {
var type : TrashTypeEnum?
var clearTashDataCallBack : ()->Void = {} var clearTashDataCallBack : ()->Void = {}
var presentTashDetailViewClickCallBack : ()->Void = {} var presentTashDetailViewClickCallBack : ()->Void = {}
...@@ -32,7 +34,7 @@ class TrashSubView: UIView { ...@@ -32,7 +34,7 @@ class TrashSubView: UIView {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.setImage(UIImage(named: "ic_delete_duplicates"), for: .normal) button.setImage(UIImage(named: "ic_delete_duplicates"), for: .normal)
button.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1) button.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
button.setTitle("Empty the garbage", for: .normal) button.setTitle("Empty Trash", for: .normal)
button.setTitleColor(.white, for: .normal) button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold) button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
button.layer.cornerRadius = 19 button.layer.cornerRadius = 19
...@@ -43,6 +45,8 @@ class TrashSubView: UIView { ...@@ -43,6 +45,8 @@ class TrashSubView: UIView {
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
self.addTopShadow()
// 给当前视图添加手势 // 给当前视图添加手势
addTapGestureToSelf() addTapGestureToSelf()
......
...@@ -146,14 +146,14 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate { ...@@ -146,14 +146,14 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate {
} }
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return component == 0 ? months[row] : "\(years.reversed()[row])" return component == 0 ? months[row] : "\(years[row])"
} }
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 { if component == 0 {
selectedMonth = row selectedMonth = row
} else { } else {
selectedYear = years.reversed()[row] selectedYear = years[row]
} }
} }
...@@ -161,4 +161,13 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate { ...@@ -161,4 +161,13 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate {
return component == 0 ? self.width/2 : self.width/2 return component == 0 ? self.width/2 : self.width/2
} }
private var currentYear: Int {
return Calendar.current.component(.year, from: Date())
}
private var currentMonth: Int {
return Calendar.current.component(.month, from: Date())
}
} }
...@@ -24,7 +24,7 @@ class HomeInfoTableViewCell:UITableViewCell { ...@@ -24,7 +24,7 @@ class HomeInfoTableViewCell:UITableViewCell {
var callBack:callBack<Any> = {text in} var callBack:callBack<Any> = {text in}
var saveKeepListFinishedCallback : ()->Void = {} var saveKeepListFinishedCallback : (IndexPath)->Void = {index in}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
...@@ -119,7 +119,6 @@ class HomeInfoTableViewCell:UITableViewCell { ...@@ -119,7 +119,6 @@ class HomeInfoTableViewCell:UITableViewCell {
UIView.transition(with: collectionView!, duration: 0.3, options: .transitionCrossDissolve, animations: { UIView.transition(with: collectionView!, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.collectionView?.reloadData() self.collectionView?.reloadData()
// self.reloadCollectionView()
}, completion: nil) }, completion: nil)
} }
} }
...@@ -224,7 +223,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou ...@@ -224,7 +223,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou
cell.keepAllCallBack = { cell.keepAllCallBack = {
//存到保留列表 //存到保留列表
saveAllDataToKeepList() saveAllDataToKeepList()
self.saveKeepListFinishedCallback() self.saveKeepListFinishedCallback(indexPath)
} }
// 存全部数据到保留列表 // 存全部数据到保留列表
func saveAllDataToKeepList(){ func saveAllDataToKeepList(){
......
...@@ -21,7 +21,8 @@ class PMLoadingHUD{ ...@@ -21,7 +21,8 @@ class PMLoadingHUD{
func show(_ title:String = "Deleting...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){ func show(_ title:String = "Deleting...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){
disMiss() disMiss()
DispatchQueue.main.async { DispatchQueue.main.async {
KEYWINDOW()?.addSubview(self.loadingView) cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle) self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play() self.loadingView.animationView.play()
} }
......
...@@ -51,6 +51,8 @@ class PMShowImgVideoController: BaseViewController { ...@@ -51,6 +51,8 @@ class PMShowImgVideoController: BaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
......
...@@ -12,13 +12,13 @@ class TrashViewController: BaseViewController { ...@@ -12,13 +12,13 @@ class TrashViewController: BaseViewController {
var dissmisCallBack:()->Void = {} var dissmisCallBack:()->Void = {}
var source:[TrashTypeEnum] = [.video,.other,.shot,.chat] var source:[TrashTypeEnum] = [.video,.other,.shot]
var contentH:CGFloat = 0 var contentH:CGFloat = 0
var contentScrollView:UIScrollView! var contentScrollView:UIScrollView!
var delBtn:UIButton! var delBtn:UIButton!
var currentType:TrashTypeEnum = .other var currentType:TrashTypeEnum = .other
let pageCount = 4 // 总页数 let pageCount = 3 // 总页数
var currentPage = 1 { var currentPage = 1 {
didSet{ didSet{
self.setDelButtonUI() self.setDelButtonUI()
...@@ -61,7 +61,7 @@ class TrashViewController: BaseViewController { ...@@ -61,7 +61,7 @@ class TrashViewController: BaseViewController {
func configUI(){ func configUI(){
view.backgroundColor = .white view.backgroundColor = .white
contentScrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: ScreenW, height: contentH)) contentScrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: ScreenW, height: contentH))
contentScrollView.contentSize = CGSize(width: ScreenW*4, height: view.height) contentScrollView.contentSize = CGSize(width: ScreenW * CGFloat(self.source.count), height: view.height)
contentScrollView.isPagingEnabled = true contentScrollView.isPagingEnabled = true
contentScrollView.showsHorizontalScrollIndicator = false contentScrollView.showsHorizontalScrollIndicator = false
contentScrollView.showsVerticalScrollIndicator = false contentScrollView.showsVerticalScrollIndicator = false
...@@ -98,13 +98,11 @@ class TrashViewController: BaseViewController { ...@@ -98,13 +98,11 @@ class TrashViewController: BaseViewController {
contentScrollView.addSubview(videoView) contentScrollView.addSubview(videoView)
contentScrollView.addSubview(otherView) contentScrollView.addSubview(otherView)
contentScrollView.addSubview(shotView) contentScrollView.addSubview(shotView)
contentScrollView.addSubview(chatView)
videoView.deleteButton = delBtn videoView.deleteButton = delBtn
otherView.deleteButton = delBtn otherView.deleteButton = delBtn
shotView.deleteButton = delBtn shotView.deleteButton = delBtn
chatView.deleteButton = delBtn
} }
override func viewWillLayoutSubviews() { override func viewWillLayoutSubviews() {
...@@ -114,11 +112,10 @@ class TrashViewController: BaseViewController { ...@@ -114,11 +112,10 @@ class TrashViewController: BaseViewController {
let viewHeight = self.view.bounds.height let viewHeight = self.view.bounds.height
contentH = viewHeight - 108 contentH = viewHeight - 108
contentScrollView.frame = CGRect(x: 0, y: 34, width: viewWidth, height: contentH) contentScrollView.frame = CGRect(x: 0, y: 34, width: viewWidth, height: contentH)
contentScrollView.contentSize = CGSize(width: viewWidth*4, height: contentH) contentScrollView.contentSize = CGSize(width: viewWidth * CGFloat(self.source.count), height: contentH)
videoView.frame = CGRect(x: 0, y: 0, width: viewWidth, height: contentH) videoView.frame = CGRect(x: 0, y: 0, width: viewWidth, height: contentH)
otherView.frame = CGRect(x: viewWidth, y: 0, width: viewWidth, height: contentH) otherView.frame = CGRect(x: viewWidth, y: 0, width: viewWidth, height: contentH)
shotView.frame = CGRect(x: viewWidth*2, y: 0, width: viewWidth, height: contentH) shotView.frame = CGRect(x: viewWidth*2, y: 0, width: viewWidth, height: contentH)
chatView.frame = CGRect(x: viewWidth*3, y: 0, width: viewWidth, height: contentH)
} }
lazy var videoView:TrashContenView = { lazy var videoView:TrashContenView = {
...@@ -139,54 +136,8 @@ class TrashViewController: BaseViewController { ...@@ -139,54 +136,8 @@ class TrashViewController: BaseViewController {
return shotView return shotView
}() }()
lazy var chatView:TrashContenView = {
let chatView = TrashContenView()
chatView.trashType = .chat
return chatView
}()
//
// lazy var collectionView:UICollectionView = {
// let layout = UICollectionViewFlowLayout()
// layout.itemSize = CGSize(width: view.width, height: view.height)
// layout.scrollDirection = .horizontal
// layout.minimumInteritemSpacing = 0
// layout.minimumLineSpacing = 0
// let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.width, height: view.height), collectionViewLayout:layout)
// collectionView.isPagingEnabled = true
// collectionView.delegate = self
// collectionView.backgroundColor = .white
// collectionView.dataSource = self
// collectionView.register(UINib(nibName: "TrashContenViewCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenViewCell0")
// collectionView.register(UINib(nibName: "TrashContenViewCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenViewCell1")
// collectionView.register(UINib(nibName: "TrashContenViewCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenViewCell2")
// collectionView.register(UINib(nibName: "TrashContenViewCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenViewCell3")
//
// return collectionView
// }()
} }
//extension TrashViewController:UICollectionViewDelegate,UICollectionViewDataSource{
//
// func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// return source.count
// }
//
// func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TrashContenViewCell\(indexPath.row)", for: indexPath) as! TrashContenViewCell
// cell.trashType = source[indexPath.row]
// return cell
// }
//
//}
extension TrashViewController:UIScrollViewDelegate{ extension TrashViewController:UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView){ func scrollViewDidScroll(_ scrollView: UIScrollView){
...@@ -233,9 +184,6 @@ extension TrashViewController:UIScrollViewDelegate{ ...@@ -233,9 +184,6 @@ extension TrashViewController:UIScrollViewDelegate{
if self.currentPage == 3 { if self.currentPage == 3 {
return (TrashTypeEnum.shot,self.shotView) return (TrashTypeEnum.shot,self.shotView)
} }
if self.currentPage == 4 {
return (TrashTypeEnum.chat,self.chatView)
}
return (TrashTypeEnum.video,self.videoView) return (TrashTypeEnum.video,self.videoView)
} }
......
...@@ -11,7 +11,6 @@ enum TrashTypeEnum : String, CaseIterable{ ...@@ -11,7 +11,6 @@ enum TrashTypeEnum : String, CaseIterable{
case video = "Video" case video = "Video"
case other = "Other" case other = "Other"
case shot = "Screenshot" case shot = "Screenshot"
case chat = "Chat"
var dbType:Int{ var dbType:Int{
switch self { switch self {
...@@ -21,8 +20,6 @@ enum TrashTypeEnum : String, CaseIterable{ ...@@ -21,8 +20,6 @@ enum TrashTypeEnum : String, CaseIterable{
return 1 return 1
case .shot: case .shot:
return 2 return 2
case .chat:
return 3
} }
} }
} }
......
...@@ -39,8 +39,6 @@ class TrashContenTitleCell: UICollectionViewCell { ...@@ -39,8 +39,6 @@ class TrashContenTitleCell: UICollectionViewCell {
scrollLine.frame = lineTwo.frame scrollLine.frame = lineTwo.frame
case .shot: case .shot:
scrollLine.frame = lineThree.frame scrollLine.frame = lineThree.frame
case .chat:
scrollLine.frame = lineFour.frame
} }
} }
} }
...@@ -131,16 +129,6 @@ class TrashContenTitleCell: UICollectionViewCell { ...@@ -131,16 +129,6 @@ class TrashContenTitleCell: UICollectionViewCell {
} }
} }
case .chat:
if offset < ScreenW * 3{
UIView.animate(withDuration: 0.2) {
weakSelf.scrollLine.frame = weakSelf.lineThree.frame
}
}else{
UIView.animate(withDuration: 0.2) {
weakSelf.scrollLine.frame = weakSelf.lineFour.frame
}
}
} }
} }
} }
......
...@@ -29,7 +29,7 @@ class TrashContenView: UIView { ...@@ -29,7 +29,7 @@ class TrashContenView: UIView {
var deleteButton : UIButton? var deleteButton : UIButton?
var scrollLine:UIView! var scrollLine:UIView!
let lineW:CGFloat = (ScreenW - 62) / 4.0 let lineW:CGFloat = (ScreenW - 62) / 3.0
var dataSource:[AssetModel] = [] { var dataSource:[AssetModel] = [] {
didSet{ didSet{
...@@ -48,11 +48,6 @@ class TrashContenView: UIView { ...@@ -48,11 +48,6 @@ class TrashContenView: UIView {
} }
func getData(){ func getData(){
// dataSource = TrashDatabase.shared.queryByMediaType(trashType.dbType).compactMap({ (localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int) in
// return AssetModel.init(localIdentifier: localIdentifier, assetSize: assetSize, createDate: createDate)
// })
collectionView.reloadData() collectionView.reloadData()
} }
...@@ -81,7 +76,6 @@ class TrashContenView: UIView { ...@@ -81,7 +76,6 @@ class TrashContenView: UIView {
collectionView.backgroundColor = UIColor.colorWithHex(hexStr: "#F2F6FC") collectionView.backgroundColor = UIColor.colorWithHex(hexStr: "#F2F6FC")
collectionView.dataSource = self collectionView.dataSource = self
collectionView.register(UINib(nibName: "TrashContenAssetCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenAssetCell") collectionView.register(UINib(nibName: "TrashContenAssetCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenAssetCell")
// collectionView.register(UINib(nibName: "TrashContenTitleCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenTitleCell")
addSubview(collectionView) addSubview(collectionView)
...@@ -134,14 +128,9 @@ class TrashContenView: UIView { ...@@ -134,14 +128,9 @@ class TrashContenView: UIView {
lineThree.backgroundColor = UIColor.colorWithHex(hexStr: "#E5E5E5") lineThree.backgroundColor = UIColor.colorWithHex(hexStr: "#E5E5E5")
topView.addSubview(lineThree) topView.addSubview(lineThree)
lineFour = UIView()
lineFour.backgroundColor = UIColor.colorWithHex(hexStr: "#E5E5E5")
topView.addSubview(lineFour)
lineOne.frame = CGRect(x: 16, y: 62, width: lineW, height: 6) lineOne.frame = CGRect(x: 16, y: 62, width: lineW, height: 6)
lineTwo.frame = CGRect(x: 10+lineOne.rightX, y: 62, width: lineW, height: 6) lineTwo.frame = CGRect(x: 10+lineOne.rightX, y: 62, width: lineW, height: 6)
lineThree.frame = CGRect(x: 10+lineTwo.rightX, y: 62, width: lineW, height: 6) lineThree.frame = CGRect(x: 10+lineTwo.rightX, y: 62, width: lineW, height: 6)
lineFour.frame = CGRect(x: 10+lineThree.rightX, y: 62, width: lineW, height: 6)
scrollLine = UIView() scrollLine = UIView()
...@@ -218,23 +207,6 @@ class TrashContenView: UIView { ...@@ -218,23 +207,6 @@ class TrashContenView: UIView {
}else{ }else{
weakSelf.scrollLine.frame = weakSelf.lineThree.frame weakSelf.scrollLine.frame = weakSelf.lineThree.frame
} }
case .chat:
if page == 4{
if offset < ScreenW * 3{
UIView.animate(withDuration: 0.2) {
weakSelf.scrollLine.frame = weakSelf.lineThree.frame
}
}else{
UIView.animate(withDuration: 0.2) {
weakSelf.scrollLine.frame = weakSelf.lineFour.frame
}
}
}else{
weakSelf.scrollLine.frame = weakSelf.lineFour.frame
}
} }
} }
} }
...@@ -245,8 +217,6 @@ class TrashContenView: UIView { ...@@ -245,8 +217,6 @@ class TrashContenView: UIView {
lineOne.cornerCut(radius: 2, corner: .allCorners) lineOne.cornerCut(radius: 2, corner: .allCorners)
lineTwo.cornerCut(radius: 2, corner: .allCorners) lineTwo.cornerCut(radius: 2, corner: .allCorners)
lineThree.cornerCut(radius: 2, corner: .allCorners) lineThree.cornerCut(radius: 2, corner: .allCorners)
lineFour.cornerCut(radius: 2, corner: .allCorners)
// collectionView.frame = self.bounds
} }
var trashType:TrashTypeEnum = .video{ var trashType:TrashTypeEnum = .video{
...@@ -258,8 +228,6 @@ class TrashContenView: UIView { ...@@ -258,8 +228,6 @@ class TrashContenView: UIView {
scrollLine.frame = lineTwo.frame scrollLine.frame = lineTwo.frame
case .shot: case .shot:
scrollLine.frame = lineThree.frame scrollLine.frame = lineThree.frame
case .chat:
scrollLine.frame = lineFour.frame
} }
getData() getData()
} }
......
...@@ -103,8 +103,6 @@ class TrashDefaultView: UIView { ...@@ -103,8 +103,6 @@ class TrashDefaultView: UIView {
case .other,.shot: case .other,.shot:
jumpToPhotosDetailPage(type: type) jumpToPhotosDetailPage(type: type)
break break
case .chat:
break
} }
} }
} }
...@@ -113,14 +111,6 @@ class TrashDefaultView: UIView { ...@@ -113,14 +111,6 @@ class TrashDefaultView: UIView {
self.responderViewController()?.dismiss(animated: true, completion: { self.responderViewController()?.dismiss(animated: true, completion: {
NotificationCenter.default.post(name: TrashDefaultView.jumpToPhotosDetailPageName, object: nil,userInfo: ["type":self.mediaType?.rawValue ?? ""]) NotificationCenter.default.post(name: TrashDefaultView.jumpToPhotosDetailPageName, object: nil,userInfo: ["type":self.mediaType?.rawValue ?? ""])
}) })
// PhotoDataManager.manager.loadFromFileSystem { model in
// let data = type == .other ? model.otherModelArray[4] : model.otherModelArray[2]
// let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(model: data)
// vc.mediaType = type == .other ? .Other : PhotsFileType.screenshots
// vc.dealData()
// self.responderViewController()?.navigationController?.pushViewController(vc, animated: true)
// }
} }
func jumpToVideoDetailPage(type: TrashTypeEnum){ func jumpToVideoDetailPage(type: TrashTypeEnum){
self.responderViewController()?.dismiss(animated: true, completion: { self.responderViewController()?.dismiss(animated: true, completion: {
......
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