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
abc95e48
Commit
abc95e48
authored
May 19, 2025
by
yqz
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop_0409' into yQz0507
* develop_0409: 【修复】合并代码问题 【优化】修改部分bug、优化功能 【优化】部分逻辑新增和bug修复 优化
parents
0328cde7
2f09d72d
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
701 additions
and
696 deletions
+701
-696
CompressController.swift
...r/Class/Page/Compress/Controller/CompressController.swift
+23
-49
CompressCustomHeaderView.swift
...r/Class/Page/Compress/View/CompressCustomHeaderView.swift
+35
-51
CompressViewModel.swift
...ger/Class/Page/Compress/ViewModel/CompressViewModel.swift
+5
-28
HomeInfoViewController.swift
...r/Class/Page/Home/Controller/HomeInfoViewController.swift
+5
-0
HomePhotosDetailViewController.swift
...Page/Home/Controller/HomePhotosDetailViewController.swift
+215
-105
HomeVideoDetailController.swift
...lass/Page/Home/Controller/HomeVideoDetailController.swift
+197
-98
PhotoDetailViewController.swift
...lass/Page/Home/Controller/PhotoDetailViewController.swift
+1
-0
PhotoRemoveViewController.swift
...lass/Page/Home/Controller/PhotoRemoveViewController.swift
+9
-3
HomeDetailDeleteView.swift
PhoneManager/Class/Page/Home/View/HomeDetailDeleteView.swift
+46
-0
HomeInfoView.swift
PhoneManager/Class/Page/Home/View/HomeInfoView.swift
+52
-36
HomePhotosDetailCustomHeaderView.swift
...ass/Page/Home/View/HomePhotosDetailCustomHeaderView.swift
+36
-52
HomeVideoDetailCustomHeaderView.swift
...lass/Page/Home/View/HomeVideoDetailCustomHeaderView.swift
+39
-149
PhotosRemoveBaseView.swift
PhoneManager/Class/Page/Home/View/PhotosRemoveBaseView.swift
+1
-0
ResourceFilterBoxView.swift
...eManager/Class/Page/Home/View/ResourceFilterBoxView.swift
+9
-3
TrashSubView.swift
PhoneManager/Class/Page/Home/View/TrashSubView.swift
+5
-1
YearMonthPickerView.swift
PhoneManager/Class/Page/Home/View/YearMonthPickerView.swift
+11
-2
HomeInfoTableViewCell.swift
...ger/Class/Page/Home/View/cell/HomeInfoTableViewCell.swift
+2
-3
PMLoadingView.swift
PhoneManager/Class/Page/Public/Loading/PMLoadingView.swift
+2
-1
PMShowImgVideoController.swift
...eManager/Class/Page/Secret/PMShowImgVideoController.swift
+2
-0
TrashViewController.swift
...ger/Class/Page/Trash/Controller/TrashViewController.swift
+4
-56
TrashUIModel.swift
PhoneManager/Class/Page/Trash/Model/TrashUIModel.swift
+0
-3
TrashContenTitleCell.swift
...eManager/Class/Page/Trash/View/TrashContenTitleCell.swift
+1
-13
TrashContenView.swift
PhoneManager/Class/Page/Trash/View/TrashContenView.swift
+1
-33
TrashDefaultView.swift
PhoneManager/Class/Page/Trash/View/TrashDefaultView.swift
+0
-10
No files found.
PhoneManager/Class/Page/Compress/Controller/CompressController.swift
View file @
abc95e48
...
...
@@ -21,14 +21,12 @@ class CompressController : BaseViewController {
private
var
compressNav
:
CompressNavView
?
// 排序
var
currentSort
:
Int
=
0
{
var
currentSort
:
ResouceSortType
=
.
largest
{
didSet
{
clearSelected
()
}
}
// 资源类型 - 相册或者视频
var
currentResourceType
:
CompressType
=
.
compressPhoto
...
...
@@ -122,22 +120,17 @@ class CompressController : BaseViewController {
let
datas
=
Singleton
.
shared
.
resourceModel
if
datas
.
count
>
0
{
// 这里需要重新排序下
if
self
.
currentSort
==
0
{
self
.
resourceData
=
datas
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
}
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
}
}
self
.
resourceData
=
datas
self
.
sortByType
(
sortType
:
self
.
currentSort
)
}
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
guard
let
self
else
{
return
}
self
.
resourceData
=
models
Singleton
.
shared
.
resourceModel
=
self
.
resourceData
PMLoadingHUD
.
share
.
disMiss
()
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
}
}
}
}
...
...
@@ -238,20 +231,10 @@ 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
.
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
}
self
.
currentSort
=
sortType
as!
Int
self
.
sortByType
(
sortType
:
self
.
currentSort
,
header
:
header
)
}
self
.
currentSort
=
fileterModel
.
sortType
self
.
sortByType
(
sortType
:
self
.
currentSort
)
}
header
.
changeView
.
callBack
=
{[
weak
self
]
flag
in
guard
let
self
else
{
return
}
...
...
@@ -264,9 +247,13 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
if
self
.
currentResourceType
==
.
compressPhoto
{
self
.
getViewData
()
}
else
{
PMLoadingHUD
.
share
.
show
(
"Loading..."
,
"Please wait on the screen. This might take several minutes."
)
CompressViewModel
()
.
getAllPhotosToAssets
(
sortType
:
self
.
currentSort
,
assetType
:
flag
)
{
[
weak
self
]
models
in
guard
let
self
else
{
return
}
self
.
resourceData
=
models
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
}
}
}
}
...
...
@@ -284,34 +271,21 @@ extension CompressController:WaterfallMutiSectionDelegate,UICollectionViewDataSo
}
}
func
sortByType
(
sortType
:
Int
,
header
:
CompressCustomHeaderView
){
let
viewModel
=
CompressViewModel
()
func
sortByType
(
sortType
:
ResouceSortType
){
switch
sortType
{
case
0
:
header
.
selectlabel
.
text
=
"Largest"
// 按照文件大小降序
self
.
resourceData
=
viewModel
.
sortRsource
(
resource
:
self
.
resourceData
,
sortType
:
1
,
sortKind
:
0
)
case
.
largest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
break
case
1
:
header
.
selectlabel
.
text
=
"Smallest"
// 按照文件大小升序
self
.
resourceData
=
viewModel
.
sortRsource
(
resource
:
self
.
resourceData
,
sortType
:
0
,
sortKind
:
0
)
case
.
smallest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
<
$1
.
assetSize
}
break
case
2
:
header
.
selectlabel
.
text
=
"Newest"
// 按照时间降序
self
.
resourceData
=
viewModel
.
sortRsource
(
resource
:
self
.
resourceData
,
sortType
:
1
,
sortKind
:
1
)
case
.
latest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
>
$1
.
createDate
}
break
case
3
:
header
.
selectlabel
.
text
=
"Oldest"
// 按照时间升序
self
.
resourceData
=
viewModel
.
sortRsource
(
resource
:
self
.
resourceData
,
sortType
:
0
,
sortKind
:
1
)
break
default
:
case
.
oldest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
<
$1
.
createDate
}
break
}
}
func
updateSubmitButton
(){
...
...
PhoneManager/Class/Page/Compress/View/CompressCustomHeaderView.swift
View file @
abc95e48
...
...
@@ -9,7 +9,7 @@ import Foundation
class
CompressCustomHeaderView
:
UICollectionReusableView
{
var
callBack
:
callBack
<
Any
>
=
{
text
in
}
var
sortViewSubmitCallBack
:
(
ResourceFilterBoxModel
)
->
Void
=
{
model
in
}
var
modeData
=
[
AssetModel
]()
{
didSet
{
...
...
@@ -51,35 +51,21 @@ class CompressCustomHeaderView: UICollectionReusableView{
return
label
}()
lazy
var
btnView
:
UIView
=
{
let
view
=
UIView
()
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
view
.
layer
.
cornerRadius
=
16
view
.
clipsToBounds
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
selectQulity
)
)
view
.
isUserInteractionEnabled
=
true
view
.
addGestureRecognizer
(
tap
)
return
view
// 筛选按钮
lazy
var
filterButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
setImage
(
UIImage
(
named
:
"Frame 1"
),
for
:
.
normal
)
button
.
setTitle
(
"The largest"
,
for
:
.
normal
)
button
.
layer
.
cornerRadius
=
14
button
.
clipsToBounds
=
true
button
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
0.1000
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
semibold
)
button
.
setTitleColor
(
UIColor
(
red
:
0.07
,
green
:
0.07
,
blue
:
0.07
,
alpha
:
1
),
for
:
.
normal
)
button
.
addTarget
(
self
,
action
:
#selector(
filterButtonAction
)
,
for
:
.
touchUpInside
)
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
siezLabel
:
UILabel
=
{
let
label
=
UILabel
()
label
.
text
=
"1.02 GB"
...
...
@@ -128,9 +114,7 @@ class CompressCustomHeaderView: UICollectionReusableView{
private
func
setUI
(){
self
.
addSubview
(
self
.
titlelabel
)
self
.
addSubview
(
self
.
btnView
)
self
.
btnView
.
addSubview
(
self
.
selectImageView
)
self
.
btnView
.
addSubview
(
self
.
selectlabel
)
self
.
addSubview
(
self
.
filterButton
)
self
.
addSubview
(
self
.
siezLabel
)
self
.
addSubview
(
self
.
changeView
)
self
.
addSubview
(
self
.
tipView
)
...
...
@@ -144,27 +128,17 @@ class CompressCustomHeaderView: UICollectionReusableView{
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
.
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
)
make
.
height
.
equalTo
(
28
)
make
.
width
.
equalTo
(
98
)
}
self
.
siezLabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
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
)
}
self
.
changeView
.
snp
.
makeConstraints
{
make
in
...
...
@@ -193,10 +167,20 @@ class CompressCustomHeaderView: UICollectionReusableView{
}
@objc
func
selectQulity
(){
callBack
(
"selectedQulity"
)
@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
{
self
.
filterButton
.
setTitle
(
model
.
sortType
.
rawValue
,
for
:
.
normal
)
}
self
.
sortViewSubmitCallBack
(
model
)
}
}
}
...
...
PhoneManager/Class/Page/Compress/ViewModel/CompressViewModel.swift
View file @
abc95e48
...
...
@@ -67,7 +67,7 @@ class CompressViewModel{
/// 获取相册所有图片
/// - Returns: 图片信息
func
getAllPhotosToAssets
(
sortType
:
Int
,
assetType
:
CompressType
,
_
finished
:
@escaping
Finished
){
func
getAllPhotosToAssets
(
sortType
:
ResouceSortType
,
assetType
:
CompressType
,
_
finished
:
@escaping
Finished
){
var
models
:
[
AssetModel
]
=
[]
...
...
@@ -108,11 +108,11 @@ class CompressViewModel{
group
.
leave
()
if
count
==
assetsArray
.
count
{
// 默认按照文件大小排序
if
sortType
==
0
{
if
sortType
==
.
largest
{
finished
(
models
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
})
}
else
if
sortType
==
1
{
}
else
if
sortType
==
.
smallest
{
finished
(
models
.
sorted
{
$0
.
assetSize
<
$1
.
assetSize
})
}
else
if
sortType
==
2
{
}
else
if
sortType
==
.
latest
{
finished
(
models
.
sorted
{
$0
.
createDate
>
$1
.
createDate
})
}
else
{
finished
(
models
.
sorted
{
$0
.
createDate
<
$1
.
createDate
})
...
...
@@ -122,30 +122,7 @@ 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:
...
...
PhoneManager/Class/Page/Home/Controller/HomeInfoViewController.swift
View file @
abc95e48
...
...
@@ -313,6 +313,11 @@ class HomeInfoViewController:BaseViewController {
titleView
.
model
.
title
=
""
showTipsVC
()
self
.
tablewView
.
keepAllNoDataCallBack
=
{
self
.
ids
=
[]
self
.
setDefaultPage
()
}
}
...
...
PhoneManager/Class/Page/Home/Controller/HomePhotosDetailViewController.swift
View file @
abc95e48
...
...
@@ -7,6 +7,7 @@
import
Foundation
import
Photos
import
SnapKit
class
HomePhotosDetailViewController
:
BaseViewController
{
private
var
headerHeight
:
CGFloat
=
98
...
...
@@ -15,7 +16,18 @@ class HomePhotosDetailViewController : BaseViewController {
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
>
()
...
...
@@ -25,17 +37,42 @@ class HomePhotosDetailViewController : BaseViewController {
var
resourceData
:
[
AssetModel
]
=
[]
// 排序
var
currentSort
:
Int
=
0
var
currentSort
:
ResouceSortType
=
.
largest
// 当前页面选中的
var
selectedModel
:
[
AssetModel
]
=
[]
{
didSet
{
if
self
.
selectedModel
.
count
==
0
{
self
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
else
if
self
.
selectedModel
.
count
==
1
{
self
.
deleteButton
.
setTitle
(
"Delete
\(
self
.
selectedModel
.
count
)
Photo"
,
for
:
.
normal
)
}
else
{
self
.
deleteButton
.
setTitle
(
"Delete
\(
selectedModel
.
count
)
Photos"
,
for
:
.
normal
)
DispatchQueue
.
main
.
async
{
if
self
.
selectedModel
.
count
==
0
{
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
{
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
{
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 {
let
layout
=
WaterfallMutiSectionFlowLayout
()
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
(
HomePhotosDetailCustomHeaderView
.
self
,
forSupplementaryViewOfKind
:
UICollectionView
.
elementKindSectionHeader
,
withReuseIdentifier
:
"HomePhotosDetailCustomHeaderView"
)
...
...
@@ -80,18 +117,20 @@ class HomePhotosDetailViewController : BaseViewController {
}()
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
)
lazy
var
deleteButtonView
:
HomeDetailDeleteView
=
{
let
view
=
HomeDetailDeleteView
()
view
.
addTopShadow
()
return
view
}()
lazy
var
trashSubView
:
TrashSubView
=
{
let
view
=
TrashSubView
()
view
.
backgroundColor
=
.
white
view
.
isHidden
=
true
return
view
}()
func
setUI
(){
...
...
@@ -113,17 +152,17 @@ class HomePhotosDetailViewController : BaseViewController {
self
.
selectedModel
.
removeAll
()
}
DispatchQueue
.
main
.
async
{
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
if
self
.
selectedModel
.
count
>
0
{
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
self
.
deleteButton
View
.
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
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
}
...
...
@@ -134,17 +173,17 @@ class HomePhotosDetailViewController : BaseViewController {
self
.
selectedModel
.
removeAll
()
}
DispatchQueue
.
main
.
async
{
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
if
self
.
selectedModel
.
count
>
0
{
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
self
.
deleteButton
View
.
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
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
}
}
...
...
@@ -153,12 +192,12 @@ class HomePhotosDetailViewController : BaseViewController {
self
.
view
.
insertSubview
(
collectionView
,
at
:
0
)
self
.
view
.
addSubview
(
self
.
deleteButton
)
self
.
deleteButton
.
snp
.
makeConstraints
{
make
in
make
.
top
.
equalTo
(
self
.
collectionView
.
snp
.
bottom
)
.
offset
(
16
)
self
.
view
.
addSubview
(
self
.
deleteButtonView
)
self
.
deleteButtonView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
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
)
...
...
@@ -174,9 +213,34 @@ class HomePhotosDetailViewController : BaseViewController {
make
.
top
.
equalTo
(
self
.
defaultImageView
.
snp
.
bottom
)
.
offset
(
-
30
)
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 {
if
self
.
resourceData
.
count
==
0
{
self
.
defaultImageView
.
isHidden
=
false
self
.
defaultTipLabel
.
isHidden
=
false
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
true
self
.
currentHeaderView
?
.
filterButton
.
isHidden
=
true
self
.
videoDetailNavView
?
.
startSelectButton
.
isHidden
=
true
self
.
deleteButton
.
isHidden
=
true
self
.
deleteButton
View
.
isHidden
=
true
}
else
{
self
.
defaultImageView
.
isHidden
=
true
self
.
defaultTipLabel
.
isHidden
=
true
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
false
self
.
currentHeaderView
?
.
filterButton
.
isHidden
=
false
self
.
videoDetailNavView
?
.
startSelectButton
.
isHidden
=
false
self
.
deleteButton
.
isHidden
=
false
self
.
deleteButton
View
.
isHidden
=
false
}
}
self
.
addTrashView
()
}
}
...
...
@@ -212,6 +276,33 @@ class HomePhotosDetailViewController : BaseViewController {
setUI
()
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
(){
...
...
@@ -235,7 +326,7 @@ class HomePhotosDetailViewController : BaseViewController {
}
TipsManager
.
saveLoadStatus
(
mediaType
)
}
// MARK:系统方法
...
...
@@ -256,6 +347,7 @@ class HomePhotosDetailViewController : BaseViewController {
self
.
collectionView
.
reloadData
()
}
}
addTrashView
()
}
...
...
@@ -265,7 +357,7 @@ class HomePhotosDetailViewController : BaseViewController {
/// 获取当前页面数据
/// - Parameter completed: 完成回调
func
getCurrentPageData
(
completed
:
@escaping
()
->
Void
){
PhotoManager
.
shared
.
reloadTrashAndKeep
()
var
data
=
self
.
mediaType
==
.
Other
?
PhotoManager
.
shared
.
filterOtherModels
:
PhotoManager
.
shared
.
filterScreenShotModels
...
...
@@ -371,15 +463,54 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
cell
.
cellCallBack
=
{[
weak
self
]
ident
,
order
in
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
async
{
// 点击之后跳转详情页面
if
self
.
mediaType
==
.
screenshots
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
shot
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
if
self
.
mediaType
==
.
Other
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
other
)
// 这里还需要判断下当前cell 是不是被选中了,选中了就不跳转左滑右滑动页面
if
self
.
videoDetailNavView
?
.
startSelectButton
.
isSelected
==
false
{
// 点击之后跳转详情页面
if
self
.
mediaType
==
.
screenshots
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
shot
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
if
self
.
mediaType
==
.
Other
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
other
)
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
...
...
@@ -390,14 +521,6 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
self
.
selectedModel
.
removeAll
{
$0
.
localIdentifier
==
self
.
resourceData
[
order
]
.
localIdentifier
}
}
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
...
...
@@ -442,19 +565,22 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
header
.
modelTitlelabel
.
text
=
self
.
mediaType
?
.
rawValue
currentHeaderView
=
header
header
.
sort
Callback
=
{[
weak
self
]
in
header
.
sort
ViewSubmitCallBack
=
{[
weak
self
]
filterModel
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
}
self
.
currentSort
=
sortType
as!
Int
self
.
sortByType
(
sortType
:
self
.
currentSort
)
self
.
changeHeaderTitle
()
var
dataS
:
[
AssetModel
]
=
[]
if
self
.
mediaType
==
.
Other
{
dataS
=
PhotoManager
.
shared
.
filterOtherModels
}
else
{
dataS
=
PhotoManager
.
shared
.
filterScreenShotModels
}
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
}
}
/// 改变标题
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
func
filterDataByDate
(
orgModels
:
[
AssetModel
],
startDate
:
Date
?
,
endDate
:
Date
?)
->
[
AssetModel
]{
var
array
=
orgModels
if
startDate
!=
nil
{
array
=
array
.
filter
({
$0
.
createDate
>=
startDate
!
})
}
DispatchQueue
.
main
.
async
{
self
.
currentHeaderView
!.
selectlabel
.
text
=
title
self
.
collectionView
.
reloadData
()
if
endDate
!=
nil
{
array
=
array
.
filter
({
$0
.
createDate
<=
endDate
!
})
}
return
array
}
/// 对当前页面资源排序(注意这里获取的资源是image)
/// - Parameter sortType: 排序类型
func
sortByType
(
sortType
:
Int
){
func
sortByType
(
sortType
:
ResouceSortType
){
switch
sortType
{
case
0
:
case
.
largest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
break
case
1
:
case
.
smallest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
<
$1
.
assetSize
}
break
case
2
:
case
.
latest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
>
$1
.
createDate
}
break
case
3
:
case
.
oldest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
<
$1
.
createDate
}
break
default
:
break
}
}
...
...
@@ -526,7 +633,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
@objc
func
deleteButtonAction
(){
func
deleteButtonAction
(){
if
selectedModel
.
count
<=
0
{
return
}
...
...
@@ -632,9 +739,9 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
else
{
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
/// 弹出广告
...
...
@@ -665,7 +772,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
self
.
showDeleteSuccess
(
fileCount
:
allIdent
.
count
,
fileSize
:
fileSize
)
self
.
updateCurrentPageWhenDeleteAny
()
}
}
else
{
PMLoadingHUD
.
share
.
disMiss
()
if
let
error
=
error
{
...
...
@@ -673,7 +780,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
}
}
...
...
@@ -713,7 +820,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
// 清理下缓存数据
// PhotoDataManager.manager.removeDataWhenDeleteInPage(data: self.selectedModel)
// PhotoDataManager.manager.removeDataWhenDeleteInPage(data: self.selectedModel)
PhotoManager
.
shared
.
removeDataWhenDeleteInPage
(
data
:
self
.
selectedModel
)
{
//删除完成刷新数据
}
...
...
@@ -721,8 +828,8 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
DispatchQueue
.
main
.
async
{
// 删除完成之后,移除下当前选择的数据
self
.
selectedModel
.
removeAll
()
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadSections
(
IndexSet
(
integer
:
0
))
...
...
@@ -731,4 +838,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
setDefaultPage
()
}
}
PhoneManager/Class/Page/Home/Controller/HomeVideoDetailController.swift
View file @
abc95e48
...
...
@@ -7,6 +7,7 @@
import
Foundation
import
Photos
import
SnapKit
class
HomeVideoDetailController
:
BaseViewController
{
...
...
@@ -14,6 +15,8 @@ class HomeVideoDetailController :BaseViewController {
private
var
currentHeaderView
:
HomeVideoDetailCustomHeaderView
?
private
var
deleteViewBottomConstraint
:
Constraint
?
@MainActor
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
...
...
@@ -27,22 +30,42 @@ class HomeVideoDetailController :BaseViewController {
var
resourceData
:
[
AssetModel
]
=
[]
// 排序
var
currentSort
:
Int
=
0
var
currentSort
:
ResouceSortType
=
.
largest
// 当前页面选中的
var
selectedModel
:
[
AssetModel
]
=
[]
{
didSet
{
DispatchQueue
.
main
.
async
{
[
self
]
in
if
self
.
selectedModel
.
count
!=
0
{
if
self
.
selectedModel
.
count
==
1
{
self
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
else
if
self
.
selectedModel
.
count
==
1
{
self
.
deleteButton
.
setTitle
(
"Delete
\(
self
.
selectedModel
.
count
)
Video"
,
for
:
.
normal
)
}
else
{
self
.
deleteButton
.
setTitle
(
"Delete
\(
selectedModel
.
count
)
Videos"
,
for
:
.
normal
)
DispatchQueue
.
main
.
async
{
if
self
.
selectedModel
.
count
==
0
{
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
{
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
{
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 {
let
layout
=
WaterfallMutiSectionFlowLayout
()
layout
.
delegate
=
self
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
)
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
-
safeHeight
),
collectionViewLayout
:
layout
)
sview
.
register
(
HomeVideoDetailCell
.
self
,
forCellWithReuseIdentifier
:
"HomeVideoDetailCell"
)
sview
.
register
(
HomeVideoDetailCustomHeaderView
.
self
,
forSupplementaryViewOfKind
:
UICollectionView
.
elementKindSectionHeader
,
withReuseIdentifier
:
"HomeVideoDetailCustomHeaderView"
)
...
...
@@ -69,14 +92,18 @@ class HomeVideoDetailController :BaseViewController {
}()
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
)
lazy
var
deleteButtonView
:
HomeDetailDeleteView
=
{
let
view
=
HomeDetailDeleteView
()
view
.
addTopShadow
()
return
view
}()
lazy
var
trashSubView
:
TrashSubView
=
{
let
view
=
TrashSubView
()
view
.
backgroundColor
=
.
white
view
.
tipLabel
.
text
=
"The video in the trash can"
view
.
isHidden
=
true
return
view
}()
...
...
@@ -165,11 +192,11 @@ class HomeVideoDetailController :BaseViewController {
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
if
self
.
selectedModel
.
count
>
0
{
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
self
.
deleteButton
View
.
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
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
}
...
...
@@ -181,17 +208,17 @@ class HomeVideoDetailController :BaseViewController {
self
.
selectedModel
.
removeAll
()
}
DispatchQueue
.
main
.
async
{
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
if
self
.
selectedModel
.
count
>
0
{
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
self
.
deleteButton
View
.
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
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
}
}
}
...
...
@@ -199,12 +226,12 @@ class HomeVideoDetailController :BaseViewController {
self
.
view
.
insertSubview
(
collectionView
,
at
:
0
)
self
.
view
.
addSubview
(
self
.
deleteButton
)
self
.
deleteButton
.
snp
.
makeConstraints
{
make
in
make
.
top
.
equalTo
(
self
.
collectionView
.
snp
.
bottom
)
.
offset
(
16
)
self
.
view
.
addSubview
(
self
.
deleteButtonView
)
self
.
deleteButtonView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
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
.
defaultImageView
.
snp
.
makeConstraints
{
make
in
...
...
@@ -230,8 +257,59 @@ class HomeVideoDetailController :BaseViewController {
setUI
()
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
)
{
super
.
viewWillAppear
(
animated
)
// 重新设置下数据源
...
...
@@ -240,6 +318,7 @@ class HomeVideoDetailController :BaseViewController {
self
.
collectionView
.
reloadData
()
}
}
addTrashView
()
}
func
showTipsVC
(){
...
...
@@ -294,15 +373,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
else
{
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
guard
let
self
else
{
return
}
...
...
@@ -310,8 +380,59 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
// 获取视频的图片
PhotoAndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
// 点击之后跳转详情页面
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
if
self
.
videoDetailNavView
?
.
startSelectButton
.
isSelected
==
false
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
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
:
{
DispatchQueue
.
main
.
async
{
let
alert
=
UIAlertController
(
title
:
nil
,
message
:
"Get Video image failure"
,
preferredStyle
:
.
alert
)
...
...
@@ -367,19 +488,17 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
currentHeaderView
=
header
header
.
compressionTipView
.
reloadData
()
header
.
sizeLabel
.
text
=
"
\(
self
.
resourceData
.
count
)
Videos"
header
.
sort
Callback
=
{[
weak
self
]
in
header
.
sort
ViewSubmitCallBack
=
{[
weak
self
]
filterModel
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
}
self
.
currentSort
=
sortType
as!
Int
self
.
sortByType
(
sortType
:
self
.
currentSort
)
self
.
changeHeaderTitle
()
let
dataS
:
[
AssetModel
]
=
PhotoManager
.
shared
.
filterVideoModels
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
()
}
}
return
header
...
...
@@ -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
){
...
...
@@ -402,7 +532,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
@objc
func
deleteButtonAction
(){
func
deleteButtonAction
(){
if
selectedModel
.
count
<=
0
{
return
...
...
@@ -545,7 +675,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
SystemCommentManager
.
showCommentPage
()
if
isAfterAdv
==
false
{
self
.
updateFreeTimes
()
}
self
.
showDeleteSuccess
(
fileCount
:
self
.
selectedModel
.
count
,
fileSize
:
fileSize
)
// 移除当前总数据源的数据
...
...
@@ -580,17 +710,18 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
if
self
.
resourceData
.
count
==
0
{
self
.
defaultImageView
.
isHidden
=
false
self
.
defaultTipLabel
.
isHidden
=
false
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
true
self
.
currentHeaderView
?
.
filterButton
.
isHidden
=
true
self
.
videoDetailNavView
?
.
startSelectButton
.
isHidden
=
true
self
.
deleteButton
.
isHidden
=
true
self
.
deleteButton
View
.
deleteButton
.
isHidden
=
true
}
else
{
self
.
defaultImageView
.
isHidden
=
true
self
.
defaultTipLabel
.
isHidden
=
true
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
false
self
.
currentHeaderView
?
.
filterButton
.
isHidden
=
false
self
.
videoDetailNavView
?
.
startSelectButton
.
isHidden
=
false
self
.
deleteButton
.
isHidden
=
false
self
.
deleteButton
View
.
deleteButton
.
isHidden
=
false
}
}
self
.
addTrashView
()
}
}
...
...
@@ -608,8 +739,8 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
// 更新页面
DispatchQueue
.
main
.
async
{
self
.
selectedModel
.
removeAll
()
self
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
self
.
deleteButton
View
.
deleteButton
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
self
.
deleteButton
View
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
if
self
.
currentHeaderView
!=
nil
{
self
.
currentHeaderView
?
.
sizeLabel
.
text
=
"
\(
self
.
resourceData
.
count
)
Videos"
...
...
@@ -623,52 +754,20 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
setDefaultPage
()
}
/// 改变标题
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
){
func
sortByType
(
sortType
:
ResouceSortType
){
switch
sortType
{
case
0
:
case
.
largest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
break
case
1
:
case
.
smallest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
assetSize
<
$1
.
assetSize
}
break
case
2
:
case
.
latest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
>
$1
.
createDate
}
break
case
3
:
case
.
oldest
:
self
.
resourceData
=
self
.
resourceData
.
sorted
{
$0
.
createDate
<
$1
.
createDate
}
break
default
:
break
}
}
...
...
PhoneManager/Class/Page/Home/Controller/PhotoDetailViewController.swift
View file @
abc95e48
...
...
@@ -23,6 +23,7 @@ class PhotoDetailViewController : BaseViewController {
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
self
.
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
self
.
view
.
addSubview
(
self
.
closeButton
)
self
.
closeButton
.
snp
.
makeConstraints
{
make
in
...
...
PhoneManager/Class/Page/Home/Controller/PhotoRemoveViewController.swift
View file @
abc95e48
...
...
@@ -77,6 +77,9 @@ class PhotoRemoveViewController: BaseViewController {
// MARK: - 生命周期
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
self
.
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
formatter
.
dateStyle
=
.
medium
formatter
.
timeStyle
=
.
none
if
let
type
=
self
.
mediaType
{
...
...
@@ -295,7 +298,8 @@ class PhotoRemoveViewController: BaseViewController {
photoView
.
mediaType
=
self
.
mediaType
photoView
.
addGestureRecognizer
(
UIPanGestureRecognizer
(
target
:
self
,
action
:
#selector(
handlePan
)
))
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
)
}
...
...
@@ -470,7 +474,8 @@ class PhotoRemoveViewController: BaseViewController {
private
func
resetViewPosition
(
_
view
:
PhotosRemoveBaseView
)
{
UIView
.
animate
(
withDuration
:
0.3
)
{
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
()
}
}
...
...
@@ -487,7 +492,8 @@ class PhotoRemoveViewController: BaseViewController {
// 创建新视图并更新内容
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
.
alpha
=
0
view
.
addSubview
(
newView
)
...
...
PhoneManager/Class/Page/Home/View/HomeDetailDeleteView.swift
0 → 100644
View file @
abc95e48
//
// 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"
)
}
}
PhoneManager/Class/Page/Home/View/HomeInfoView.swift
View file @
abc95e48
...
...
@@ -13,12 +13,16 @@ class HomeInfoView :UIView {
var
titleText
:
String
?
var
isDragEnd
:
Bool
=
false
var
type
:
PhotsFileType
?
var
models
:[
HomeInfoTableItem
]
=
[]
var
callBack
:
callBack
<
Any
>
=
{
text
in
}
var
keepAllNoDataCallBack
:
()
->
Void
=
{}
var
deleteCallBack
:
callBack
<
[
AssetModel
]
>
=
{
array
in
}
var
titleShowHideCallBack
:
callBack
<
Bool
>
=
{
isShow
in
}
...
...
@@ -42,6 +46,7 @@ class HomeInfoView :UIView {
lazy
var
headerView
:
HomeInfoTitleView
=
{
let
sview
:
HomeInfoTitleView
=
HomeInfoTitleView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
width
,
height
:
84
))
sview
.
titleLabel
.
text
=
self
.
titleText
sview
.
type
=
self
.
type
sview
.
filterButton
.
isHidden
=
self
.
type
!=
.
similar
&&
self
.
type
!=
.
SimilarVideos
return
sview
}()
...
...
@@ -308,6 +313,7 @@ class HomeInfoView :UIView {
tableView
.
contentInset
=
UIEdgeInsets
(
top
:
0
,
left
:
0
,
bottom
:
deleteView
.
isHidden
?
12
:
deleteView
.
height
+
12
,
right
:
0
)
self
.
nextRowButton
.
isHidden
=
!
self
.
isShowNextRowButton
()
}
}
...
...
@@ -315,45 +321,28 @@ class HomeInfoView :UIView {
extension
HomeInfoView
:
UITableViewDataSource
,
UITableViewDelegate
{
@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
()
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
()
{
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
// 获取最后一个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
}
...
...
@@ -370,6 +359,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
// 直接滚动到调整后的位置
tableView
.
setContentOffset
(
adjustedOffset
,
animated
:
true
)
self
.
isDragEnd
=
false
}
func
scrollViewDidScroll
(
_
scrollView
:
UIScrollView
)
{
...
...
@@ -386,6 +376,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
tableView
.
bringSubviewToFront
(
self
.
headerView
)
}
func
scrollViewDidEndDragging
(
_
scrollView
:
UIScrollView
,
willDecelerate
decelerate
:
Bool
)
{
self
.
isDragEnd
=
true
}
func
tableView
(
_
tableView
:
UITableView
,
numberOfRowsInSection
section
:
Int
)
->
Int
{
return
models
.
count
...
...
@@ -394,10 +388,25 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
HomeInfoTableViewCell
.
identifier
,
for
:
indexPath
)
as!
HomeInfoTableViewCell
cell
.
saveKeepListFinishedCallback
=
{
self
.
ids
?
.
remove
(
at
:
indexPath
.
section
)
self
.
resetModels
()
tableView
.
deleteRows
(
at
:
[
indexPath
],
with
:
.
automatic
)
cell
.
saveKeepListFinishedCallback
=
{[
weak
self
]
index
in
guard
let
self
else
{
return
}
self
.
ids
?
.
remove
(
at
:
index
.
section
)
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
...
...
@@ -439,10 +448,10 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
for
item
in
orgModels
{
var
array
=
item
if
startDate
!=
nil
{
array
=
array
.
filter
({
$0
.
createDate
>
startDate
!
})
array
=
array
.
filter
({
$0
.
createDate
>
=
startDate
!
})
}
if
endDate
!=
nil
{
array
=
array
.
filter
({
$0
.
createDate
<
endDate
!
})
array
=
array
.
filter
({
$0
.
createDate
<
=
endDate
!
})
}
if
array
.
count
>=
2
{
...
...
@@ -490,6 +499,8 @@ class HomeInfoTitleView:UIView {
var
sortViewSubmitCallBack
:
(
ResourceFilterBoxModel
)
->
Void
=
{
model
in
}
var
type
:
PhotsFileType
?
lazy
var
titleLabel
:
UILabel
=
{
let
sview
:
UILabel
=
UILabel
()
...
...
@@ -567,7 +578,12 @@ class HomeInfoTitleView:UIView {
let
allNumberStr
=
"
\(
allNumber
)
"
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
:
[
...
...
PhoneManager/Class/Page/Home/View/HomePhotosDetailCustomHeaderView.swift
View file @
abc95e48
...
...
@@ -9,7 +9,7 @@ import Foundation
class
HomePhotosDetailCustomHeaderView
:
UICollectionReusableView
{
var
sort
Callback
:
()
->
Void
=
{
}
var
sort
ViewSubmitCallBack
:
(
ResourceFilterBoxModel
)
->
Void
=
{
model
in
}
lazy
var
modelTitlelabel
:
UILabel
=
{
let
label
=
UILabel
()
...
...
@@ -20,33 +20,22 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
return
label
}()
lazy
var
btnView
:
UIView
=
{
let
view
=
UIView
()
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
view
.
layer
.
cornerRadius
=
16
view
.
clipsToBounds
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
sortAction
)
)
view
.
isUserInteractionEnabled
=
true
view
.
addGestureRecognizer
(
tap
)
return
view
// 筛选按钮
lazy
var
filterButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
setImage
(
UIImage
(
named
:
"Frame 1"
),
for
:
.
normal
)
button
.
setTitle
(
"The largest"
,
for
:
.
normal
)
button
.
layer
.
cornerRadius
=
14
button
.
clipsToBounds
=
true
button
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
0.1000
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
semibold
)
button
.
setTitleColor
(
UIColor
(
red
:
0.07
,
green
:
0.07
,
blue
:
0.07
,
alpha
:
1
),
for
:
.
normal
)
button
.
addTarget
(
self
,
action
:
#selector(
filterButtonAction
)
,
for
:
.
touchUpInside
)
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
=
{
let
label
=
UILabel
()
label
.
text
=
"0 Photos"
...
...
@@ -59,43 +48,26 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
private
func
setUI
(){
self
.
addSubview
(
self
.
modelTitlelabel
)
self
.
addSubview
(
self
.
btnView
)
self
.
addSubview
(
self
.
countLabel
)
self
.
btnView
.
addSubview
(
self
.
selectImageView
)
self
.
btnView
.
addSubview
(
self
.
selectlabel
)
self
.
addSubview
(
self
.
filterButton
)
self
.
modelTitlelabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
.
offset
(
0
)
make
.
top
.
equalToSuperview
()
.
offset
(
14
)
make
.
width
.
equalTo
(
150
*
RScreenW
())
make
.
height
.
equalTo
(
28
)
}
self
.
btnView
.
snp
.
makeConstraints
{
make
in
self
.
filterButton
.
snp
.
makeConstraints
{
make
in
make
.
centerY
.
equalTo
(
self
.
modelTitlelabel
.
snp
.
centerY
)
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
)
make
.
height
.
equalTo
(
28
)
make
.
width
.
equalTo
(
98
)
}
self
.
countLabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
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
)
}
}
...
...
@@ -112,7 +84,19 @@ class HomePhotosDetailCustomHeaderView : UICollectionReusableView {
setUI
()
}
@objc
func
sortAction
(){
sortCallback
()
@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
{
self
.
filterButton
.
setTitle
(
model
.
sortType
.
rawValue
,
for
:
.
normal
)
}
self
.
sortViewSubmitCallBack
(
model
)
}
}
}
}
PhoneManager/Class/Page/Home/View/HomeVideoDetailCustomHeaderView.swift
View file @
abc95e48
...
...
@@ -8,7 +8,7 @@
import
Foundation
class
HomeVideoDetailCustomHeaderView
:
UICollectionReusableView
{
var
sort
Callback
:
()
->
Void
=
{
}
var
sort
ViewSubmitCallBack
:
(
ResourceFilterBoxModel
)
->
Void
=
{
model
in
}
lazy
var
modelTitlelabel
:
UILabel
=
{
let
label
=
UILabel
()
...
...
@@ -18,34 +18,19 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
label
.
font
=
UIFont
.
systemFont
(
ofSize
:
20
,
weight
:
.
bold
)
return
label
}()
lazy
var
btnView
:
UIView
=
{
let
view
=
UIView
()
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
view
.
layer
.
cornerRadius
=
16
view
.
clipsToBounds
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
sortAction
)
)
view
.
isUserInteractionEnabled
=
true
view
.
addGestureRecognizer
(
tap
)
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
filterButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
setImage
(
UIImage
(
named
:
"Frame 1"
),
for
:
.
normal
)
button
.
setTitle
(
"The largest"
,
for
:
.
normal
)
button
.
layer
.
cornerRadius
=
14
button
.
clipsToBounds
=
true
button
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
0.1000
)
button
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
semibold
)
button
.
setTitleColor
(
UIColor
(
red
:
0.07
,
green
:
0.07
,
blue
:
0.07
,
alpha
:
1
),
for
:
.
normal
)
button
.
addTarget
(
self
,
action
:
#selector(
filterButtonAction
)
,
for
:
.
touchUpInside
)
button
.
isHidden
=
false
return
button
}()
lazy
var
sizeLabel
:
UILabel
=
{
let
label
=
UILabel
()
...
...
@@ -56,72 +41,14 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
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
(){
self
.
addSubview
(
self
.
modelTitlelabel
)
self
.
addSubview
(
self
.
btnView
)
self
.
addSubview
(
self
.
filterButton
)
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
make
.
left
.
equalToSuperview
()
.
offset
(
0
)
make
.
top
.
equalToSuperview
()
.
offset
(
14
)
...
...
@@ -129,31 +56,23 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
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
make
.
left
.
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
)
}
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
)
compressionTipView
.
snp
.
makeConstraints
{
make
in
...
...
@@ -164,47 +83,6 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
let
tap
=
UITapGestureRecognizer
(
target
:
self
,
action
:
#selector(
compressClick
)
)
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
)
{
...
...
@@ -219,8 +97,20 @@ class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
setUI
()
}
@objc
func
sortAction
(){
sortCallback
()
@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
{
self
.
filterButton
.
setTitle
(
model
.
sortType
.
rawValue
,
for
:
.
normal
)
}
self
.
sortViewSubmitCallBack
(
model
)
}
}
}
lazy
var
compressionTipView
:
VideocompressionHeadView
=
{
...
...
PhoneManager/Class/Page/Home/View/PhotosRemoveBaseView.swift
View file @
abc95e48
...
...
@@ -56,6 +56,7 @@ class PhotosRemoveBaseView: UIView {
self
.
imageView
.
isUserInteractionEnabled
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
showDeatail
)
)
imageView
.
backgroundColor
=
.
white
self
.
imageView
.
addGestureRecognizer
(
tap
)
}
...
...
PhoneManager/Class/Page/Home/View/ResourceFilterBoxView.swift
View file @
abc95e48
...
...
@@ -118,10 +118,15 @@ class ResourceFilterBoxView : UIView {
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
()
formatter
.
locale
=
Locale
(
identifier
:
"en_US"
)
return
formatter
.
monthSymbols
[
month
]
return
formatter
.
monthSymbols
[
month
-
1
]
}
override
func
removeFromSuperview
()
{
...
...
@@ -240,6 +245,7 @@ class ResourceFilterBoxView : UIView {
components
.
year
=
year
components
.
month
=
month
components
.
day
=
1
// 设置为当月第一天
components
.
timeZone
=
TimeZone
(
identifier
:
"UTC"
)
// 使用公历日历
let
calendar
=
Calendar
(
identifier
:
.
gregorian
)
...
...
@@ -260,6 +266,7 @@ class ResourceFilterBoxView : UIView {
components
.
year
=
nextYear
components
.
month
=
nextMonth
components
.
day
=
1
components
.
timeZone
=
TimeZone
(
identifier
:
"UTC"
)
let
calendar
=
Calendar
(
identifier
:
.
gregorian
)
guard
let
nextMonthFirstDay
=
calendar
.
date
(
from
:
components
)
else
{
...
...
@@ -318,7 +325,6 @@ class ResourceFilterBoxView : UIView {
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
...
...
PhoneManager/Class/Page/Home/View/TrashSubView.swift
View file @
abc95e48
...
...
@@ -9,6 +9,8 @@ import UIKit
class
TrashSubView
:
UIView
{
var
type
:
TrashTypeEnum
?
var
clearTashDataCallBack
:
()
->
Void
=
{}
var
presentTashDetailViewClickCallBack
:
()
->
Void
=
{}
...
...
@@ -32,7 +34,7 @@ class TrashSubView: UIView {
let
button
=
UIButton
(
type
:
.
custom
)
button
.
setImage
(
UIImage
(
named
:
"ic_delete_duplicates"
),
for
:
.
normal
)
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
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
semibold
)
button
.
layer
.
cornerRadius
=
19
...
...
@@ -43,6 +45,8 @@ class TrashSubView: UIView {
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
self
.
addTopShadow
()
// 给当前视图添加手势
addTapGestureToSelf
()
...
...
PhoneManager/Class/Page/Home/View/YearMonthPickerView.swift
View file @
abc95e48
...
...
@@ -146,14 +146,14 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate {
}
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
)
{
if
component
==
0
{
selectedMonth
=
row
}
else
{
selectedYear
=
years
.
reversed
()
[
row
]
selectedYear
=
years
[
row
]
}
}
...
...
@@ -161,4 +161,13 @@ extension YearMonthPickerView: UIPickerViewDataSource, UIPickerViewDelegate {
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
())
}
}
PhoneManager/Class/Page/Home/View/cell/HomeInfoTableViewCell.swift
View file @
abc95e48
...
...
@@ -24,7 +24,7 @@ class HomeInfoTableViewCell:UITableViewCell {
var
callBack
:
callBack
<
Any
>
=
{
text
in
}
var
saveKeepListFinishedCallback
:
(
)
->
Void
=
{
}
var
saveKeepListFinishedCallback
:
(
IndexPath
)
->
Void
=
{
index
in
}
override
init
(
style
:
UITableViewCell
.
CellStyle
,
reuseIdentifier
:
String
?)
{
...
...
@@ -119,7 +119,6 @@ class HomeInfoTableViewCell:UITableViewCell {
UIView
.
transition
(
with
:
collectionView
!
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
?
.
reloadData
()
// self.reloadCollectionView()
},
completion
:
nil
)
}
}
...
...
@@ -224,7 +223,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou
cell
.
keepAllCallBack
=
{
//存到保留列表
saveAllDataToKeepList
()
self
.
saveKeepListFinishedCallback
()
self
.
saveKeepListFinishedCallback
(
indexPath
)
}
// 存全部数据到保留列表
func
saveAllDataToKeepList
(){
...
...
PhoneManager/Class/Page/Public/Loading/PMLoadingView.swift
View file @
abc95e48
...
...
@@ -21,7 +21,8 @@ class PMLoadingHUD{
func
show
(
_
title
:
String
=
"Deleting..."
,
_
subTitle
:
String
=
"Please wait on the screen. This might take several minutes."
){
disMiss
()
DispatchQueue
.
main
.
async
{
KEYWINDOW
()?
.
addSubview
(
self
.
loadingView
)
cWindow
?
.
addSubview
(
self
.
loadingView
)
cWindow
?
.
bringSubviewToFront
(
self
.
loadingView
)
self
.
loadingView
.
setTitleaAndSubTitle
(
title
:
title
,
subTitle
:
subTitle
)
self
.
loadingView
.
animationView
.
play
()
}
...
...
PhoneManager/Class/Page/Secret/PMShowImgVideoController.swift
View file @
abc95e48
...
...
@@ -51,6 +51,8 @@ class PMShowImgVideoController: BaseViewController {
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
self
.
view
.
backgroundColor
=
UIColor
(
red
:
0.95
,
green
:
0.96
,
blue
:
0.99
,
alpha
:
1
)
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
...
...
PhoneManager/Class/Page/Trash/Controller/TrashViewController.swift
View file @
abc95e48
...
...
@@ -12,13 +12,13 @@ class TrashViewController: BaseViewController {
var
dissmisCallBack
:()
->
Void
=
{}
var
source
:[
TrashTypeEnum
]
=
[
.
video
,
.
other
,
.
shot
,
.
chat
]
var
source
:[
TrashTypeEnum
]
=
[
.
video
,
.
other
,
.
shot
]
var
contentH
:
CGFloat
=
0
var
contentScrollView
:
UIScrollView
!
var
delBtn
:
UIButton
!
var
currentType
:
TrashTypeEnum
=
.
other
let
pageCount
=
4
// 总页数
let
pageCount
=
3
// 总页数
var
currentPage
=
1
{
didSet
{
self
.
setDelButtonUI
()
...
...
@@ -61,7 +61,7 @@ class TrashViewController: BaseViewController {
func
configUI
(){
view
.
backgroundColor
=
.
white
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
.
showsHorizontalScrollIndicator
=
false
contentScrollView
.
showsVerticalScrollIndicator
=
false
...
...
@@ -98,13 +98,11 @@ class TrashViewController: BaseViewController {
contentScrollView
.
addSubview
(
videoView
)
contentScrollView
.
addSubview
(
otherView
)
contentScrollView
.
addSubview
(
shotView
)
contentScrollView
.
addSubview
(
chatView
)
videoView
.
deleteButton
=
delBtn
otherView
.
deleteButton
=
delBtn
shotView
.
deleteButton
=
delBtn
chatView
.
deleteButton
=
delBtn
}
override
func
viewWillLayoutSubviews
()
{
...
...
@@ -114,11 +112,10 @@ class TrashViewController: BaseViewController {
let
viewHeight
=
self
.
view
.
bounds
.
height
contentH
=
viewHeight
-
108
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
)
otherView
.
frame
=
CGRect
(
x
:
viewWidth
,
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
=
{
...
...
@@ -139,54 +136,8 @@ class TrashViewController: BaseViewController {
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
{
func
scrollViewDidScroll
(
_
scrollView
:
UIScrollView
){
...
...
@@ -233,9 +184,6 @@ extension TrashViewController:UIScrollViewDelegate{
if
self
.
currentPage
==
3
{
return
(
TrashTypeEnum
.
shot
,
self
.
shotView
)
}
if
self
.
currentPage
==
4
{
return
(
TrashTypeEnum
.
chat
,
self
.
chatView
)
}
return
(
TrashTypeEnum
.
video
,
self
.
videoView
)
}
...
...
PhoneManager/Class/Page/Trash/Model/TrashUIModel.swift
View file @
abc95e48
...
...
@@ -11,7 +11,6 @@ enum TrashTypeEnum : String, CaseIterable{
case
video
=
"Video"
case
other
=
"Other"
case
shot
=
"Screenshot"
case
chat
=
"Chat"
var
dbType
:
Int
{
switch
self
{
...
...
@@ -21,8 +20,6 @@ enum TrashTypeEnum : String, CaseIterable{
return
1
case
.
shot
:
return
2
case
.
chat
:
return
3
}
}
}
...
...
PhoneManager/Class/Page/Trash/View/TrashContenTitleCell.swift
View file @
abc95e48
...
...
@@ -39,8 +39,6 @@ class TrashContenTitleCell: UICollectionViewCell {
scrollLine
.
frame
=
lineTwo
.
frame
case
.
shot
:
scrollLine
.
frame
=
lineThree
.
frame
case
.
chat
:
scrollLine
.
frame
=
lineFour
.
frame
}
}
}
...
...
@@ -130,17 +128,7 @@ class TrashContenTitleCell: UICollectionViewCell {
weakSelf
.
scrollLine
.
frame
=
weakSelf
.
lineTwo
.
frame
}
}
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
}
}
}
}
}
...
...
PhoneManager/Class/Page/Trash/View/TrashContenView.swift
View file @
abc95e48
...
...
@@ -29,7 +29,7 @@ class TrashContenView: UIView {
var
deleteButton
:
UIButton
?
var
scrollLine
:
UIView
!
let
lineW
:
CGFloat
=
(
ScreenW
-
62
)
/
4
.0
let
lineW
:
CGFloat
=
(
ScreenW
-
62
)
/
3
.0
var
dataSource
:[
AssetModel
]
=
[]
{
didSet
{
...
...
@@ -48,11 +48,6 @@ class TrashContenView: UIView {
}
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
()
}
...
...
@@ -81,7 +76,6 @@ class TrashContenView: UIView {
collectionView
.
backgroundColor
=
UIColor
.
colorWithHex
(
hexStr
:
"#F2F6FC"
)
collectionView
.
dataSource
=
self
collectionView
.
register
(
UINib
(
nibName
:
"TrashContenAssetCell"
,
bundle
:
nil
),
forCellWithReuseIdentifier
:
"TrashContenAssetCell"
)
// collectionView.register(UINib(nibName: "TrashContenTitleCell", bundle: nil), forCellWithReuseIdentifier: "TrashContenTitleCell")
addSubview
(
collectionView
)
...
...
@@ -134,14 +128,9 @@ class TrashContenView: UIView {
lineThree
.
backgroundColor
=
UIColor
.
colorWithHex
(
hexStr
:
"#E5E5E5"
)
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
)
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
)
lineFour
.
frame
=
CGRect
(
x
:
10
+
lineThree
.
rightX
,
y
:
62
,
width
:
lineW
,
height
:
6
)
scrollLine
=
UIView
()
...
...
@@ -218,23 +207,6 @@ class TrashContenView: UIView {
}
else
{
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 {
lineOne
.
cornerCut
(
radius
:
2
,
corner
:
.
allCorners
)
lineTwo
.
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
{
...
...
@@ -258,8 +228,6 @@ class TrashContenView: UIView {
scrollLine
.
frame
=
lineTwo
.
frame
case
.
shot
:
scrollLine
.
frame
=
lineThree
.
frame
case
.
chat
:
scrollLine
.
frame
=
lineFour
.
frame
}
getData
()
}
...
...
PhoneManager/Class/Page/Trash/View/TrashDefaultView.swift
View file @
abc95e48
...
...
@@ -103,8 +103,6 @@ class TrashDefaultView: UIView {
case
.
other
,
.
shot
:
jumpToPhotosDetailPage
(
type
:
type
)
break
case
.
chat
:
break
}
}
}
...
...
@@ -113,14 +111,6 @@ class TrashDefaultView: UIView {
self
.
responderViewController
()?
.
dismiss
(
animated
:
true
,
completion
:
{
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
){
self
.
responderViewController
()?
.
dismiss
(
animated
:
true
,
completion
:
{
...
...
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