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
ca1f9038
Commit
ca1f9038
authored
Apr 09, 2025
by
CZ1004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
首页数据加载+详情
parent
c81e34c9
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
949 additions
and
189 deletions
+949
-189
Contents.json
...Assets.xcassets/Home/btn_play_home.imageset/Contents.json
+23
-0
btn_play_home.png
...ts.xcassets/Home/btn_play_home.imageset/btn_play_home.png
+0
-0
btn_play_home@2x.png
...xcassets/Home/btn_play_home.imageset/btn_play_home@2x.png
+0
-0
btn_play_home@3x.png
...xcassets/Home/btn_play_home.imageset/btn_play_home@3x.png
+0
-0
ChargeInfoViewController.swift
.../Session/Charge/Controller/ChargeInfoViewController.swift
+1
-0
ChargeViewController.swift
...lass/Session/Charge/Controller/ChargeViewController.swift
+7
-22
ChargeInfoBackView.swift
...anager/Class/Session/Charge/View/ChargeInfoBackView.swift
+1
-1
ChargeView.swift
PhoneManager/Class/Session/Charge/View/ChargeView.swift
+2
-6
HomeInfoViewController.swift
...lass/Session/Home/Controller/HomeInfoViewController.swift
+5
-2
HomeVideoDetailController.swift
...s/Session/Home/Controller/HomeVideoDetailController.swift
+227
-0
HomeViewController.swift
...er/Class/Session/Home/Controller/HomeViewController.swift
+28
-8
HomeInfoView.swift
PhoneManager/Class/Session/Home/View/HomeInfoView.swift
+12
-3
HomeVideoDetailCustomHeaderView.swift
...s/Session/Home/View/HomeVideoDetailCustomHeaderView.swift
+200
-0
HomeView.swift
PhoneManager/Class/Session/Home/View/HomeView.swift
+16
-6
HomePhotosModel .swift
...ager/Class/Session/Home/View/Model/HomePhotosModel .swift
+134
-114
ImageSeletedCollectionItem.swift
.../Session/Home/View/Model/ImageSeletedCollectionItem.swift
+1
-0
VideoDetaiNavView.swift
PhoneManager/Class/Session/Home/View/VideoDetaiNavView.swift
+63
-0
HomeInfoTableViewCell.swift
.../Class/Session/Home/View/cell/HomeInfoTableViewCell.swift
+2
-1
HomeOtherCollectionCell.swift
...lass/Session/Home/View/cell/HomeOtherCollectionCell.swift
+43
-8
HomeTitleCollectionCell.swift
...lass/Session/Home/View/cell/HomeTitleCollectionCell.swift
+4
-1
HomeVideoDetailCell.swift
...er/Class/Session/Home/View/cell/HomeVideoDetailCell.swift
+136
-0
ImageCollectionCell.swift
...er/Class/Session/Home/View/cell/ImageCollectionCell.swift
+1
-1
ImageSeletedCollectionCell.swift
...s/Session/Home/View/cell/ImageSeletedCollectionCell.swift
+43
-16
No files found.
PhoneManager/Assets.xcassets/Home/btn_play_home.imageset/Contents.json
0 → 100644
View file @
ca1f9038
{
"images"
:
[
{
"filename"
:
"btn_play_home.png"
,
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"btn_play_home@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"btn_play_home@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
PhoneManager/Assets.xcassets/Home/btn_play_home.imageset/btn_play_home.png
0 → 100644
View file @
ca1f9038
1.34 KB
PhoneManager/Assets.xcassets/Home/btn_play_home.imageset/btn_play_home@2x.png
0 → 100644
View file @
ca1f9038
2.64 KB
PhoneManager/Assets.xcassets/Home/btn_play_home.imageset/btn_play_home@3x.png
0 → 100644
View file @
ca1f9038
3.73 KB
PhoneManager/Class/Session/Charge/Controller/ChargeInfoViewController.swift
View file @
ca1f9038
...
@@ -39,6 +39,7 @@ class ChargeInfoViewController:BaseViewController {
...
@@ -39,6 +39,7 @@ class ChargeInfoViewController:BaseViewController {
lazy
var
backImageView
:
ChargeInfoBackView
=
{
lazy
var
backImageView
:
ChargeInfoBackView
=
{
let
sview
:
ChargeInfoBackView
=
ChargeInfoBackView
(
frame
:
view
.
bounds
,
model
:
self
.
model
!
)
let
sview
:
ChargeInfoBackView
=
ChargeInfoBackView
(
frame
:
view
.
bounds
,
model
:
self
.
model
!
)
sview
.
model
=
self
.
model
return
sview
return
sview
}()
}()
...
...
PhoneManager/Class/Session/Charge/Controller/ChargeViewController.swift
View file @
ca1f9038
...
@@ -29,28 +29,6 @@ class ChargeViewController:BaseViewController {
...
@@ -29,28 +29,6 @@ class ChargeViewController:BaseViewController {
let
sview
:
ChargeView
=
ChargeView
(
frame
:
CGRect
(
x
:
0
,
y
:
cY
,
width
:
view
.
width
,
height
:
view
.
height
-
cY
))
let
sview
:
ChargeView
=
ChargeView
(
frame
:
CGRect
(
x
:
0
,
y
:
cY
,
width
:
view
.
width
,
height
:
view
.
height
-
cY
))
sview
.
callBack
=
{[
weak
self
]
model
in
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
if
let
cModel
=
model
as?
ChargeDataModel
{
sview
.
callOrder
=
{[
weak
self
]
flag
in
guard
let
self
else
{
return
}
let
vc
:
ChargeInfoViewController
=
ChargeInfoViewController
(
model
:
cModel
,
type
:
ChargeInfoViewController
.
ChargeInfoType
.
setting
)
vc
.
flag
=
flag
as?
Int
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
}
}
return
sview
return
sview
}()
}()
...
@@ -63,6 +41,13 @@ class ChargeViewController:BaseViewController {
...
@@ -63,6 +41,13 @@ class ChargeViewController:BaseViewController {
titleView
.
addSubview
(
detailsBtn
)
titleView
.
addSubview
(
detailsBtn
)
view
.
addSubview
(
chargeView
)
view
.
addSubview
(
chargeView
)
self
.
chargeView
.
clickCallBack
=
{[
weak
self
]
model
,
row
in
guard
let
self
else
{
return
}
let
vc
:
ChargeInfoViewController
=
ChargeInfoViewController
(
model
:
model
,
type
:
ChargeInfoViewController
.
ChargeInfoType
.
setting
)
vc
.
flag
=
row
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
}
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
...
...
PhoneManager/Class/Session/Charge/View/ChargeInfoBackView.swift
View file @
ca1f9038
...
@@ -56,7 +56,7 @@ class ChargeInfoBackView:UIView {
...
@@ -56,7 +56,7 @@ class ChargeInfoBackView:UIView {
setupUI
()
setupUI
()
self
.
videoPlayView
.
playVideo
(
with
:
self
.
model
!
.
url
)
self
.
videoPlayView
.
playVideo
(
with
:
model
.
url
)
setupTimeUpdates
()
setupTimeUpdates
()
...
...
PhoneManager/Class/Session/Charge/View/ChargeView.swift
View file @
ca1f9038
...
@@ -10,9 +10,7 @@ import AVFoundation
...
@@ -10,9 +10,7 @@ import AVFoundation
class
ChargeView
:
UIView
{
class
ChargeView
:
UIView
{
var
callBack
:
callBack
<
Any
>
=
{
model
in
}
var
clickCallBack
:
(
ChargeDataModel
,
Int
)
->
Void
=
{
model
,
index
in
}
var
callOrder
:
callBack
<
Any
>
=
{
flag
in
}
let
footerID
:
String
=
"footerID"
let
footerID
:
String
=
"footerID"
...
@@ -101,9 +99,7 @@ extension ChargeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UIC
...
@@ -101,9 +99,7 @@ extension ChargeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UIC
let
model
=
models
[
indexPath
.
row
]
let
model
=
models
[
indexPath
.
row
]
self
.
callBack
(
model
)
self
.
clickCallBack
(
model
,
indexPath
.
row
)
self
.
callOrder
(
indexPath
.
row
)
}
}
...
...
PhoneManager/Class/Session/Home/Controller/HomeInfoViewController.swift
View file @
ca1f9038
...
@@ -37,7 +37,7 @@ class HomeInfoViewController:BaseViewController {
...
@@ -37,7 +37,7 @@ class HomeInfoViewController:BaseViewController {
let
cY
:
CGFloat
=
titleView
.
y
+
titleView
.
height
let
cY
:
CGFloat
=
titleView
.
y
+
titleView
.
height
let
sview
:
HomeInfoView
=
HomeInfoView
(
frame
:
CGRect
(
x
:
0
,
y
:
cY
,
width
:
view
.
width
,
height
:
view
.
height
-
cY
),
ids
:
ids
,
type
:
self
.
type
)
let
sview
:
HomeInfoView
=
HomeInfoView
(
frame
:
CGRect
(
x
:
0
,
y
:
cY
,
width
:
view
.
width
,
height
:
view
.
height
-
cY
),
ids
:
ids
,
type
:
self
.
type
,
titleText
:
titleText
)
sview
.
callBack
=
{[
weak
self
]
isSeleted
in
sview
.
callBack
=
{[
weak
self
]
isSeleted
in
...
@@ -91,9 +91,12 @@ class HomeInfoViewController:BaseViewController {
...
@@ -91,9 +91,12 @@ class HomeInfoViewController:BaseViewController {
var
ids
:
[[
String
]]?
var
ids
:
[[
String
]]?
init
(
ids
:
[[
String
]],
type
:
PhotsFileType
?)
{
var
titleText
:
String
?
init
(
ids
:
[[
String
]],
type
:
PhotsFileType
?,
titleText
:
String
)
{
self
.
ids
=
ids
self
.
ids
=
ids
self
.
type
=
type
self
.
type
=
type
self
.
titleText
=
titleText
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
}
}
...
...
PhoneManager/Class/Session/Home/Controller/HomeVideoDetailController.swift
0 → 100644
View file @
ca1f9038
//
// HomeVideoDetailController.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import
Foundation
class
HomeVideoDetailController
:
BaseViewController
{
private
var
videoDetailNavView
:
VideoDetaiNavView
?
var
model
:
HomePhotosModel
?
{
didSet
{
self
.
collectionView
.
reloadData
()
}
}
// 排序
var
currentSort
:
Int
=
0
{
didSet
{
clearSelected
()
}
}
// 资源类型 - 相册或者视频
var
currentResourceType
:
Int
=
0
// 所有的数据
var
resourceData
=
[
HomePhotosModel
](){
didSet
{
DispatchQueue
.
main
.
async
{
self
.
collectionView
.
reloadData
()
}
}
}
// 当前页面选中的
var
selectedModel
:
[
ResourceModel
]
=
[]
lazy
var
collectionView
:
UICollectionView
=
{
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
-
102
),
collectionViewLayout
:
layout
)
sview
.
register
(
HomeVideoDetailCell
.
self
,
forCellWithReuseIdentifier
:
"HomeVideoDetailCell"
)
sview
.
register
(
HomeVideoDetailCustomHeaderView
.
self
,
forSupplementaryViewOfKind
:
UICollectionView
.
elementKindSectionHeader
,
withReuseIdentifier
:
"HomeVideoDetailCustomHeaderView"
)
sview
.
register
(
UICollectionReusableView
.
self
,
forSupplementaryViewOfKind
:
UICollectionView
.
elementKindSectionFooter
,
withReuseIdentifier
:
"footerID"
)
sview
.
dataSource
=
self
sview
.
delegate
=
self
sview
.
showsVerticalScrollIndicator
=
false
if
#available(iOS 11.0, *)
{
sview
.
contentInsetAdjustmentBehavior
=
.
never
}
sview
.
backgroundColor
=
.
clear
return
sview
}()
lazy
var
deleteButton
:
UIButton
=
{
let
view
=
UIButton
()
view
.
backgroundColor
=
UIColor
(
red
:
0.7
,
green
:
0.7
,
blue
:
0.7
,
alpha
:
1
)
view
.
setTitle
(
"Delete"
,
for
:
UIControl
.
State
.
normal
)
view
.
setTitleColor
(
UIColor
(
red
:
1
,
green
:
1
,
blue
:
1
,
alpha
:
1
),
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
}()
func
setUI
(){
videoDetailNavView
=
VideoDetaiNavView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
self
.
view
.
width
,
height
:
statusBarHeight
+
44
))
self
.
view
.
addSubview
(
videoDetailNavView
!
)
videoDetailNavView
?
.
snp
.
makeConstraints
({
make
in
make
.
top
.
centerX
.
width
.
equalToSuperview
()
make
.
height
.
equalTo
(
statusBarHeight
+
44
)
})
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
)
make
.
left
.
equalToSuperview
()
.
offset
(
15
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
15
)
make
.
height
.
equalTo
(
46
)
}
}
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
view
.
backgroundColor
=
.
white
self
.
navigationController
?
.
navigationBar
.
isHidden
=
true
setUI
()
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
// 目的是为了消除cell 的选择按钮状态
if
self
.
selectedModel
.
count
==
0
{
self
.
collectionView
.
reloadData
()
}
}
}
extension
HomeVideoDetailController
:
WaterfallMutiSectionDelegate
,
UICollectionViewDataSource
,
UICollectionViewDelegate
{
func
numberOfSections
(
in
collectionView
:
UICollectionView
)
->
Int
{
return
1
}
func
collectionView
(
_
collectionView
:
UICollectionView
,
numberOfItemsInSection
section
:
Int
)
->
Int
{
return
self
.
resourceData
.
count
}
func
collectionView
(
_
collectionView
:
UICollectionView
,
cellForItemAt
indexPath
:
IndexPath
)
->
UICollectionViewCell
{
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
"CompressSelectCell"
,
for
:
indexPath
)
as!
CompressSelectCell
return
cell
}
func
heightForRowAtIndexPath
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
indexPath
:
IndexPath
,
itemWidth
:
CGFloat
)
->
CGFloat
{
return
itemWidth
}
func
columnNumber
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
Int
{
return
2
}
func
lineSpacing
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
CGFloat
{
return
8
}
func
interitemSpacing
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
CGFloat
{
return
11
}
func
spacingWithLastSection
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
CGFloat
{
return
8
}
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
}
func
referenceSizeForHeader
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
CGSize
{
return
CGSize
(
width
:
self
.
collectionView
.
width
,
height
:
168
)
}
func
collectionView
(
_
collectionView
:
UICollectionView
,
viewForSupplementaryElementOfKind
kind
:
String
,
at
indexPath
:
IndexPath
)
->
UICollectionReusableView
{
if
kind
==
UICollectionView
.
elementKindSectionHeader
{
let
header
=
collectionView
.
dequeueReusableSupplementaryView
(
ofKind
:
kind
,
withReuseIdentifier
:
"HomeVideoDetailCustomHeaderView"
,
for
:
indexPath
)
as!
HomeVideoDetailCustomHeaderView
return
header
}
else
{
let
footer
=
collectionView
.
dequeueReusableSupplementaryView
(
ofKind
:
kind
,
withReuseIdentifier
:
"footerID"
,
for
:
indexPath
)
return
footer
}
}
func
sortByType
(
sortType
:
Int
,
header
:
CompressCustomHeaderView
){
switch
sortType
{
case
0
:
header
.
selectlabel
.
text
=
"Largest"
// 按照文件大小降序
break
case
1
:
header
.
selectlabel
.
text
=
"Smallest"
// 按照文件大小升序
break
case
2
:
header
.
selectlabel
.
text
=
"Newest"
// 按照时间降序
break
case
3
:
header
.
selectlabel
.
text
=
"Oldest"
// 按照时间升序
break
default
:
break
}
}
@objc
func
deleteButtonAction
(){
// 然后清理下当前页面的值
clearSelected
()
}
func
clearSelected
()
{
self
.
selectedModel
.
removeAll
()
}
}
PhoneManager/Class/Session/Home/Controller/HomeViewController.swift
View file @
ca1f9038
...
@@ -22,17 +22,37 @@ class HomeViewController:BaseViewController {
...
@@ -22,17 +22,37 @@ class HomeViewController:BaseViewController {
homeView
=
HomeView
(
frame
:
view
.
bounds
)
homeView
=
HomeView
(
frame
:
view
.
bounds
)
homeView
?
.
titleCallBack
=
{[
weak
self
]
array
in
homeView
?
.
titleCallBack
=
{[
weak
self
]
model
,
type
in
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
async
{
let
vc
:
HomeInfoViewController
=
HomeInfoViewController
(
ids
:
model
.
assets
,
type
:
type
,
titleText
:
model
.
folderName
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
let
vc
:
HomeInfoViewController
=
HomeInfoViewController
(
ids
:
array
as!
[[
String
]],
type
:
.
similar
)
homeView
?
.
otherItemCallBack
=
{[
weak
self
]
model
,
otherItemRow
in
guard
let
self
else
{
return
}
if
otherItemRow
==
0
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomeVideoDetailController
=
HomeVideoDetailController
()
vc
.
model
=
model
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
if
otherItemRow
==
1
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomeInfoViewController
=
HomeInfoViewController
(
ids
:
model
.
assets
,
type
:
.
similarScreenshots
,
titleText
:
model
.
folderName
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
}
}
if
otherItemRow
==
3
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomeInfoViewController
=
HomeInfoViewController
(
ids
:
model
.
assets
,
type
:
.
SimilarVideos
,
titleText
:
model
.
folderName
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
}
homeView
?
.
indexCallBack
=
{[
weak
self
]
index
in
homeView
?
.
indexCallBack
=
{[
weak
self
]
index
in
...
...
PhoneManager/Class/Session/Home/View/HomeInfoView.swift
View file @
ca1f9038
...
@@ -11,6 +11,10 @@ class HomeInfoView :UIView{
...
@@ -11,6 +11,10 @@ class HomeInfoView :UIView{
var
ids
:[[
String
]]?
var
ids
:[[
String
]]?
var
titleText
:
String
?
var
type
:
PhotsFileType
?
var
models
:[
HomeInfoTableItem
]
=
[]
var
models
:[
HomeInfoTableItem
]
=
[]
var
callBack
:
callBack
<
Any
>
=
{
text
in
}
var
callBack
:
callBack
<
Any
>
=
{
text
in
}
...
@@ -39,6 +43,8 @@ class HomeInfoView :UIView{
...
@@ -39,6 +43,8 @@ class HomeInfoView :UIView{
let
sview
:
HomeInfoTitleView
=
HomeInfoTitleView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
width
,
height
:
84
))
let
sview
:
HomeInfoTitleView
=
HomeInfoTitleView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
width
,
height
:
84
))
sview
.
titleLabel
.
text
=
self
.
titleText
return
sview
return
sview
}()
}()
...
@@ -66,9 +72,11 @@ class HomeInfoView :UIView{
...
@@ -66,9 +72,11 @@ class HomeInfoView :UIView{
return
sview
return
sview
}()
}()
init
(
frame
:
CGRect
,
ids
:[[
String
]]?,
type
:
PhotsFileType
?)
{
init
(
frame
:
CGRect
,
ids
:[[
String
]]?,
type
:
PhotsFileType
?
,
titleText
:
String
?
)
{
self
.
ids
=
ids
self
.
ids
=
ids
self
.
titleText
=
titleText
self
.
type
=
type
for
array
in
ids
??
[]
{
for
array
in
ids
??
[]
{
...
@@ -87,6 +95,7 @@ class HomeInfoView :UIView{
...
@@ -87,6 +95,7 @@ class HomeInfoView :UIView{
let
smodel
=
HomeInfoTableItem
()
let
smodel
=
HomeInfoTableItem
()
smodel
.
type
=
type
smodel
.
type
=
type
smodel
.
smodels
=
smodels
smodel
.
smodels
=
smodels
smodel
.
titleText
=
titleText
models
.
append
(
smodel
)
models
.
append
(
smodel
)
}
}
...
@@ -210,9 +219,9 @@ class HomeInfoView :UIView{
...
@@ -210,9 +219,9 @@ class HomeInfoView :UIView{
}
}
}
}
headerView
.
changeContent
(
title
:
PhotsFileType
.
duplicates
.
rawValue
,
allNumber
:
number
,
seletedCount
:
seletedNumber
)
headerView
.
changeContent
(
title
:
self
.
type
!
.
rawValue
,
allNumber
:
number
,
seletedCount
:
seletedNumber
)
deleteView
.
changeContent
(
title
:
PhotsFileType
.
duplicates
.
rawValue
,
seletedCount
:
seletedNumber
)
deleteView
.
changeContent
(
title
:
self
.
type
!
.
rawValue
,
seletedCount
:
seletedNumber
)
tableView
.
contentInset
=
UIEdgeInsets
(
top
:
0
,
left
:
0
,
bottom
:
deleteView
.
isHidden
?
12
:
deleteView
.
height
+
12
,
right
:
0
)
tableView
.
contentInset
=
UIEdgeInsets
(
top
:
0
,
left
:
0
,
bottom
:
deleteView
.
isHidden
?
12
:
deleteView
.
height
+
12
,
right
:
0
)
}
}
...
...
PhoneManager/Class/Session/Home/View/HomeVideoDetailCustomHeaderView.swift
0 → 100644
View file @
ca1f9038
//
// HomeVideoDetailCustomHeaderView.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import
Foundation
class
HomeVideoDetailCustomHeaderView
:
UICollectionReusableView
{
lazy
var
modelTitlelabel
:
UILabel
=
{
let
label
=
UILabel
()
label
.
text
=
"Videos"
label
.
textAlignment
=
.
left
label
.
textColor
=
UIColor
(
red
:
0.2
,
green
:
0.2
,
blue
:
0.2
,
alpha
:
1
)
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
return
view
}()
lazy
var
selectImageView
:
UIImageView
=
{
let
view
=
UIImageView
()
view
.
image
=
UIImage
(
named
:
"ic_newest_similar"
)
return
view
}()
lazy
var
selectlabel
:
UILabel
=
{
let
label
=
UILabel
()
label
.
text
=
"Largest"
label
.
textAlignment
=
.
center
label
.
textColor
=
UIColor
(
red
:
0.2
,
green
:
0.2
,
blue
:
0.2
,
alpha
:
1
)
label
.
font
=
UIFont
.
systemFont
(
ofSize
:
14
,
weight
:
.
bold
)
return
label
}()
lazy
var
sizeLabel
:
UILabel
=
{
let
label
=
UILabel
()
label
.
text
=
"1.02 GB"
label
.
textAlignment
=
.
left
label
.
textColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
label
.
font
=
UIFont
.
systemFont
(
ofSize
:
14
,
weight
:
.
regular
)
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
:
"ic_cmpress_home_nor"
)
return
view
}()
private
func
setUI
(){
self
.
addSubview
(
self
.
modelTitlelabel
)
self
.
addSubview
(
self
.
btnView
)
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
)
make
.
width
.
equalTo
(
96
*
RScreenW
())
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
.
height
.
equalTo
(
20
)
}
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
(
120
*
RScreenW
())
make
.
height
.
equalTo
(
28
)
make
.
top
.
equalToSuperview
()
.
offset
(
5
)
}
self
.
tipDetailLabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
self
.
tipImageView
.
snp
.
right
)
.
offset
(
10
)
make
.
width
.
equalTo
(
150
*
RScreenW
())
make
.
height
.
equalTo
(
23
)
make
.
top
.
equalTo
(
self
.
tipLabel
.
snp
.
bottom
)
.
offset
(
4
)
}
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
)
{
super
.
init
(
frame
:
frame
)
self
.
backgroundColor
=
.
white
setUI
()
}
required
init
?(
coder
aDecoder
:
NSCoder
)
{
super
.
init
(
coder
:
aDecoder
)
setUI
()
}
}
PhoneManager/Class/Session/Home/View/HomeView.swift
View file @
ca1f9038
...
@@ -16,10 +16,12 @@ class HomeView:UIView {
...
@@ -16,10 +16,12 @@ class HomeView:UIView {
private
var
bottomView
:
UIView
?
private
var
bottomView
:
UIView
?
var
titleCallBack
:
callBack
<
Any
>
=
{
array
in
}
var
titleCallBack
:
(
HomePhotosModel
,
PhotsFileType
)
->
Void
=
{
model
,
type
in
}
var
indexCallBack
:
callBack
<
Any
>
=
{
index
in
}
var
indexCallBack
:
callBack
<
Any
>
=
{
index
in
}
var
otherItemCallBack
:
(
HomePhotosModel
,
Int
)
->
Void
=
{
data
,
otherCellRow
in
}
var
model
:
PhotosManagerModel
?
{
var
model
:
PhotosManagerModel
?
{
didSet
{
didSet
{
...
@@ -236,9 +238,11 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
...
@@ -236,9 +238,11 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
return
cell
return
cell
case
1
:
case
1
:
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
HomeOtherCollectionCell
.
identifier
,
for
:
indexPath
)
as!
HomeOtherCollectionCell
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
HomeOtherCollectionCell
.
identifier
,
for
:
indexPath
)
as!
HomeOtherCollectionCell
cell
.
playImageView
.
isHidden
=
true
cell
.
mediaType
=
0
cell
.
mediaType
=
0
if
indexPath
.
row
==
0
{
if
indexPath
.
row
==
0
||
indexPath
.
row
==
3
{
cell
.
mediaType
=
1
cell
.
mediaType
=
1
cell
.
playImageView
.
isHidden
=
false
}
}
cell
.
model
=
model
?
.
otherModelArray
[
indexPath
.
row
]
cell
.
model
=
model
?
.
otherModelArray
[
indexPath
.
row
]
return
cell
return
cell
...
@@ -307,10 +311,16 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
...
@@ -307,10 +311,16 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
if
(
indexPath
.
section
==
0
)
{
if
(
indexPath
.
section
==
0
)
{
let
smodel
=
model
?
.
titleModelArray
[
indexPath
.
row
]
let
smodel
=
model
?
.
titleModelArray
[
indexPath
.
row
]
if
indexPath
.
row
==
0
{
titleCallBack
(
smodel
!
,
.
duplicates
)
}
else
{
titleCallBack
(
smodel
!
,
.
similar
)
}
titleCallBack
(
smodel
?
.
assets
??
[])
}
else
{
let
smodel
=
model
?
.
otherModelArray
[
indexPath
.
row
]
otherItemCallBack
(
smodel
!
,
indexPath
.
row
)
}
}
}
}
}
}
PhoneManager/Class/Session/Home/View/Model/HomePhotosModel .swift
View file @
ca1f9038
...
@@ -49,9 +49,6 @@ class PhotoDataManager {
...
@@ -49,9 +49,6 @@ class PhotoDataManager {
resultModel
(
model
)
resultModel
(
model
)
}
}
}
}
loadDataFromPhotos
{
model
in
resultModel
(
model
)
}
}
}
private
func
loadDataFromPhotos
(
resultModel
:
@escaping
(
_
model
:
PhotosManagerModel
)
->
()
=
{
mdoel
in
})
{
private
func
loadDataFromPhotos
(
resultModel
:
@escaping
(
_
model
:
PhotosManagerModel
)
->
()
=
{
mdoel
in
})
{
...
@@ -76,10 +73,12 @@ class PhotoDataManager {
...
@@ -76,10 +73,12 @@ class PhotoDataManager {
resultModel
(
allModel
)
resultModel
(
allModel
)
let
semaphore
=
DispatchSemaphore
(
value
:
1
)
let
semaphore
=
DispatchSemaphore
(
value
:
1
)
DispatchQueue
.
global
()
.
async
{
// 重复照片
// 重复照片
semaphore
.
wait
()
semaphore
.
wait
()
Print
(
"正在处理重复图片"
)
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
allAssets
,
threshold
:
0.99
)
{
data
in
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
allAssets
,
threshold
:
0.99
)
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
for
item
in
data
{
for
item
in
data
{
dataArray
=
dataArray
+
item
dataArray
=
dataArray
+
item
...
@@ -90,12 +89,14 @@ class PhotoDataManager {
...
@@ -90,12 +89,14 @@ class PhotoDataManager {
model1
.
assets
=
data
model1
.
assets
=
data
model1
.
allFileSize
=
Double
(
fileSize
)
model1
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
Print
(
"处理重复图片结束"
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
}
}
// 相似照片
// 相似照片
semaphore
.
wait
()
semaphore
.
wait
()
Print
(
"正在处理相似照片"
)
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
allAssets
,
threshold
:
0.85
)
{
data
in
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
allAssets
,
threshold
:
0.85
)
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
...
@@ -108,7 +109,7 @@ class PhotoDataManager {
...
@@ -108,7 +109,7 @@ class PhotoDataManager {
model2
.
assets
=
data
model2
.
assets
=
data
model2
.
allFileSize
=
Double
(
fileSize
)
model2
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
Print
(
"处理相似图片结束"
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
...
@@ -116,6 +117,7 @@ class PhotoDataManager {
...
@@ -116,6 +117,7 @@ class PhotoDataManager {
// 视频数据
// 视频数据
semaphore
.
wait
()
semaphore
.
wait
()
Print
(
"正在处理视频"
)
PhotoAndVideoMananger
.
mananger
.
dealVideoData
{
data
in
PhotoAndVideoMananger
.
mananger
.
dealVideoData
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
for
item
in
data
{
for
item
in
data
{
...
@@ -127,12 +129,14 @@ class PhotoDataManager {
...
@@ -127,12 +129,14 @@ class PhotoDataManager {
model3
.
assets
=
data
model3
.
assets
=
data
model3
.
allFileSize
=
Double
(
fileSize
)
model3
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
Print
(
"处理视频结束"
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
}
}
// 相似截图
// 相似截图
semaphore
.
wait
()
semaphore
.
wait
()
Print
(
"正在处理相似截图"
)
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
screenShotAssets
,
threshold
:
0.85
)
{
data
in
PhotoAndVideoMananger
.
mananger
.
dealSimilarPhotos
(
assets
:
PhotoAndVideoMananger
.
mananger
.
screenShotAssets
,
threshold
:
0.85
)
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
for
item
in
data
{
for
item
in
data
{
...
@@ -144,12 +148,14 @@ class PhotoDataManager {
...
@@ -144,12 +148,14 @@ class PhotoDataManager {
model4
.
assets
=
data
model4
.
assets
=
data
model4
.
allFileSize
=
Double
(
fileSize
)
model4
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
Print
(
"处理相似截图结束"
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
}
}
// 截图数据
// 截图数据
semaphore
.
wait
()
semaphore
.
wait
()
Print
(
"正在处理截图"
)
PhotoAndVideoMananger
.
mananger
.
dealScreenShotData
{
data
in
PhotoAndVideoMananger
.
mananger
.
dealScreenShotData
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
for
item
in
data
{
for
item
in
data
{
...
@@ -161,27 +167,36 @@ class PhotoDataManager {
...
@@ -161,27 +167,36 @@ class PhotoDataManager {
model5
.
assets
=
data
model5
.
assets
=
data
model5
.
allFileSize
=
Double
(
fileSize
)
model5
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
Print
(
"处理截图结束"
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
}
}
// // 相似视频
// 相似视频
// semaphore.wait()
semaphore
.
wait
()
// PhotoAndVideoMananger.mananger.fetXSVideo { array in
Print
(
"正在处理相似视频"
)
// PhotoSimilarityFinder.processSimilarVideoGroups(videoGroups: array) {ids in
PhotoAndVideoMananger
.
mananger
.
fetXSVideo
{
array
in
// PhotoAndVideoMananger.mananger.calculateTotalSize(of: PhotoAndVideoMananger.mananger.imageAssets,progress: { fileSiez, index in
PhotoSimilarityFinder
.
processSimilarVideoGroups
(
videoGroups
:
array
)
{
ids
in
// // 不做处理
// }, completion: { fileSize,index in
var
dataArray
:
[
String
]
=
[]
// model6.assets = ids
for
item
in
ids
{
// model7.allFileSize = Double(fileSize)
dataArray
=
dataArray
+
item
// resultModel(allModel)
}
// })
PhotoAndVideoMananger
.
mananger
.
calculateTotalSize
(
of
:
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithIDs
(
ids
:
dataArray
)
!
,
progress
:
{
fileSiez
,
index
in
// semaphore.signal()
// 不做处理
// }
},
completion
:
{
fileSize
,
index
in
// }
model6
.
assets
=
ids
model6
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
})
Print
(
"处理相似视频结束"
)
semaphore
.
signal
()
}
}
// 照片数据
// 照片数据
semaphore
.
wait
()
semaphore
.
wait
()
PhotoAndVideoMananger
.
mananger
.
dealScreenShotData
{
data
in
Print
(
"正在截图"
)
PhotoAndVideoMananger
.
mananger
.
dealImageAssetData
{
data
in
var
dataArray
:
[
String
]
=
[]
var
dataArray
:
[
String
]
=
[]
for
item
in
data
{
for
item
in
data
{
dataArray
=
dataArray
+
item
dataArray
=
dataArray
+
item
...
@@ -192,11 +207,16 @@ class PhotoDataManager {
...
@@ -192,11 +207,16 @@ class PhotoDataManager {
model7
.
assets
=
data
model7
.
assets
=
data
model7
.
allFileSize
=
Double
(
fileSize
)
model7
.
allFileSize
=
Double
(
fileSize
)
resultModel
(
allModel
)
resultModel
(
allModel
)
// 最后做一下缓存
PhotoDataManager
.
manager
.
saveToFileSystem
(
model
:
allModel
)
})
})
semaphore
.
signal
()
semaphore
.
signal
()
}
}
PhotoDataManager
.
manager
.
saveToFileSystem
(
model
:
allModel
)
}
// PhotoAndVideoMananger.mananger.fetXSOther { array in
// PhotoAndVideoMananger.mananger.fetXSOther { array in
...
...
PhoneManager/Class/Session/Home/View/Model/ImageSeletedCollectionItem.swift
View file @
ca1f9038
...
@@ -20,4 +20,5 @@ class HomeInfoTableItem {
...
@@ -20,4 +20,5 @@ class HomeInfoTableItem {
var
type
:
PhotsFileType
?
var
type
:
PhotsFileType
?
var
smodels
:[
ImageSeletedCollectionItem
]?
var
smodels
:[
ImageSeletedCollectionItem
]?
var
titleText
:
String
?
}
}
PhoneManager/Class/Session/Home/View/VideoDetaiNavView.swift
0 → 100644
View file @
ca1f9038
//
// VideoDetaiNavView.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import
Foundation
class
VideoDetaiNavView
:
UIView
{
private
var
backButton
:
UIButton
!
private
var
selectButton
:
UIButton
!
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
setupUI
()
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
private
func
setupUI
()
{
backgroundColor
=
.
white
backButton
=
UIButton
()
backButton
.
setImage
(
UIImage
(
named
:
"nav_back"
),
for
:
.
normal
)
backButton
.
addTarget
(
self
,
action
:
#selector(
backBtnClick
)
,
for
:
.
touchUpInside
)
self
.
addSubview
(
backButton
)
backButton
.
snp
.
makeConstraints
{
make
in
make
.
centerY
.
equalTo
(
navCenterY
)
make
.
left
.
equalToSuperview
()
.
offset
(
marginLR
)
make
.
width
.
height
.
equalTo
(
iconWH
)
}
selectButton
=
UIButton
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
70
,
height
:
iconWH
))
selectButton
.
setTitle
(
"Select"
,
for
:
.
normal
)
selectButton
.
addTarget
(
self
,
action
:
#selector(
proBtnClick
)
,
for
:
.
touchUpInside
)
self
.
addSubview
(
selectButton
)
selectButton
.
snp
.
makeConstraints
{
make
in
make
.
centerY
.
equalTo
(
navCenterY
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
15
)
make
.
width
.
equalTo
(
70
)
make
.
height
.
equalTo
(
iconWH
)
}
}
@objc
private
func
backBtnClick
()
{
self
.
responderViewController
()?
.
navigationController
?
.
popViewController
(
animated
:
true
)
}
@objc
private
func
proBtnClick
()
{
Print
(
"点击了选择按钮"
)
}
}
PhoneManager/Class/Session/Home/View/cell/HomeInfoTableViewCell.swift
View file @
ca1f9038
...
@@ -98,7 +98,7 @@ class HomeInfoTableViewCell:UITableViewCell {
...
@@ -98,7 +98,7 @@ class HomeInfoTableViewCell:UITableViewCell {
backView
?
.
centerY
=
CGFloat
(
cH
/
2
)
backView
?
.
centerY
=
CGFloat
(
cH
/
2
)
backView
?
.
centerX
=
ScreenW
/
2
backView
?
.
centerX
=
ScreenW
/
2
numberLabel
?
.
text
=
"
\(
model
.
smodels
?
.
count
??
0
)
"
+
"Duplicates
"
numberLabel
?
.
text
=
"
\(
model
.
smodels
?
.
count
??
0
)
\(
String
(
model
.
titleText
!
)
)
"
numberLabel
?
.
sizeToFit
()
numberLabel
?
.
sizeToFit
()
numberLabel
?
.
x
=
(
backView
?
.
x
??
0
)
+
marginLR
numberLabel
?
.
x
=
(
backView
?
.
x
??
0
)
+
marginLR
numberLabel
?
.
y
=
(
backView
?
.
y
??
0
)
+
marginLR
numberLabel
?
.
y
=
(
backView
?
.
y
??
0
)
+
marginLR
...
@@ -192,6 +192,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou
...
@@ -192,6 +192,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
ImageSeletedCollectionCell
.
identifiers
,
for
:
indexPath
)
as!
ImageSeletedCollectionCell
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
ImageSeletedCollectionCell
.
identifiers
,
for
:
indexPath
)
as!
ImageSeletedCollectionCell
cell
.
model
=
model
?
.
smodels
?[
indexPath
.
row
]
cell
.
model
=
model
?
.
smodels
?[
indexPath
.
row
]
cell
.
photsFileType
=
model
?
.
type
cell
.
callBack
=
{[
weak
self
]
_
in
cell
.
callBack
=
{[
weak
self
]
_
in
...
...
PhoneManager/Class/Session/Home/View/cell/HomeOtherCollectionCell.swift
View file @
ca1f9038
...
@@ -26,7 +26,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -26,7 +26,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
let
iv
=
UIView
()
let
iv
=
UIView
()
iv
.
clipsToBounds
=
true
iv
.
clipsToBounds
=
true
iv
.
layer
.
cornerRadius
=
8
iv
.
layer
.
cornerRadius
=
8
iv
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0
.51
,
blue
:
1
,
alpha
:
1
)
iv
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0
,
blue
:
0
,
alpha
:
0.2000
)
return
iv
return
iv
}()
}()
...
@@ -64,6 +64,14 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -64,6 +64,14 @@ class HomeOtherCollectionCell: UICollectionViewCell {
return
label
return
label
}()
}()
var
playImageView
:
UIImageView
=
{
let
iv
=
UIImageView
()
iv
.
contentMode
=
.
scaleAspectFill
iv
.
image
=
UIImage
(
named
:
"btn_play_home"
)
iv
.
backgroundColor
=
.
clear
return
iv
}()
// MARK: - Lifecycle
// MARK: - Lifecycle
override
init
(
frame
:
CGRect
)
{
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
super
.
init
(
frame
:
frame
)
...
@@ -79,6 +87,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -79,6 +87,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
backgroundColor
=
UIColor
.
colorWithHex
(
hexStr
:
"#F2F6FC"
)
backgroundColor
=
UIColor
.
colorWithHex
(
hexStr
:
"#F2F6FC"
)
self
.
contentView
.
addSubview
(
self
.
titleLabel
)
self
.
contentView
.
addSubview
(
self
.
titleLabel
)
self
.
contentView
.
addSubview
(
self
.
imageView
)
self
.
contentView
.
addSubview
(
self
.
imageView
)
self
.
contentView
.
addSubview
(
self
.
playImageView
)
self
.
imageView
.
addSubview
(
self
.
infoBackView
)
self
.
imageView
.
addSubview
(
self
.
infoBackView
)
self
.
infoBackView
.
addSubview
(
self
.
countLabel
)
self
.
infoBackView
.
addSubview
(
self
.
countLabel
)
...
@@ -93,8 +102,31 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -93,8 +102,31 @@ class HomeOtherCollectionCell: UICollectionViewCell {
didSet
{
didSet
{
guard
let
model
else
{
return
}
guard
let
model
else
{
return
}
DispatchQueue
.
main
.
async
{
// 设置标题
self
.
titleLabel
.
text
=
model
.
folderName
// 获取数量
var
count
=
0
for
item
in
model
.
assets
{
count
=
count
+
item
.
count
}
// 设置数量文字
if
self
.
mediaType
==
0
{
self
.
countLabel
.
text
=
"
\(
count
)
Photos"
}
else
{
self
.
countLabel
.
text
=
"
\(
count
)
Videos"
}
// 设置文件大小文字
let
sizeKB
:
Double
=
model
.
allFileSize
/
1024
if
sizeKB
<
1024
{
self
.
sizeLabel
.
text
=
String
(
format
:
"(%.2lf) KB"
,
sizeKB
)
}
else
if
sizeKB
<
(
1024
*
1024
)
&&
sizeKB
>
1024
{
self
.
sizeLabel
.
text
=
String
(
format
:
"(%.2lf) MB"
,
sizeKB
/
1024
)
}
else
{
self
.
sizeLabel
.
text
=
String
(
format
:
"(%.2lf) GB"
,
sizeKB
/
(
1024
*
1024
))
}
}
titleLabel
.
text
=
model
.
folderName
guard
let
asset
=
model
.
assets
.
first
?
.
first
else
{
return
}
guard
let
asset
=
model
.
assets
.
first
?
.
first
else
{
return
}
if
self
.
mediaType
==
0
{
if
self
.
mediaType
==
0
{
...
@@ -158,19 +190,22 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -158,19 +190,22 @@ class HomeOtherCollectionCell: UICollectionViewCell {
self
.
layer
.
masksToBounds
=
true
self
.
layer
.
masksToBounds
=
true
imageView
.
snp
.
makeConstraints
{
make
in
imageView
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
(
)
make
.
top
.
equalTo
(
self
.
titleLabel
.
snp
.
bottom
)
.
offset
(
8
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
16
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
16
)
make
.
left
.
equalToSuperview
()
.
offset
(
16
)
make
.
width
.
equalToSuperview
()
.
offset
(
-
32
)
make
.
width
.
equalToSuperview
()
.
offset
(
-
32
)
make
.
height
.
equalTo
(
self
.
width
-
32
)
make
.
height
.
equalTo
(
self
.
width
-
32
)
}
}
self
.
infoBackView
.
snp
.
makeConstraints
{
make
in
self
.
infoBackView
.
snp
.
makeConstraints
{
make
in
make
.
right
.
bottom
.
equalToSuperview
()
make
.
left
.
right
.
bottom
.
equalToSuperview
()
make
.
height
.
equalTo
(
40
)
make
.
height
.
equalTo
(
40
)
make
.
width
.
equalTo
(
114
)
}
}
self
.
playImageView
.
snp
.
makeConstraints
{
make
in
make
.
width
.
height
.
equalTo
(
43
)
make
.
center
.
equalTo
(
self
.
imageView
.
snp
.
center
)
}
titleLabel
.
snp
.
makeConstraints
{
make
in
titleLabel
.
snp
.
makeConstraints
{
make
in
...
@@ -180,7 +215,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
...
@@ -180,7 +215,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
self
.
countLabel
.
snp
.
makeConstraints
{
make
in
self
.
countLabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
.
offset
(
12
)
make
.
left
.
equalToSuperview
()
.
offset
(
12
)
make
.
top
.
equalToSuperview
()
.
offset
(
4
)
make
.
top
.
equalToSuperview
()
.
offset
(
3
)
make
.
width
.
equalTo
(
68
)
make
.
width
.
equalTo
(
68
)
make
.
height
.
equalTo
(
20
)
make
.
height
.
equalTo
(
20
)
}
}
...
...
PhoneManager/Class/Session/Home/View/cell/HomeTitleCollectionCell.swift
View file @
ca1f9038
...
@@ -40,6 +40,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
...
@@ -40,6 +40,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
self
.
layer
.
cornerRadius
=
12
self
.
layer
.
cornerRadius
=
12
self
.
layer
.
masksToBounds
=
true
self
.
layer
.
masksToBounds
=
true
titleLabel
=
UILabel
()
titleLabel
=
UILabel
()
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
16
,
weight
:
.
bold
)
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
16
,
weight
:
.
bold
)
titleLabel
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black3Color
)
titleLabel
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black3Color
)
...
@@ -64,7 +65,9 @@ class HomeTitleCollectionCell:UICollectionViewCell {
...
@@ -64,7 +65,9 @@ class HomeTitleCollectionCell:UICollectionViewCell {
collectionView
?
.
dataSource
=
self
collectionView
?
.
dataSource
=
self
collectionView
?
.
delegate
=
self
collectionView
?
.
delegate
=
self
collectionView
?
.
isUserInteractionEnabled
=
true
self
.
contentView
.
isUserInteractionEnabled
=
true
self
.
isUserInteractionEnabled
=
true
nextImage
=
UIImageView
(
image
:
UIImage
(
named
:
"icon_left_setting"
))
nextImage
=
UIImageView
(
image
:
UIImage
(
named
:
"icon_left_setting"
))
}
}
...
...
PhoneManager/Class/Session/Home/View/cell/HomeVideoDetailCell.swift
0 → 100644
View file @
ca1f9038
//
// HomeVideoDetailCell.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import
Foundation
import
Photos
class
HomeVideoDetailCell
:
UICollectionViewCell
{
var
currentMediaType
:
Int
=
0
var
choose
:
Bool
=
false
{
didSet
{
if
choose
{
self
.
selectImageView
.
image
=
UIImage
(
named
:
"ic_unsel_com"
)
}
else
{
self
.
selectImageView
.
image
=
UIImage
(
named
:
"ic_sel_com"
)
}
}
}
lazy
var
backImageView
:
UIImageView
=
{
let
view
=
UIImageView
()
view
.
isUserInteractionEnabled
=
true
view
.
contentMode
=
.
scaleAspectFill
view
.
clipsToBounds
=
true
view
.
layer
.
masksToBounds
=
true
view
.
layer
.
cornerRadius
=
12
return
view
}()
lazy
var
saveSizeView
:
UIView
=
{
let
view
=
UIView
()
view
.
layer
.
masksToBounds
=
true
view
.
layer
.
cornerRadius
=
4
view
.
backgroundColor
=
UIColor
(
red
:
0
,
green
:
0.51
,
blue
:
1
,
alpha
:
1
)
return
view
}()
lazy
var
saveSizeLabel
:
UILabel
=
{
let
view
=
UILabel
()
view
.
textAlignment
=
.
left
view
.
textColor
=
UIColor
(
red
:
1
,
green
:
1
,
blue
:
1
,
alpha
:
1
)
view
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
regular
)
view
.
text
=
"Save 1.3MB"
return
view
}()
lazy
var
moreImageView
:
UIImageView
=
{
let
view
=
UIImageView
()
view
.
image
=
UIImage
(
named
:
"icon_left_setting_grey"
)
view
.
backgroundColor
=
.
clear
return
view
}()
lazy
var
selectImageView
:
UIImageView
=
{
let
view
=
UIImageView
()
view
.
image
=
UIImage
(
named
:
"ic_sel_com"
)
view
.
backgroundColor
=
.
clear
view
.
isUserInteractionEnabled
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
selectClick
)
)
view
.
addGestureRecognizer
(
tap
)
return
view
}()
@objc
func
selectClick
(){
self
.
choose
=
!
self
.
choose
}
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
self
.
isUserInteractionEnabled
=
true
let
tap
=
UITapGestureRecognizer
()
tap
.
addTarget
(
self
,
action
:
#selector(
imageClick
)
)
self
.
addGestureRecognizer
(
tap
)
self
.
addSubview
(
self
.
backImageView
)
self
.
addSubview
(
self
.
saveSizeView
)
self
.
saveSizeView
.
addSubview
(
self
.
saveSizeLabel
)
self
.
saveSizeView
.
addSubview
(
self
.
moreImageView
)
self
.
addSubview
(
self
.
selectImageView
)
self
.
backImageView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
right
.
height
.
width
.
equalToSuperview
()
}
self
.
saveSizeView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
.
offset
(
12
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
12
)
make
.
height
.
equalTo
(
25
)
make
.
width
.
equalTo
(
120
)
}
self
.
saveSizeLabel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
.
offset
(
8
)
make
.
centerY
.
equalToSuperview
()
make
.
height
.
equalTo
(
25
)
make
.
width
.
equalTo
(
105
)
}
self
.
moreImageView
.
snp
.
makeConstraints
{
make
in
make
.
right
.
equalToSuperview
()
.
offset
(
-
4
)
make
.
centerY
.
equalToSuperview
()
make
.
height
.
width
.
equalTo
(
16
)
}
self
.
selectImageView
.
snp
.
makeConstraints
{
make
in
make
.
bottom
.
right
.
equalToSuperview
()
.
offset
(
-
12
)
make
.
height
.
width
.
equalTo
(
24
)
}
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
@objc
func
imageClick
(){
}
}
PhoneManager/Class/Session/Home/View/cell/ImageCollectionCell.swift
View file @
ca1f9038
...
@@ -57,7 +57,7 @@ class ImageCollectionCell:UICollectionViewCell {
...
@@ -57,7 +57,7 @@ class ImageCollectionCell:UICollectionViewCell {
backImageView
?
.
contentMode
=
.
scaleAspectFill
backImageView
?
.
contentMode
=
.
scaleAspectFill
backImageView
?
.
clipsToBounds
=
true
backImageView
?
.
clipsToBounds
=
true
backImageView
?
.
layer
.
masksToBounds
=
true
backImageView
?
.
layer
.
masksToBounds
=
true
backImageView
?
.
isUserInteractionEnabled
=
true
self
.
backgroundColor
=
.
clear
self
.
backgroundColor
=
.
clear
}
}
...
...
PhoneManager/Class/Session/Home/View/cell/ImageSeletedCollectionCell.swift
View file @
ca1f9038
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
import
UIKit
import
UIKit
import
SnapKit
import
SnapKit
import
Photos
class
ImageSeletedCollectionCell
:
UICollectionViewCell
{
class
ImageSeletedCollectionCell
:
UICollectionViewCell
{
...
@@ -29,6 +30,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
...
@@ -29,6 +30,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
required
init
?(
coder
:
NSCoder
)
{
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
fatalError
(
"init(coder:) has not been implemented"
)
}
}
var
photsFileType
:
PhotsFileType
?
var
model
:
ImageSeletedCollectionItem
!
{
var
model
:
ImageSeletedCollectionItem
!
{
...
@@ -55,11 +57,39 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
...
@@ -55,11 +57,39 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
}
else
{
}
else
{
DispatchQueue
.
global
()
.
async
{[
weak
self
]
in
DispatchQueue
.
global
()
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
guard
let
self
else
{
return
}
// 如果是图片
if
let
asset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
model
.
id
])
{
if
self
.
photsFileType
==
.
SimilarVideos
{
// 定义请求选项来获取视频的第一帧
let
options
=
PHImageRequestOptions
()
// 获取当前版本的照片或视频
options
.
version
=
.
current
// 尽可能快地提供结果
options
.
deliveryMode
=
.
opportunistic
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
false
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
model
.
id
]){
// 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager
.
default
()
.
requestImage
(
for
:
videoAsset
,
targetSize
:
CGSize
(
width
:
400
,
height
:
400
),
contentMode
:
PHImageContentMode
.
aspectFit
,
options
:
options
)
{
image
,
_
in
// 处理获取到的图片
if
let
thumbnailImage
=
image
{
// 使用获取到的图片,例如显示在UIImageView上
DispatchQueue
.
main
.
async
{
[
weak
self
]
in
guard
let
self
else
{
return
}
// 确保在主线程更新UI
self
.
model
.
image
=
thumbnailImage
self
.
backImageView
?
.
image
=
thumbnailImage
}
}
else
{
print
(
"无法获取图片"
)
}
}
}
}
else
{
if
let
asset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
model
.
id
]){
let
image
=
PhotoAndVideoMananger
.
mananger
.
getImageFromAsset
(
asset
:
asset
)
let
image
=
PhotoAndVideoMananger
.
mananger
.
getImageFromAsset
(
asset
:
asset
)
model
.
image
=
image
model
.
image
=
image
...
@@ -73,11 +103,8 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
...
@@ -73,11 +103,8 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
}
}
}
}
}
}
}
}
}
}
}
}
}
...
...
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