Commit b2337b07 authored by CZ1004's avatar CZ1004

【优化】选择框时间选择记住时间

parent 00999a0c
......@@ -370,8 +370,6 @@ class CompressCompletedViewController : BaseViewController{
// 移除VC中的数据
let compressVC = self.navigationController?.viewControllers.first(where: { $0 is CompressController }) as! CompressController as CompressController
compressVC.resourceData.removeAll { $0.localIdentifier == flag }
// 移除单利中的数据
Singleton.shared.resourceModel.removeAll{ $0.localIdentifier == flag }
}
}
......
......@@ -117,23 +117,15 @@ class CompressController : BaseViewController {
}
self.resourceData.removeAll()
let datas = Singleton.shared.resourceModel
if datas.count > 0 {
// 这里需要重新排序下
self.resourceData = datas
self.sortByType(sortType: self.currentSort)
}else{
PMLoadingHUD.share.show("Loading...", "Please wait on the screen. This might take several minutes.")
PMLoadingHUD.share.showLoding()
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return}
self.resourceData = models
Singleton.shared.resourceModel = self.resourceData
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
PMLoadingHUD.share.disMiss()
}
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
......@@ -231,10 +223,20 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CompressCustomHeaderView", for: indexPath) as! CompressCustomHeaderView
header.sortViewSubmitCallBack = { [weak self] fileterModel in
header.sortViewSubmitCallBack = { [weak self] filterModel in
guard let self else {return}
// 重新获取数据,过滤数据
self.currentSort = filterModel.sortType
PMLoadingHUD.share.showLoding()
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return}
self.currentSort = fileterModel.sortType
self.sortByType(sortType: self.currentSort)
// 过滤数据
let tempData = self.filterDataByDate(orgModels: models , startDate: filterModel.startDate, endDate: filterModel.endDate)
self.resourceData = tempData
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
PMLoadingHUD.share.disMiss()
}
}
}
header.changeView.callBack = {[weak self] flag in
guard let self else {return}
......@@ -247,7 +249,7 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
if self.currentResourceType == .compressPhoto {
self.getViewData()
}else{
PMLoadingHUD.share.show("Loading...", "Please wait on the screen. This might take several minutes.")
PMLoadingHUD.share.showLoding()
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: flag) { [weak self] models in
guard let self else {return}
self.resourceData = models
......@@ -271,6 +273,17 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
}
}
private func filterDataByDate(orgModels : [AssetModel], startDate:Date? ,endDate : Date?)->[AssetModel]{
var array = orgModels
if startDate != nil {
array = array.filter({$0.createDate >= startDate!})
}
if endDate != nil {
array = array.filter({$0.createDate <= endDate!})
}
return array
}
func sortByType(sortType:ResouceSortType){
switch sortType {
case .largest:
......
......@@ -9,6 +9,8 @@ import Foundation
class CompressCustomHeaderView: UICollectionReusableView{
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var modeData = [AssetModel]() {
......@@ -169,12 +171,15 @@ class CompressCustomHeaderView: UICollectionReusableView{
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 这里将原来的数据传递过去
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -26,8 +26,8 @@ class PhotoRemoveViewController: BaseViewController {
let formatter = DateFormatter()
lazy var navView : PhotoRemoveNavView = {
let view = PhotoRemoveNavView()
lazy var navView : PhotoVideoDetailNavView = {
let view = PhotoVideoDetailNavView()
return view
}()
......@@ -83,7 +83,7 @@ class PhotoRemoveViewController: BaseViewController {
formatter.dateStyle = .medium
formatter.timeStyle = .none
if let type = self.mediaType {
self.navView.mediaType = type
self.navView.showType = type == .video ? .dateAndSizeNav : .dateTimeNav
}
self.view.addSubview(self.navView)
self.navView.snp.makeConstraints { make in
......
......@@ -9,6 +9,8 @@ import Foundation
class DateSelectButtonView : UIView {
var closeCallBack : ()->Void = {}
var type : PikerDateType?
lazy var dateButton : UIButton = {
......@@ -54,6 +56,7 @@ class DateSelectButtonView : UIView {
@objc func closeButtonAction(){
reSetButtonTitle()
self.closeCallBack()
}
func reSetButtonTitle() {
......
......@@ -497,6 +497,8 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
class HomeInfoTitleView:UIView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
var type : PhotsFileType?
......@@ -610,12 +612,13 @@ class HomeInfoTitleView:UIView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -9,6 +9,8 @@ import Foundation
class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = {
......@@ -86,12 +88,13 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -8,6 +8,8 @@
import Foundation
class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
var filterBoxModel : ResourceFilterBoxModel?
var sortViewSubmitCallBack : (ResourceFilterBoxModel)->Void = {model in}
lazy var modelTitlelabel :UILabel = {
......@@ -99,12 +101,13 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
@objc func filterButtonAction(){
if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds,startDate: self.filterBoxModel?.startDate,endDate: self.filterBoxModel?.endDate,sortType: self.filterBoxModel?.sortType)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView)
filterView.submitCallBack = {model in
self.filterBoxModel = model
DispatchQueue.main.async {
self.filterButton.setTitle(model.sortType.rawValue, for: .normal)
}
......
......@@ -111,10 +111,6 @@ class PhotoDataManager {
let dataUpdated = Notification.Name("DataUpdatedNotification")
NotificationCenter.default.post(name: dataUpdated, object: nil, userInfo: nil)
})
// 将单利中的数据也删除
for item in data {
Singleton.shared.resourceModel.removeAll{ $0.localIdentifier == item.localIdentifier }
}
}
// 从文件读取
......
......@@ -8,7 +8,12 @@
import UIKit
import SnapKit
class PhotoRemoveNavView: UIView {
enum PhotoVideoDetailNavType {
case dateTimeNav
case dateAndSizeNav
}
class PhotoVideoDetailNavView: UIView {
public var backButton:UIButton!
......@@ -22,9 +27,9 @@ class PhotoRemoveNavView: UIView {
var reSetCallBack:()->Void = {}
public var mediaType : TrashTypeEnum = .shot {
public var showType : PhotoVideoDetailNavType = .dateTimeNav {
didSet{
if mediaType == .video {
if showType == .dateAndSizeNav {
self.sizeLbel.isHidden = false
self.topConstraint?.update(offset: 22 + statusBarHeight)
}else{
......
......@@ -35,7 +35,7 @@ class ResourceFilterBoxView : UIView {
var startDate : Date?
var endDate : Date?
var currentIndex: Int = 0
var currentSortType: ResouceSortType = .largest
let tableData: [String] = ["The largest", "The smallest", "The latest", "The oldest"]
var callBack : callBack<Any> = {sortType in}
......@@ -112,12 +112,75 @@ class ResourceFilterBoxView : UIView {
return view
}()
override init(frame: CGRect) {
init(frame: CGRect,startDate : Date?, endDate :Date?,sortType: ResouceSortType?) {
super.init(frame: frame)
self.startDate = startDate
self.endDate = endDate
if let sortType = sortType {
self.currentSortType = sortType
}
addViews()
setUpUI()
self.setDefaultDataInPage()
}
private func setDefaultDataInPage(){
// 设置按钮
resetByType(date: self.startDate, type: PikerDateType.start)
resetByType(date: self.endDate, type: PikerDateType.end)
// 设置选择框
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
/// 设置当前年月
/// - Parameters:
/// - date: 时间
/// - type: 类型
private func resetByType(date:Date?,type:PikerDateType){
if let date = date {
let timeNumber = getYearAndMonthFromDate(currentDate: date)
if let year = timeNumber.0{
if let month = timeNumber.1 {
self.resetDateStringFromYearAndMonth(year: year, month: month, type: type)
}
}
}
}
/// 通过时间获取年月
/// - Parameter currentDate: 当前时间
/// - Returns: 年和月
private func getYearAndMonthFromDate(currentDate : Date)->(Int?,Int?){
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month], from: currentDate)
return (components.year,components.month)
}
/// 设置按钮显示
/// - Parameters:
/// - year: 年
/// - month: 月
/// - type: 按钮类型
func resetDateStringFromYearAndMonth(year: Int, month: Int ,type: PikerDateType){
DispatchQueue.main.async {
if type == .start {
self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.startDateButton.closeButton.isHidden = false
self.startDate = self.dateFrom(year: year, month: month)
}else {
self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.endDateButton.closeButton.isHidden = false
self.endDate = self.lastDayOfMonth(year: year, month: month)
}
}
}
func getMonthEn(month: Int) -> String {
// 检查输入是否在有效范围内(1-12)
guard (1...12).contains(month) else {
......@@ -149,6 +212,13 @@ class ResourceFilterBoxView : UIView {
self.selectedView.addSubview(self.tableView)
self.selectedView.addSubview(self.applyButton)
self.startDateButton.closeCallBack = {
self.startDate = nil
}
self.endDateButton.closeCallBack = {
self.endDate = nil
}
self.startDateButton.reSetButtonTitle()
self.endDateButton.reSetButtonTitle()
......@@ -219,27 +289,10 @@ class ResourceFilterBoxView : UIView {
self.removeFromSuperview()
cWindow?.hideBlur()
self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: getSortTypeByTag(tag:self.currentIndex)))
self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: self.currentSortType))
// 开始排序
}
func getSortTypeByTag(tag : Int) -> ResouceSortType{
var tempType : ResouceSortType = .largest
switch self.currentIndex {
case 0:
tempType = .largest
case 1:
tempType = .smallest
case 2:
tempType = .latest
case 3:
tempType = .oldest
default:
break
}
return tempType
}
func dateFrom(year: Int, month: Int) -> Date? {
var components = DateComponents()
components.year = year
......@@ -320,17 +373,7 @@ class ResourceFilterBoxView : UIView {
self.dismissDatePicker()
}
self.datePicker?.onConfirm = {type,year,month in
DispatchQueue.main.async {
if type == .start {
self.startDateButton.dateButton.setTitle("From \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.startDateButton.closeButton.isHidden = false
self.startDate = self.dateFrom(year: year, month: month)
}else {
self.endDateButton.dateButton.setTitle("To \(self.getMonthEn(month: month)) \(year)", for: .normal)
self.endDateButton.closeButton.isHidden = false
self.endDate = self.lastDayOfMonth(year: year, month: month)
}
}
self.resetDateStringFromYearAndMonth(year: year, month: month, type: type)
self.dismissDatePicker()
}
}
......@@ -359,10 +402,10 @@ extension ResourceFilterBoxView : UITableViewDataSource,UITableViewDelegate {
cell.selectButton.setTitle(tableData[indexPath.row], for: .normal)
cell.callBack = { [weak self] cellTag in
guard let self = self else { return }
self.currentIndex = cellTag as! Int
self.currentSortType = getSortTypeByTag(index: cellTag as! Int)
self.tableView.reloadData()
}
if indexPath.row == currentIndex {
if getSortTypeByTag(index: indexPath.row) == currentSortType {
cell.selectButton.layer.borderWidth = 1.0
cell.selectButton.setTitleColor(UIColor(red: 0, green: 0.51, blue: 1, alpha: 1), for: .normal)
} else {
......@@ -375,4 +418,20 @@ extension ResourceFilterBoxView : UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 56
}
func getSortTypeByTag(index : Int) -> ResouceSortType {
if index == 0 {
return ResouceSortType.largest
}
if index == 1 {
return ResouceSortType.smallest
}
if index == 2 {
return ResouceSortType.latest
}
if index == 3 {
return ResouceSortType.oldest
}
return ResouceSortType.largest
}
}
......@@ -28,6 +28,17 @@ class PMLoadingHUD{
}
}
func showLoding(_ title:String = "Loding...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){
disMiss()
DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play()
}
}
func disMiss(){
DispatchQueue.main.async {
self.loadingView.animationView.stop()
......
......@@ -29,6 +29,12 @@ class PMShowImgVideoController: BaseViewController {
var imageVideoPath:[String] = []
lazy var navView : PhotoVideoDetailNavView = {
let view = PhotoVideoDetailNavView()
return view
}()
// 首页过来的数据
var homeDataSource : [ImageSeletedCollectionItem]? {
didSet{
......@@ -42,7 +48,11 @@ class PMShowImgVideoController: BaseViewController {
}
}
var currentIdx = 0
var currentIdx = 0 {
didSet {
changeNavInfo()
}
}
var selectSet = NSMutableSet()
var backOrgPageCallBack : (IndexPath?,[ImageSeletedCollectionItem]?)->Void = {index,data in}
......@@ -53,6 +63,13 @@ class PMShowImgVideoController: BaseViewController {
super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
self.view.addSubview(self.navView)
self.navView.showType = .dateAndSizeNav
self.navView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(statusBarHeight + 44)
}
}
override func viewWillAppear(_ animated: Bool) {
......@@ -69,6 +86,17 @@ class PMShowImgVideoController: BaseViewController {
}
self.view.layoutIfNeeded()
self.MaxCollection.scrollToItem(at: IndexPath(row: currentIdx, section: 0), at: .centeredHorizontally, animated: false)
changeNavInfo()
}
private func changeNavInfo(){
DispatchQueue.main.async {
if let model = self.homeDataSource?[self.currentIdx].id {
self.navView.sizeLbel.text = formatFileSize(model.assetSize)
self.navView.titleLbel.text = self.changeDateToString(model: model)
}
}
}
......@@ -84,6 +112,13 @@ class PMShowImgVideoController: BaseViewController {
self.backOrgPageCallBack(self.oldPageIndexPath,self.homeDataSource)
}
private func changeDateToString(model : AssetModel) -> String{
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
return formatter.string(from: model.createDate)
}
private lazy var MaxCollection: UICollectionView = {
let flowlayout = UICollectionViewFlowLayout()
flowlayout.sectionInset = UIEdgeInsets()
......@@ -129,11 +164,20 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
let offsetx = MaxCollection.contentOffset.x
let width = collectView.width
let current:Int = Int(offsetx / width)
// currentIdx = current
self.currentIdx = current
bottItems.scrollToItem(at: IndexPath(row: current, section: 0), at: .left, animated: true)
}
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
guard let collectView = scrollView as? UICollectionView else { return }
if collectView == MaxCollection {
let offsetx = MaxCollection.contentOffset.x
let width = collectView.width
self.currentIdx = Int(offsetx / width)
}
}
private func setMaxCollection(collectionView:UICollectionView) -> Void {
if collectionView == bottItems {
......@@ -142,15 +186,13 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
UIView.animate(withDuration: 0.5) {
collectionView.contentOffset = CGPointMake( idx * (68 + 10) , 0)
}
self.currentIdx = Int(idx)
MaxCollection.scrollToItem(at: IndexPath(row: Int(idx), section: 0), at: .centeredHorizontally, animated: true)
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
guard let collectView = scrollView as? UICollectionView else { return }
// if collectView == MaxCollection {
// bottItems.reloadData()
// }
self.setMaxCollection(collectionView: collectView)
}
......@@ -208,7 +250,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
showName.loadPhotoOrVideo { durs, icon in
cell.icon = icon
}
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.isCurrent = selectSet.contains(indexPath.row)
cell.callblock = {[weak self] in
guard let self = self else { return }
......@@ -263,7 +307,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PMShowImgCellID, for: indexPath) as! PMShowImgCell
cell.icon = self.homeDataSource![indexPath.row].image ?? UIImage()
cell.isCurrent = selectSet.contains(indexPath.row)
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.callblock = {[weak self] in
guard let self = self else { return }
self.vibrate()
......@@ -307,7 +353,9 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
// 表示这个是视频
cell.type = 1
cell.isCurrent = selectSet.contains(indexPath.row)
cell.bestResultButton.isHidden = indexPath.row != 0
if let data = self.homeDataSource {
cell.bestResultButton.isHidden = indexPath.row != 0 || data.count <= 1
}
cell.callblock = {[weak self] in
guard let self = self else { return }
self.vibrate()
......
......@@ -15,8 +15,6 @@ class Singleton {
// 私有化初始化方法,防止外部创建新实例
private init() {}
var resourceModel : [AssetModel] = []
var maxDeleteCount : Int = 25
var trashData : [TrashTypeEnum : [AssetModel]] = [:]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment