Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PhoneManager
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Yang
PhoneManager
Commits
f935e637
Commit
f935e637
authored
May 16, 2025
by
CZ1004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【优化】垃圾桶逻辑优化
parent
d9f0c377
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
262 additions
and
189 deletions
+262
-189
CompressController.swift
...r/Class/Page/Compress/Controller/CompressController.swift
+2
-2
HomePhotosDetailViewController.swift
...Page/Home/Controller/HomePhotosDetailViewController.swift
+69
-50
HomeVideoDetailController.swift
...lass/Page/Home/Controller/HomeVideoDetailController.swift
+45
-27
HomeViewController.swift
...nager/Class/Page/Home/Controller/HomeViewController.swift
+2
-10
PhotoRemoveViewController.swift
...lass/Page/Home/Controller/PhotoRemoveViewController.swift
+55
-46
HomeInfoView.swift
PhoneManager/Class/Page/Home/View/HomeInfoView.swift
+39
-35
ResourceFilterBoxView.swift
...eManager/Class/Page/Home/View/ResourceFilterBoxView.swift
+3
-0
ImageSeletedCollectionCell.swift
...lass/Page/Home/View/cell/ImageSeletedCollectionCell.swift
+14
-13
KeepListManager.swift
...Manager/Class/Page/Keep/DataManager/KeepListManager.swift
+33
-0
TrashDataManager.swift
...nager/Class/Page/Trash/DataManager/TrashDataManager.swift
+0
-6
No files found.
PhoneManager/Class/Page/Compress/Controller/CompressController.swift
View file @
f935e637
...
...
@@ -132,12 +132,12 @@ class CompressController : BaseViewController {
self
.
resourceData
=
datas
.
sorted
{
$0
.
createDate
<
$1
.
createDate
}
}
}
else
{
SVProgressHUD
.
show
()
PMLoadingHUD
.
share
.
show
()
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
SVProgressHUD
.
dism
iss
()
PMLoadingHUD
.
share
.
disM
iss
()
}
}
}
...
...
PhoneManager/Class/Page/Home/Controller/HomePhotosDetailViewController.swift
View file @
f935e637
...
...
@@ -20,34 +20,10 @@ class HomePhotosDetailViewController : BaseViewController {
var
imageCache
=
NSCache
<
NSString
,
UIImage
>
()
@MainActor
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
required
init
(
model
:
HomePhotosModel
)
{
self
.
model
=
model
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
}
private
var
videoDetailNavView
:
VideoDetaiNavView
?
var
resourceData
:
[
AssetModel
]
=
[]
func
dealData
(){
var
dataArray
:
[
AssetModel
]
=
[]
for
item
in
self
.
model
.
assets
{
dataArray
=
dataArray
+
item
}
self
.
resourceData
=
self
.
filterTrashData
(
array
:
dataArray
)
self
.
selectedModel
=
self
.
filterTrashData
(
array
:
self
.
selectedModel
)
self
.
sortByType
(
sortType
:
self
.
currentSort
)
}
var
model
:
HomePhotosModel
var
datas
:
[
AssetModel
]
=
[]
// 排序
var
currentSort
:
Int
=
0
...
...
@@ -64,6 +40,8 @@ class HomePhotosDetailViewController : BaseViewController {
}
}
lazy
var
defaultImageView
:
UIImageView
=
{
let
defaultImageView
=
UIImageView
()
defaultImageView
.
image
=
UIImage
(
named
:
"img_photo__home_defpage"
)
...
...
@@ -114,15 +92,6 @@ class HomePhotosDetailViewController : BaseViewController {
}()
/// 过滤垃圾桶数据
/// - Parameter array: 当前数据
/// - Returns: 过滤后的数据
func
filterTrashData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
let
data
=
TrashDataManager
.
getCurrentMediaTypeTrashData
(
mediaType
:
self
.
mediaType
==
PhotsFileType
.
Other
?
TrashTypeEnum
.
other
:
TrashTypeEnum
.
shot
)
return
array
.
filter
({
!
data
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
}
func
setUI
(){
...
...
@@ -269,16 +238,78 @@ class HomePhotosDetailViewController : BaseViewController {
}
// MARK:系统方法
@MainActor
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
required
init
(
mediaType
:
PhotsFileType
)
{
self
.
mediaType
=
mediaType
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
// 目的是为了消除cell 的选择按钮状态
if
self
.
selectedModel
.
count
==
0
{
self
.
collectionView
.
reloadData
()
// 重新设置下数据源
self
.
getCurrentPageData
{
DispatchQueue
.
main
.
async
{
self
.
collectionView
.
reloadData
()
}
}
}
// MARK: 数据操作 - 主要方法
/// 获取当前页面数据
/// - Parameter completed: 完成回调
func
getCurrentPageData
(
completed
:
@escaping
()
->
Void
){
// FIXME: 从新获取数据
var
data
=
self
.
mediaType
==
.
Other
?
PhotoManager
.
shared
.
filterOtherModels
:
PhotoManager
.
shared
.
filterScreenShotModels
// 过滤掉垃圾桶数据
data
=
self
.
filterSigtonTrashData
(
array
:
data
)
self
.
selectedModel
=
self
.
filterSigtonTrashData
(
array
:
self
.
selectedModel
)
// 过滤掉保留列表数据
data
=
self
.
filterKeepListData
(
array
:
data
)
self
.
selectedModel
=
self
.
filterKeepListData
(
array
:
self
.
selectedModel
)
self
.
resourceData
=
data
self
.
sortByType
(
sortType
:
self
.
currentSort
)
completed
()
}
// MARK: 数据操作 - 辅助方法
/// 过滤垃圾桶数据 - 当前页面数据本身就是已经过滤了垃圾桶数据库的数据了,所以只需要过滤掉单利中的数据
/// - Parameter array: 当前数据
/// - Returns: 过滤后的数据
func
filterSigtonTrashData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
let
type
=
self
.
mediaType
==
PhotsFileType
.
Other
?
TrashTypeEnum
.
other
:
TrashTypeEnum
.
shot
// 从单利拿数据
let
data
:
[
AssetModel
]
=
Singleton
.
shared
.
trashData
[
type
]
??
[]
return
array
.
filter
({
!
data
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
}
/// 过滤保留列表数据
/// - Parameter array: 原数据
/// - Returns: 过滤后的数据
func
filterKeepListData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
let
data
=
KeepListManager
.
getAllKeepListData
()
if
data
.
count
>
0
{
return
array
.
filter
({
!
data
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
}
return
array
}
func
getImageFromCache
(
model
:
AssetModel
,
completed
:
@escaping
(
UIImage
)
->
Void
){
let
cachedImage
=
self
.
imageCache
.
object
(
forKey
:
model
.
localIdentifier
as
NSString
)
if
cachedImage
!=
nil
{
...
...
@@ -342,22 +373,10 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
// 点击之后跳转详情页面
if
self
.
mediaType
==
.
screenshots
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
shot
)
vc
.
dismissCallback
=
{
self
.
dealData
()
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
}
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
if
self
.
mediaType
==
.
Other
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
other
)
vc
.
dismissCallback
=
{
self
.
dealData
()
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
}
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
...
...
@@ -418,7 +437,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
let
header
=
collectionView
.
dequeueReusableSupplementaryView
(
ofKind
:
kind
,
withReuseIdentifier
:
"HomePhotosDetailCustomHeaderView"
,
for
:
indexPath
)
as!
HomePhotosDetailCustomHeaderView
// 记录当前的 headerView
header
.
countLabel
.
text
=
"
\(
self
.
resourceData
.
count
)
Photos"
header
.
modelTitlelabel
.
text
=
self
.
m
odel
.
folderNam
e
header
.
modelTitlelabel
.
text
=
self
.
m
ediaType
?
.
rawValu
e
currentHeaderView
=
header
header
.
sortCallback
=
{[
weak
self
]
in
...
...
PhoneManager/Class/Page/Home/Controller/HomeVideoDetailController.swift
View file @
f935e637
...
...
@@ -18,8 +18,7 @@ class HomeVideoDetailController :BaseViewController {
fatalError
(
"init(coder:) has not been implemented"
)
}
required
init
(
model
:
HomePhotosModel
)
{
self
.
model
=
model
required
init
()
{
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
}
...
...
@@ -27,18 +26,6 @@ class HomeVideoDetailController :BaseViewController {
var
resourceData
:
[
AssetModel
]
=
[]
func
dealData
(){
var
dataArray
:
[
AssetModel
]
=
[]
for
item
in
self
.
model
.
assets
{
dataArray
=
dataArray
+
item
}
self
.
resourceData
=
self
.
filterTrashData
(
array
:
dataArray
)
self
.
selectedModel
=
self
.
filterTrashData
(
array
:
self
.
selectedModel
)
self
.
sortByType
(
sortType
:
self
.
currentSort
)
}
var
model
:
HomePhotosModel
// 排序
var
currentSort
:
Int
=
0
...
...
@@ -65,7 +52,7 @@ class HomeVideoDetailController :BaseViewController {
let
layout
=
WaterfallMutiSectionFlowLayout
()
layout
.
delegate
=
self
let
sview
:
UICollectionView
=
UICollectionView
.
init
(
frame
:
CGRect
(
x
:
marginLR
,
y
:
s
elf
.
videoDetailNavView
!.
height
,
width
:
self
.
view
.
width
-
2
*
marginLR
,
height
:
self
.
view
.
height
-
self
.
videoDetailNavView
!.
height
-
102
),
collectionViewLayout
:
layout
)
let
sview
:
UICollectionView
=
UICollectionView
.
init
(
frame
:
CGRect
(
x
:
marginLR
,
y
:
s
tatusBarHeight
+
44
,
width
:
self
.
view
.
width
-
2
*
marginLR
,
height
:
self
.
view
.
height
-
(
statusBarHeight
+
44
)
-
102
),
collectionViewLayout
:
layout
)
sview
.
register
(
HomeVideoDetailCell
.
self
,
forCellWithReuseIdentifier
:
"HomeVideoDetailCell"
)
sview
.
register
(
HomeVideoDetailCustomHeaderView
.
self
,
forSupplementaryViewOfKind
:
UICollectionView
.
elementKindSectionHeader
,
withReuseIdentifier
:
"HomeVideoDetailCustomHeaderView"
)
...
...
@@ -109,15 +96,50 @@ class HomeVideoDetailController :BaseViewController {
return
label
}()
/// 过滤垃圾桶数据
// MARK: 数据操作 - 主要方法
/// 获取当前页面数据
/// - Parameter completed: 完成回调
func
getCurrentPageData
(
completed
:
@escaping
()
->
Void
){
var
data
=
PhotoManager
.
shared
.
filterVideoModels
// 过滤掉垃圾桶数据
data
=
self
.
filterSigtonTrashData
(
array
:
data
)
self
.
selectedModel
=
self
.
filterSigtonTrashData
(
array
:
self
.
selectedModel
)
// 过滤掉保留列表数据
data
=
self
.
filterKeepListData
(
array
:
data
)
self
.
selectedModel
=
self
.
filterKeepListData
(
array
:
self
.
selectedModel
)
self
.
resourceData
=
data
self
.
sortByType
(
sortType
:
self
.
currentSort
)
completed
()
}
// MARK: 数据操作 - 辅助方法
/// 过滤垃圾桶数据 - 当前页面数据本身就是已经过滤了垃圾桶数据库的数据了,所以只需要过滤掉单利中的数据
/// - Parameter array: 当前数据
/// - Returns: 过滤后的数据
func
filterTrashData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
let
data
=
TrashDataManager
.
getCurrentMediaTypeTrashData
(
mediaType
:
.
video
)
func
filterSigtonTrashData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
// 从单利拿数据
let
data
=
Singleton
.
shared
.
trashData
[
TrashTypeEnum
.
video
]
??
[]
return
array
.
filter
({
!
data
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
}
/// 过滤保留列表数据
/// - Parameter array: 原数据
/// - Returns: 过滤后的数据
func
filterKeepListData
(
array
:
[
AssetModel
])
->
[
AssetModel
]{
let
data
=
KeepListManager
.
getAllKeepListData
()
if
data
.
count
>
0
{
return
array
.
filter
({
!
data
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
}
return
array
}
func
setUI
(){
videoDetailNavView
=
VideoDetaiNavView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
self
.
view
.
width
,
height
:
statusBarHeight
+
44
))
self
.
view
.
addSubview
(
videoDetailNavView
!
)
...
...
@@ -210,9 +232,11 @@ class HomeVideoDetailController :BaseViewController {
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
// 目的是为了消除cell 的选择按钮状态
if
self
.
selectedModel
.
count
==
0
{
self
.
collectionView
.
reloadData
()
// 重新设置下数据源
self
.
getCurrentPageData
{
DispatchQueue
.
main
.
async
{
self
.
collectionView
.
reloadData
()
}
}
}
...
...
@@ -285,12 +309,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
PhotoAndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
// 点击之后跳转详情页面
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
vc
.
dismissCallback
=
{
self
.
dealData
()
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
}
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
errorHandler
:
{
DispatchQueue
.
main
.
async
{
...
...
PhoneManager/Class/Page/Home/Controller/HomeViewController.swift
View file @
f935e637
...
...
@@ -130,8 +130,7 @@ class HomeViewController:BaseViewController {
guard
let
self
else
{
return
}
if
otherItemRow
==
0
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomeVideoDetailController
=
HomeVideoDetailController
(
model
:
model
)
vc
.
dealData
()
let
vc
:
HomeVideoDetailController
=
HomeVideoDetailController
()
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
...
...
@@ -149,16 +148,9 @@ class HomeViewController:BaseViewController {
}
}
if
otherItemRow
==
2
||
otherItemRow
==
4
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomePhotosDetailViewController
=
HomePhotosDetailViewController
(
model
:
model
)
if
otherItemRow
==
2
{
vc
.
mediaType
=
.
screenshots
}
else
{
vc
.
mediaType
=
.
Other
}
vc
.
dealData
()
let
vc
=
HomePhotosDetailViewController
(
mediaType
:
otherItemRow
==
2
?
.
screenshots
:
.
Other
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
...
...
PhoneManager/Class/Page/Home/Controller/PhotoRemoveViewController.swift
View file @
f935e637
...
...
@@ -11,9 +11,6 @@ import Photos
class
PhotoRemoveViewController
:
BaseViewController
{
var
dismissCallback
:
()
->
Void
=
{}
var
mediaType
:
TrashTypeEnum
?
{
didSet
{
if
mediaType
==
.
video
{
...
...
@@ -121,24 +118,28 @@ class PhotoRemoveViewController: BaseViewController {
}
}
self
.
navView
.
reSetCallBack
=
{
if
self
.
currentIndex
>
0
{
self
.
currentIndex
=
self
.
currentIndex
-
1
// 拿到单利中最后一个
if
let
model
=
self
.
getSigtonCurrentMediaTrashLastData
(){
// 判断当前数组中有没有这个数据(有的话表示是在当前页面撤销)
if
self
.
dataModel
.
map
({
$0
.
localIdentifier
})
.
contains
(
model
.
localIdentifier
){
if
self
.
currentIndex
>
0
{
self
.
currentIndex
=
self
.
currentIndex
-
1
}
}
else
{
// 没有这个数据表示从外部跳转进这个页面,当前位置插入一个数据
self
.
dataModel
.
insert
(
model
,
at
:
self
.
currentIndex
)
}
// 重新设置下图片
self
.
updateViewContents
()
// 视图层级处理
self
.
bringCurrentViewToFront
()
// 移除当前数据
self
.
removeCurrentMediaTypeTrashLastData
()
// 移除完成后 重新设置下按钮状态
self
.
showCurrentPageUIWhenTashDataChanged
()
}
// 移除单利中当前类型数组的最后一个数据
self
.
removeCurrentMediaTypeTrashLastData
()
// 移除完成后 重新设置下按钮状态
self
.
showCurrentPageUIWhenTashDataChanged
()
}
showCurrentPageUIWhenTashDataChanged
()
...
...
@@ -146,6 +147,20 @@ class PhotoRemoveViewController: BaseViewController {
self
.
addListener
()
}
// 拿到当前类型垃圾桶数据的最后一个
func
getSigtonCurrentMediaTrashLastData
()
->
AssetModel
?
{
var
model
:
AssetModel
?
if
let
type
=
self
.
mediaType
{
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
let
tempArray
=
dataSg
if
tempArray
.
count
>
0
{
model
=
tempArray
[
tempArray
.
count
-
1
]
}
}
}
return
model
}
// 跳转垃圾桶第几个page
func
getJumpPageIndex
()
->
Int
{
if
self
.
mediaType
==
.
video
{
...
...
@@ -166,25 +181,16 @@ class PhotoRemoveViewController: BaseViewController {
let
type
=
notification
.
userInfo
?[
"type"
]
as?
String
else
{
return
}
if
let
targetVC
=
self
.
navigationController
?
.
viewControllers
.
first
(
where
:
{
$0
is
HomeViewController
})
as?
HomeViewController
{
self
.
navigationController
?
.
popToViewController
(
targetVC
,
animated
:
false
)
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
()
targetVC
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
let
vc
:
HomePhotosDetailViewController
=
HomePhotosDetailViewController
(
mediaType
:
type
==
"Other"
?
PhotsFileType
.
Other
:
PhotsFileType
.
screenshots
)
targetVC
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
NotificationCenter
.
default
.
addObserver
(
forName
:
TrashDefaultView
.
jumpToVideosDetailPageName
,
object
:
nil
,
queue
:
.
main
)
{
[
weak
self
]
notification
in
guard
let
self
else
{
return
}
if
let
targetVC
=
self
.
navigationController
?
.
viewControllers
.
first
(
where
:
{
$0
is
HomeViewController
})
as?
HomeViewController
{
self
.
navigationController
?
.
popToViewController
(
targetVC
,
animated
:
false
)
PhotoDataManager
.
manager
.
loadFromFileSystem
{
model
in
let
data
=
model
.
otherModelArray
[
0
]
let
vc
:
HomeVideoDetailController
=
HomeVideoDetailController
(
model
:
data
)
vc
.
dealData
()
targetVC
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
let
vc
:
HomeVideoDetailController
=
HomeVideoDetailController
()
targetVC
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
}
...
...
@@ -194,6 +200,12 @@ class PhotoRemoveViewController: BaseViewController {
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
var
tempArray
=
dataSg
if
tempArray
.
count
>
0
{
// 获取最后一个
let
identifier
=
tempArray
[
tempArray
.
count
-
1
]
.
localIdentifier
let
success
=
TrashDatabase
.
shared
.
delete
(
localIdentifier
:
identifier
)
if
!
success
{
Print
(
"删除失败"
)
}
tempArray
.
removeLast
()
}
Singleton
.
shared
.
trashData
[
type
]
=
tempArray
...
...
@@ -206,7 +218,6 @@ class PhotoRemoveViewController: BaseViewController {
super
.
viewDidDisappear
(
animated
)
// 视图消失的时候存到数据库
saveDataToKeepListDB
()
self
.
dismissCallback
()
}
...
...
@@ -252,9 +263,7 @@ class PhotoRemoveViewController: BaseViewController {
DispatchQueue
.
main
.
async
{
if
let
type
=
self
.
mediaType
{
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
assetModel
=
assetModel
+
dataSg
// 如果单利中有当前数据,显示撤回按钮
if
dataSg
.
count
>
0
{
self
.
navView
.
resetButton
.
isHidden
=
false
}
else
{
...
...
@@ -265,6 +274,8 @@ class PhotoRemoveViewController: BaseViewController {
self
.
navView
.
resetButton
.
isHidden
=
true
}
}
if
assetModel
.
count
>
0
{
// 显示垃圾桶
self
.
trashSubView
.
resourceCountlabel
.
text
=
String
(
assetModel
.
count
)
...
...
@@ -294,16 +305,22 @@ class PhotoRemoveViewController: BaseViewController {
}
// 存垃圾桶数据到单利
func
saveDataToSigtonTrash
(){
func
saveDataTo
DBAnd
SigtonTrash
(){
// 拿到单利数据
let
model
=
self
.
dataModel
[
currentIndex
]
if
let
type
=
self
.
mediaType
{
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
var
tempArray
=
dataSg
tempArray
.
append
(
self
.
dataModel
[
currentIndex
]
)
tempArray
.
append
(
model
)
Singleton
.
shared
.
trashData
[
type
]
=
tempArray
}
else
{
Singleton
.
shared
.
trashData
[
type
]
=
[
self
.
dataModel
[
currentIndex
]]
}
// 保存当前数据到数据库
let
success
=
TrashDatabase
.
shared
.
insert
(
localIdentifier
:
model
.
localIdentifier
,
assetSize
:
model
.
assetSize
,
createDate
:
model
.
createDate
,
mediaType
:
type
.
dbType
)
if
!
success
{
Print
(
"保存数据失败"
)
}
}
self
.
showCurrentPageUIWhenTashDataChanged
()
}
...
...
@@ -322,17 +339,9 @@ class PhotoRemoveViewController: BaseViewController {
}
}
func
saveDataToTrashDB
(){
func
clearSigtonTrashData
(){
if
let
type
=
self
.
mediaType
{
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
for
item
in
dataSg
{
let
success
=
TrashDatabase
.
shared
.
insert
(
localIdentifier
:
item
.
localIdentifier
,
assetSize
:
item
.
assetSize
,
createDate
:
item
.
createDate
,
mediaType
:
type
.
dbType
)
if
success
{
Print
(
"保留单利数据到数据库垃圾桶成功"
)
}
}
Singleton
.
shared
.
trashData
[
type
]
=
[]
}
Singleton
.
shared
.
trashData
[
type
]
=
[]
}
showCurrentPageUIWhenTashDataChanged
()
}
...
...
@@ -387,14 +396,14 @@ class PhotoRemoveViewController: BaseViewController {
if
abs
(
actualTranslation
.
x
)
>
actionMargin
||
abs
(
velocity
.
x
)
>
500
{
removeCurrentView
(
translation
:
actualTranslation
,
velocity
:
velocity
)
if
actualTranslation
.
x
>
0
{
//
保存垃圾桶数据到数据库
saveDataToTrashDB
()
//
清除单利数据
clearSigtonTrashData
()
// 保留操作
saveDataToSigtonKeepList
()
}
if
actualTranslation
.
x
<
0
{
// 删除操作,先存到单利
saveDataToSigtonTrash
()
saveDataTo
DBAnd
SigtonTrash
()
}
}
else
{
resetViewPosition
(
activeView
)
...
...
PhoneManager/Class/Page/Home/View/HomeInfoView.swift
View file @
f935e637
...
...
@@ -43,7 +43,6 @@ class HomeInfoView :UIView {
let
sview
:
HomeInfoTitleView
=
HomeInfoTitleView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
width
,
height
:
84
))
sview
.
titleLabel
.
text
=
self
.
titleText
sview
.
filterButton
.
isHidden
=
self
.
type
!=
.
similar
&&
self
.
type
!=
.
SimilarVideos
tableView
.
addSubview
(
sview
)
return
sview
}()
...
...
@@ -114,39 +113,35 @@ class HomeInfoView :UIView {
self
.
headerView
.
sortViewSubmitCallBack
=
{[
weak
self
]
filterModel
in
guard
let
self
else
{
return
}
// 从源头获取相似数据
PhotoDataManager
.
manager
.
loadFromFileSystem
(
resultModel
:
{[
weak
self
]
model
in
guard
let
self
else
{
return
}
var
dataS
:
[[
AssetModel
]]
=
[]
if
self
.
type
==
.
SimilarVideos
{
dataS
=
model
.
otherModelArray
[
3
]
.
assets
}
else
{
dataS
=
model
.
titleModelArray
[
1
]
.
assets
}
let
tempData
=
self
.
filterDataByDate
(
orgModels
:
dataS
,
startDate
:
filterModel
.
startDate
,
endDate
:
filterModel
.
endDate
)
// 重新更新下数据源
self
.
ids
=
self
.
sortData
(
source
:
tempData
,
type
:
filterModel
.
sortType
)
var
tempModels
:
[
HomeInfoTableItem
]
=
[]
for
array
in
self
.
ids
??
[]
{
var
smodels
:[
ImageSeletedCollectionItem
]
=
[]
for
id
in
array
{
let
smodel
=
ImageSeletedCollectionItem
()
smodel
.
id
=
id
smodel
.
isSeleted
=
false
smodels
.
append
(
smodel
)
}
let
smodel
=
HomeInfoTableItem
()
smodel
.
type
=
type
smodel
.
smodels
=
smodels
smodel
.
titleText
=
titleText
tempModels
.
append
(
smodel
)
}
models
=
tempModels
DispatchQueue
.
main
.
async
{
// FIXME: 闪屏
self
.
tableView
.
reloadSections
(
IndexSet
(
integer
:
0
),
with
:
.
automatic
)
var
dataS
:
[[
AssetModel
]]
=
[]
if
self
.
type
==
.
SimilarVideos
{
dataS
=
PhotoManager
.
shared
.
filterSimilarVideoModels
}
else
{
dataS
=
PhotoManager
.
shared
.
filterSimilarModels
}
let
tempData
=
self
.
filterDataByDate
(
orgModels
:
dataS
,
startDate
:
filterModel
.
startDate
,
endDate
:
filterModel
.
endDate
)
// 重新更新下数据源
self
.
ids
=
self
.
sortData
(
source
:
tempData
,
type
:
filterModel
.
sortType
)
var
tempModels
:
[
HomeInfoTableItem
]
=
[]
for
array
in
self
.
ids
??
[]
{
var
smodels
:[
ImageSeletedCollectionItem
]
=
[]
for
id
in
array
{
let
smodel
=
ImageSeletedCollectionItem
()
smodel
.
id
=
id
smodel
.
isSeleted
=
false
smodels
.
append
(
smodel
)
}
})
let
smodel
=
HomeInfoTableItem
()
smodel
.
type
=
type
smodel
.
smodels
=
smodels
smodel
.
titleText
=
titleText
tempModels
.
append
(
smodel
)
}
models
=
tempModels
DispatchQueue
.
main
.
async
{
self
.
setTitleView
()
self
.
tableView
.
reloadSections
(
IndexSet
(
integer
:
0
),
with
:
.
automatic
)
}
}
}
...
...
@@ -372,7 +367,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func
tableView
(
_
tableView
:
UITableView
,
numberOfRowsInSection
section
:
Int
)
->
Int
{
return
ids
?
.
count
??
0
return
models
.
count
}
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
...
...
@@ -410,6 +405,12 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func
tableView
(
_
tableView
:
UITableView
,
viewForHeaderInSection
section
:
Int
)
->
UIView
?
{
return
UIView
()
}
func
tableView
(
_
tableView
:
UITableView
,
willDisplayHeaderView
view
:
UIView
,
forSection
section
:
Int
)
{
tableView
.
addSubview
(
self
.
headerView
)
tableView
.
bringSubviewToFront
(
self
.
headerView
)
}
func
filterDataByDate
(
orgModels
:
[[
AssetModel
]],
startDate
:
Date
?
,
endDate
:
Date
?)
->
[[
AssetModel
]]{
...
...
@@ -423,7 +424,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
array
=
array
.
filter
({
$0
.
createDate
<
endDate
!
})
}
if
array
.
count
>
2
{
if
array
.
count
>
=
2
{
tempArray
.
append
(
item
)
}
}
...
...
@@ -573,6 +574,9 @@ class HomeInfoTitleView:UIView {
@objc
func
filterButtonAction
(){
if
let
cWindow
=
cWindow
{
let
filterView
:
ResourceFilterBoxView
=
ResourceFilterBoxView
.
init
(
frame
:
cWindow
.
bounds
)
// 添加毛玻璃效果
cWindow
.
showBlur
()
cWindow
.
addSubview
(
filterView
)
filterView
.
submitCallBack
=
{
model
in
DispatchQueue
.
main
.
async
{
...
...
PhoneManager/Class/Page/Home/View/ResourceFilterBoxView.swift
View file @
f935e637
...
...
@@ -50,6 +50,7 @@ class ResourceFilterBoxView : UIView {
lazy
var
backView
:
UIView
=
{
let
view
=
UIView
()
view
.
backgroundColor
=
UIColor
(
red
:
0.07
,
green
:
0.07
,
blue
:
0.07
,
alpha
:
0.8000
)
view
.
backgroundColor
=
.
clear
view
.
isUserInteractionEnabled
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
backViewClick
)
)
...
...
@@ -211,6 +212,7 @@ class ResourceFilterBoxView : UIView {
// 移除自身
self
.
dismissDatePicker
()
self
.
removeFromSuperview
()
cWindow
?
.
hideBlur
()
self
.
submitCallBack
(
ResourceFilterBoxModel
.
init
(
startDate
:
self
.
startDate
,
endDate
:
self
.
endDate
,
sortType
:
getSortTypeByTag
(
tag
:
self
.
currentIndex
)))
// 开始排序
...
...
@@ -274,6 +276,7 @@ class ResourceFilterBoxView : UIView {
// 移除自身
self
.
dismissDatePicker
()
self
.
removeFromSuperview
()
cWindow
?
.
hideBlur
()
}
...
...
PhoneManager/Class/Page/Home/View/cell/ImageSeletedCollectionCell.swift
View file @
f935e637
...
...
@@ -25,11 +25,11 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
lazy
var
allKeepButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
backgroundColor
=
UIColor
(
red
:
0.33
,
green
:
0.77
,
blue
:
0.49
,
alpha
:
1
)
button
.
layer
.
cornerRadius
=
7
button
.
layer
.
cornerRadius
=
12
button
.
clipsToBounds
=
true
button
.
setTitle
(
"All retained"
,
for
:
.
normal
)
button
.
setTitleColor
(
.
white
,
for
:
.
normal
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
9
,
weight
:
.
semibold
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
semibold
)
button
.
addTarget
(
self
,
action
:
#selector(
allKeepButtonAction
)
,
for
:
.
touchUpInside
)
button
.
isHidden
=
true
return
button
...
...
@@ -37,14 +37,14 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
lazy
var
bestResultButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
layer
.
cornerRadius
=
8
button
.
layer
.
cornerRadius
=
10
button
.
clipsToBounds
=
true
button
.
backgroundColor
=
UIColor
(
red
:
1
,
green
:
0.65
,
blue
:
0
,
alpha
:
1
)
button
.
setTitle
(
"Best"
,
for
:
.
normal
)
button
.
setImage
(
UIImage
(
named
:
"Frame"
),
for
:
.
normal
)
button
.
setTitleColor
(
.
white
,
for
:
.
normal
)
button
.
isHidden
=
true
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
1
0
,
weight
:
.
semibold
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
1
2
,
weight
:
.
semibold
)
return
button
}()
...
...
@@ -174,15 +174,16 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
self
.
addSubview
(
self
.
bestResultButton
)
self
.
allKeepButton
.
snp
.
makeConstraints
{
make
in
make
.
top
.
left
.
equalToSuperview
()
make
.
width
.
equalTo
(
58
)
make
.
height
.
equalTo
(
1
4
)
make
.
top
.
left
.
equalToSuperview
()
.
offset
(
4
)
make
.
width
.
equalTo
(
80
)
make
.
height
.
equalTo
(
2
4
)
}
self
.
bestResultButton
.
snp
.
makeConstraints
{
make
in
make
.
left
.
bottom
.
equalToSuperview
()
make
.
width
.
equalTo
(
52
)
make
.
height
.
equalTo
(
16
)
make
.
left
.
equalToSuperview
()
.
offset
(
4
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
4
)
make
.
width
.
equalTo
(
60
)
make
.
height
.
equalTo
(
20
)
}
}
...
...
@@ -207,9 +208,9 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
seletedBtn
?
.
snp
.
makeConstraints
({
make
in
make
.
width
.
height
.
equalTo
(
24
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
12
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
20
)
make
.
width
.
height
.
equalTo
(
12
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
6
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
6
)
})
self
.
extensionView
.
snp
.
makeConstraints
{
make
in
...
...
PhoneManager/Class/Page/Keep/DataManager/KeepListManager.swift
0 → 100644
View file @
f935e637
//
// KeepListManager.swift
// PhoneManager
//
// Created by edy on 2025/5/16.
//
import
UIKit
class
KeepListManager
{
/// 获取保留列表所有数据
/// - Returns: 所有列表数据
static
func
getAllKeepListData
()
->
[
AssetModel
]{
var
array
:
[
AssetModel
]
=
[]
// 单利中的数据
for
(
key
,
value
)
in
Singleton
.
shared
.
keepList
{
for
item
in
value
{
array
.
append
(
item
)
}
}
// 数据库中的数据
let
data
=
GroupDatabase
.
shared
.
queryAll
()
for
item
in
data
{
array
.
append
(
AssetModel
(
localIdentifier
:
item
.
localIdentifier
,
assetSize
:
item
.
assetSize
,
createDate
:
item
.
createDate
,
mediaType
:
item
.
mediaType
))
}
return
array
}
}
PhoneManager/Class/Page/Trash/DataManager/TrashDataManager.swift
View file @
f935e637
...
...
@@ -74,12 +74,6 @@ class TrashDataManager {
for
item
in
dataDB
{
assetModel
.
append
(
AssetModel
.
init
(
localIdentifier
:
item
.
localIdentifier
,
assetSize
:
item
.
assetSize
,
createDate
:
item
.
createDate
,
mediaType
:
item
.
mediaType
))
}
// 从单利拿数据
if
let
type
=
mediaType
{
if
let
dataSg
=
Singleton
.
shared
.
trashData
[
type
]{
assetModel
=
assetModel
+
dataSg
}
}
}
return
assetModel
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment