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
7e28f310
Commit
7e28f310
authored
Apr 25, 2025
by
CZ1004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【优化】优化首页,修复BUG
parent
3c8b6e2a
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
312 additions
and
152 deletions
+312
-152
Contents.json
...ssets/Home/img_photo__home_defpage.imageset/Contents.json
+23
-0
img_photo__home_defpage.png
..._photo__home_defpage.imageset/img_photo__home_defpage.png
+0
-0
img_photo__home_defpage@2x.png
...oto__home_defpage.imageset/img_photo__home_defpage@2x.png
+0
-0
img_photo__home_defpage@3x.png
...oto__home_defpage.imageset/img_photo__home_defpage@3x.png
+0
-0
Contents.json
...ts.xcassets/Home/img_vedio_defpage.imageset/Contents.json
+23
-0
img_vedio_defpage.png
...ets/Home/img_vedio_defpage.imageset/img_vedio_defpage.png
+0
-0
img_vedio_defpage@2x.png
.../Home/img_vedio_defpage.imageset/img_vedio_defpage@2x.png
+0
-0
img_vedio_defpage@3x.png
.../Home/img_vedio_defpage.imageset/img_vedio_defpage@3x.png
+0
-0
LaunchScreen.storyboard
PhoneManager/Base.lproj/LaunchScreen.storyboard
+0
-16
HomeInfoViewController.swift
...lass/Session/Home/Controller/HomeInfoViewController.swift
+43
-3
HomePhotosDetailViewController.swift
...sion/Home/Controller/HomePhotosDetailViewController.swift
+43
-5
HomeVideoDetailController.swift
...s/Session/Home/Controller/HomeVideoDetailController.swift
+39
-5
HomeViewController.swift
...er/Class/Session/Home/Controller/HomeViewController.swift
+44
-11
HomeInfoView.swift
PhoneManager/Class/Session/Home/View/HomeInfoView.swift
+11
-3
HomeView.swift
PhoneManager/Class/Session/Home/View/HomeView.swift
+16
-77
HomeInfoTableViewCell.swift
.../Class/Session/Home/View/cell/HomeInfoTableViewCell.swift
+5
-3
HomeVideoDetailCell.swift
...er/Class/Session/Home/View/cell/HomeVideoDetailCell.swift
+1
-1
LauchVC.swift
PhoneManager/Class/Session/Lauch/LauchVC.swift
+6
-5
SecretSetViewController.swift
...anager/Class/Session/Secret/SecretSetViewController.swift
+22
-4
SecretViewController.swift
PhoneManager/Class/Session/Secret/SecretViewController.swift
+27
-15
PhotoAndVideoMananger.swift
...l/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
+9
-4
No files found.
PhoneManager/Assets.xcassets/Home/img_photo__home_defpage.imageset/Contents.json
0 → 100644
View file @
7e28f310
{
"images"
:
[
{
"filename"
:
"img_photo__home_defpage.png"
,
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"img_photo__home_defpage@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"img_photo__home_defpage@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
PhoneManager/Assets.xcassets/Home/img_photo__home_defpage.imageset/img_photo__home_defpage.png
0 → 100644
View file @
7e28f310
18.2 KB
PhoneManager/Assets.xcassets/Home/img_photo__home_defpage.imageset/img_photo__home_defpage@2x.png
0 → 100644
View file @
7e28f310
61.4 KB
PhoneManager/Assets.xcassets/Home/img_photo__home_defpage.imageset/img_photo__home_defpage@3x.png
0 → 100644
View file @
7e28f310
121 KB
PhoneManager/Assets.xcassets/Home/img_vedio_defpage.imageset/Contents.json
0 → 100644
View file @
7e28f310
{
"images"
:
[
{
"filename"
:
"img_vedio_defpage.png"
,
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"img_vedio_defpage@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"img_vedio_defpage@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
PhoneManager/Assets.xcassets/Home/img_vedio_defpage.imageset/img_vedio_defpage.png
0 → 100644
View file @
7e28f310
19.4 KB
PhoneManager/Assets.xcassets/Home/img_vedio_defpage.imageset/img_vedio_defpage@2x.png
0 → 100644
View file @
7e28f310
65.3 KB
PhoneManager/Assets.xcassets/Home/img_vedio_defpage.imageset/img_vedio_defpage@3x.png
0 → 100644
View file @
7e28f310
129 KB
PhoneManager/Base.lproj/LaunchScreen.storyboard
View file @
7e28f310
...
...
@@ -15,21 +15,8 @@
<view
key=
"view"
contentMode=
"scaleToFill"
id=
"Ze5-6b-2t3"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"393"
height=
"852"
/>
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
<subviews>
<imageView
clipsSubviews=
"YES"
userInteractionEnabled=
"NO"
contentMode=
"scaleAspectFit"
horizontalHuggingPriority=
"251"
verticalHuggingPriority=
"251"
image=
"img_star_start_2.png"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"Whq-17-MfS"
>
<rect
key=
"frame"
x=
"86.333333333333329"
y=
"305.66666666666669"
width=
"188.33333333333337"
height=
"188.66666666666669"
/>
<constraints>
<constraint
firstAttribute=
"width"
secondItem=
"Whq-17-MfS"
secondAttribute=
"height"
multiplier=
"1:1"
id=
"KvZ-kq-6Du"
/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide
key=
"safeArea"
id=
"6Tk-OE-BBY"
/>
<color
key=
"backgroundColor"
red=
"0.0"
green=
"0.50980392156862742"
blue=
"1"
alpha=
"1"
colorSpace=
"calibratedRGB"
/>
<constraints>
<constraint
firstItem=
"Whq-17-MfS"
firstAttribute=
"centerY"
secondItem=
"Ze5-6b-2t3"
secondAttribute=
"centerY"
constant=
"-26"
id=
"eUc-AI-tgC"
/>
<constraint
firstItem=
"Whq-17-MfS"
firstAttribute=
"width"
secondItem=
"Ze5-6b-2t3"
secondAttribute=
"width"
multiplier=
"0.48"
id=
"yGe-jC-RdK"
/>
<constraint
firstItem=
"Whq-17-MfS"
firstAttribute=
"centerX"
secondItem=
"Ze5-6b-2t3"
secondAttribute=
"centerX"
constant=
"-16"
id=
"zVN-dN-0aT"
/>
</constraints>
</view>
</viewController>
<placeholder
placeholderIdentifier=
"IBFirstResponder"
id=
"iYj-Kq-Ea1"
userLabel=
"First Responder"
sceneMemberID=
"firstResponder"
/>
...
...
@@ -37,7 +24,4 @@
<point
key=
"canvasLocation"
x=
"52.671755725190835"
y=
"374.64788732394368"
/>
</scene>
</scenes>
<resources>
<image
name=
"img_star_start_2.png"
width=
"360"
height=
"360"
/>
</resources>
</document>
PhoneManager/Class/Session/Home/Controller/HomeInfoViewController.swift
View file @
7e28f310
...
...
@@ -24,7 +24,6 @@ class HomeInfoViewController:BaseViewController {
btn
.
setTitleColor
(
UIColor
.
colorWithHex
(
hexStr
:
mColor
),
for
:
.
normal
)
btn
.
setTitleColor
(
UIColor
.
colorWithHex
(
hexStr
:
black3Color
),
for
:
.
selected
)
btn
.
titleLabel
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
14
,
weight
:
.
bold
)
btn
.
addTarget
(
self
,
action
:
#selector(
seletedAllBtnClick
)
,
for
:
.
touchUpInside
)
btn
.
layer
.
cornerRadius
=
btn
.
height
/
2
btn
.
layer
.
masksToBounds
=
true
...
...
@@ -103,6 +102,8 @@ class HomeInfoViewController:BaseViewController {
UserDefaults
.
standard
.
set
(
times
,
forKey
:
"saveAdvTimes"
)
}
}
setDefaultPage
()
}
}
...
...
@@ -142,7 +143,9 @@ class HomeInfoViewController:BaseViewController {
}
}
else
{
// 如果小于直接删除
deleteOp
(
imgs
:
array
as!
[
AssetModel
],
isAfterAdv
:
false
)
HomePayViewController
.
show
{
deleteOp
(
imgs
:
array
as!
[
AssetModel
],
isAfterAdv
:
false
)
}
}
}
else
{
...
...
@@ -169,7 +172,9 @@ class HomeInfoViewController:BaseViewController {
}
}
else
{
// 如果只是一张,直接删除
deleteOp
(
imgs
:
array
as!
[
AssetModel
],
isAfterAdv
:
false
)
HomePayViewController
.
show
{
deleteOp
(
imgs
:
array
as!
[
AssetModel
],
isAfterAdv
:
false
)
}
}
}
}
...
...
@@ -200,12 +205,20 @@ class HomeInfoViewController:BaseViewController {
}
}
else
{
deleteOp
(
imgs
:
array
as!
[
AssetModel
],
isAfterAdv
:
false
)
}
}
return
sview
}()
lazy
var
defaultImageView
:
UIImageView
=
{
let
defaultImageView
=
UIImageView
()
defaultImageView
.
image
=
UIImage
(
named
:
"img_photo__home_defpage"
)
defaultImageView
.
isHidden
=
true
return
defaultImageView
}()
var
ids
:
[[
AssetModel
]]?
var
titleText
:
String
?
...
...
@@ -243,7 +256,34 @@ class HomeInfoViewController:BaseViewController {
seletedAllBtn
.
centerY
=
navCenterY
titleView
.
addSubview
(
seletedAllBtn
)
view
.
addSubview
(
tablewView
)
view
.
addSubview
(
self
.
defaultImageView
)
self
.
defaultImageView
.
snp
.
makeConstraints
{
make
in
make
.
width
.
height
.
equalTo
(
180
)
make
.
top
.
equalTo
(
292
)
make
.
centerX
.
equalToSuperview
()
}
setDefaultPage
()
}
//设置空白页
func
setDefaultPage
(){
DispatchQueue
.
main
.
async
{
if
self
.
ids
?
.
count
==
0
{
if
self
.
type
==
.
SimilarVideos
{
self
.
defaultImageView
.
image
=
UIImage
(
named
:
"img_vedio_defpage"
)
}
else
{
self
.
defaultImageView
.
image
=
UIImage
(
named
:
"img_photo__home_defpage"
)
}
self
.
defaultImageView
.
isHidden
=
false
self
.
seletedAllBtn
.
isHidden
=
true
}
else
{
self
.
defaultImageView
.
isHidden
=
true
self
.
seletedAllBtn
.
isHidden
=
false
}
}
}
@objc
func
seletedAllBtnClick
()
{
...
...
PhoneManager/Class/Session/Home/Controller/HomePhotosDetailViewController.swift
View file @
7e28f310
...
...
@@ -67,6 +67,13 @@ class HomePhotosDetailViewController : BaseViewController {
}
}
lazy
var
defaultImageView
:
UIImageView
=
{
let
defaultImageView
=
UIImageView
()
defaultImageView
.
image
=
UIImage
(
named
:
"img_photo__home_defpage"
)
defaultImageView
.
isHidden
=
true
return
defaultImageView
}()
lazy
var
collectionView
:
UICollectionView
=
{
...
...
@@ -126,6 +133,7 @@ class HomePhotosDetailViewController : BaseViewController {
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
)
...
...
@@ -147,9 +155,35 @@ class HomePhotosDetailViewController : BaseViewController {
make
.
height
.
equalTo
(
46
)
}
self
.
view
.
addSubview
(
self
.
defaultImageView
)
self
.
defaultImageView
.
snp
.
makeConstraints
{
make
in
make
.
width
.
height
.
equalTo
(
180
)
make
.
top
.
equalTo
(
292
)
make
.
centerX
.
equalToSuperview
()
}
setDefaultPage
()
}
//设置空白页
func
setDefaultPage
(){
DispatchQueue
.
main
.
async
{
if
self
.
resourceData
.
count
==
0
{
self
.
defaultImageView
.
isHidden
=
false
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
true
self
.
videoDetailNavView
?
.
seletedAllBtn
.
isHidden
=
true
self
.
deleteButton
.
isHidden
=
true
}
else
{
self
.
defaultImageView
.
isHidden
=
true
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
false
self
.
videoDetailNavView
?
.
seletedAllBtn
.
isHidden
=
false
self
.
deleteButton
.
isHidden
=
false
}
}
}
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
view
.
backgroundColor
=
.
white
...
...
@@ -411,7 +445,9 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
else
{
// 如果小于直接删除
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
HomePayViewController
.
show
{
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
}
else
{
...
...
@@ -438,7 +474,9 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
else
{
// 如果只是一张,直接删除
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
HomePayViewController
.
show
{
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
}
}
...
...
@@ -454,7 +492,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
}
else
{
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
...
...
@@ -527,10 +565,10 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
self
.
deleteButton
.
setTitle
(
"Delete"
,
for
:
.
normal
)
UIView
.
transition
(
with
:
self
.
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
.
reload
Data
(
)
self
.
collectionView
.
reload
Sections
(
IndexSet
(
integer
:
0
)
)
},
completion
:
nil
)
}
setDefaultPage
()
}
...
...
PhoneManager/Class/Session/Home/Controller/HomeVideoDetailController.swift
View file @
7e28f310
...
...
@@ -96,6 +96,13 @@ class HomeVideoDetailController :BaseViewController {
return
view
}()
lazy
var
defaultImageView
:
UIImageView
=
{
let
defaultImageView
=
UIImageView
()
defaultImageView
.
image
=
UIImage
(
named
:
"img_vedio_defpage"
)
defaultImageView
.
isHidden
=
true
return
defaultImageView
}()
func
setUI
(){
videoDetailNavView
=
VideoDetaiNavView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
self
.
view
.
width
,
height
:
statusBarHeight
+
44
))
...
...
@@ -139,6 +146,13 @@ class HomeVideoDetailController :BaseViewController {
make
.
right
.
equalToSuperview
()
.
offset
(
-
15
)
make
.
height
.
equalTo
(
46
)
}
self
.
view
.
addSubview
(
self
.
defaultImageView
)
self
.
defaultImageView
.
snp
.
makeConstraints
{
make
in
make
.
width
.
height
.
equalTo
(
180
)
make
.
top
.
equalTo
(
292
)
make
.
centerX
.
equalToSuperview
()
}
setDefaultPage
()
}
...
...
@@ -355,7 +369,9 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
else
{
// 如果小于直接删除
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
HomePayViewController
.
show
{
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
}
else
{
...
...
@@ -382,11 +398,11 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
else
{
// 如果只是一张,直接删除
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
HomePayViewController
.
show
{
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
if
isMore
==
true
{
...
...
@@ -400,7 +416,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
}
else
{
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
self
.
deleteAction
(
count
:
self
.
selectedModel
.
count
,
isAfterAdv
:
false
)
}
}
...
...
@@ -444,6 +460,22 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
func
setDefaultPage
(){
DispatchQueue
.
main
.
async
{
if
self
.
resourceData
.
count
==
0
{
self
.
defaultImageView
.
isHidden
=
false
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
true
self
.
videoDetailNavView
?
.
seletedAllBtn
.
isHidden
=
true
self
.
deleteButton
.
isHidden
=
true
}
else
{
self
.
defaultImageView
.
isHidden
=
true
self
.
currentHeaderView
?
.
btnView
.
isHidden
=
false
self
.
videoDetailNavView
?
.
seletedAllBtn
.
isHidden
=
false
self
.
deleteButton
.
isHidden
=
false
}
}
}
func
updateCurrentPageWhenDeleteAny
(){
for
item
in
self
.
selectedModel
{
...
...
@@ -474,6 +506,8 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
self
.
collectionView
.
reloadData
()
},
completion
:
nil
)
}
setDefaultPage
()
}
...
...
PhoneManager/Class/Session/Home/Controller/HomeViewController.swift
View file @
7e28f310
...
...
@@ -31,8 +31,27 @@ class HomeViewController:BaseViewController {
case
1
:
DispatchQueue
.
main
.
async
{
[
weak
self
]
in
guard
let
self
else
{
return
}
let
vc
:
SecretViewController
=
SecretViewController
()
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
// 这里需要看下是否需要PIN验证
let
pass
=
UserDefaults
.
standard
.
object
(
forKey
:
SecretViewController
.
psKey
)
as?
String
??
""
if
pass
.
count
>
2
{
let
set
=
SecretSetViewController
()
set
.
secretType
=
.
verify
set
.
modalPresentationStyle
=
.
fullScreen
self
.
present
(
set
,
animated
:
true
)
set
.
Callback
=
{[
weak
self
]
su
in
guard
let
self
else
{
return
}
set
.
dismiss
(
animated
:
true
)
let
vc
:
SecretViewController
=
SecretViewController
()
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
else
{
let
vc
:
SecretViewController
=
SecretViewController
()
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
//
// let vc:SecretViewController = SecretViewController()
// self.navigationController?.pushViewController(vc, animated: true)
}
case
2
:
DispatchQueue
.
main
.
async
{[
weak
self
]
in
...
...
@@ -47,6 +66,8 @@ class HomeViewController:BaseViewController {
}
lazy
var
imageView
:
UIImageView
=
{
let
imageView
=
UIImageView
()
imageView
.
image
=
UIImage
(
named
:
"img_bj_home"
)
...
...
@@ -191,6 +212,10 @@ class HomeViewController:BaseViewController {
}
})
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
// 总数据 文件数量和文件大小
PhotoAndVideoMananger
.
mananger
.
fetchAllFile
{[
weak
self
]
index
,
FileSize
in
...
...
@@ -210,23 +235,31 @@ class HomeViewController:BaseViewController {
}
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
// 可能是删除数据,重新获取下
PhotoDataManager
.
manager
.
loadFromFileSystem
(
resultModel
:
{[
weak
self
]
model
in
DispatchQueue
.
main
.
async
{
self
?
.
homeView
?
.
model
=
model
if
let
collectionView
=
self
?
.
homeView
?
.
collectionView
{
UIView
.
transition
(
with
:
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
collectionView
.
reloadData
()
},
completion
:
nil
)
for
section
in
0
..<
collectionView
.
numberOfSections
{
for
item
in
0
..<
collectionView
.
numberOfItems
(
inSection
:
section
)
{
if
section
==
0
||
section
==
1
{
if
let
cell
=
collectionView
.
cellForItem
(
at
:
IndexPath
(
row
:
item
,
section
:
section
))
as?
HomeTitleCollectionCell
{
UIView
.
transition
(
with
:
cell
.
collectionView
!
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
cell
.
collectionView
?
.
reloadData
()
},
completion
:
nil
)
}
}
else
{
UIView
.
transition
(
with
:
collectionView
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
?
.
homeView
?
.
collectionView
.
reloadItems
(
at
:
[
IndexPath
(
row
:
item
,
section
:
section
)])
},
completion
:
nil
)
}
}
}
}
}
})
}
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
...
...
PhoneManager/Class/Session/Home/View/HomeInfoView.swift
View file @
7e28f310
...
...
@@ -155,13 +155,21 @@ class HomeInfoView :UIView{
smodel2
.
isSeleted
=
isSeleted
}
}
}
tableView
.
reloadSections
(
IndexSet
(
integer
:
0
),
with
:
.
automatic
)
// 设置头部的统计数量
setTitleView
()
for
section
in
0
..<
self
.
tableView
.
numberOfSections
{
for
item
in
0
..<
self
.
tableView
.
numberOfRows
(
inSection
:
section
)
{
if
let
cell
=
self
.
tableView
.
cellForRow
(
at
:
IndexPath
(
row
:
item
,
section
:
section
))
as?
HomeInfoTableViewCell
{
UIView
.
transition
(
with
:
cell
.
collectionView
!
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
cell
.
collectionView
?
.
reloadData
()
},
completion
:
nil
)
}
}
}
}
func
getSelectedArray
()
->
[
AssetModel
]
{
...
...
PhoneManager/Class/Session/Home/View/HomeView.swift
View file @
7e28f310
...
...
@@ -28,20 +28,7 @@ class HomeView:UIView {
var
otherItemCallBack
:
(
HomePhotosModel
,
Int
)
->
Void
=
{
data
,
otherCellRow
in
}
var
model
:
PhotosManagerModel
?
{
didSet
{
guard
model
!=
nil
else
{
return
}
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
// self.collectionView.reloadData()
}
}
}
var
model
:
PhotosManagerModel
?
lazy
var
collectionView
:
UICollectionView
=
{
...
...
@@ -73,8 +60,6 @@ class HomeView:UIView {
super
.
init
(
frame
:
frame
)
setData
()
setupUI
()
}
...
...
@@ -82,30 +67,6 @@ class HomeView:UIView {
fatalError
(
"init(coder:) has not been implemented"
)
}
func
reload
(
type
:
PhotsFileType
)
{
var
indexPath
:
IndexPath
if
type
==
.
duplicates
{
indexPath
=
IndexPath
(
row
:
0
,
section
:
0
)
}
else
if
type
==
.
similar
{
indexPath
=
IndexPath
(
row
:
1
,
section
:
0
)
}
else
if
type
==
.
videos
{
indexPath
=
IndexPath
(
row
:
0
,
section
:
1
)
}
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
self
.
collectionView
.
reloadData
()
}
}
func
setTitle
()
{
DispatchQueue
.
main
.
async
{[
weak
self
]
in
...
...
@@ -117,39 +78,6 @@ class HomeView:UIView {
}
func
refreshData
(
model
:
PhotosManagerModel
)
{
if
self
.
model
==
nil
{
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
self
.
homeHeader
?
.
setFileAndCount
(
count
:
model
.
allFileNumber
,
fileSize
:
model
.
allFileSize
)
self
.
collectionView
.
reloadData
()
}
}
else
{
DispatchQueue
.
main
.
async
{[
weak
self
]
in
guard
let
self
else
{
return
}
self
.
homeHeader
?
.
setFileAndCount
(
count
:
model
.
allFileNumber
,
fileSize
:
model
.
allFileSize
)
self
.
collectionView
.
reloadData
()
}
}
self
.
model
=
model
}
func
setData
()
{
}
private
func
setupUI
()
{
backgroundColor
=
.
clear
...
...
@@ -198,9 +126,6 @@ class HomeView:UIView {
make
.
width
.
equalToSuperview
()
.
offset
(
-
2
*
marginLR
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
homeTabbarView
!.
height
-
16
)
}
// collectionView.contentInset = UIEdgeInsets(top: homeTabbarView!.height + 49, left: 0, bottom: homeTabbarView!.height + 16, right: 0)
}
func
etCell
(
indexPath
:
IndexPath
)
->
UICollectionViewCell
{
...
...
@@ -255,6 +180,13 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}
else
{
self
.
similarHeadCell
=
cell
}
if
cell
.
model
?
.
assets
.
count
??
0
>
0
{
cell
.
fileLabel
?
.
isHidden
=
false
}
else
{
cell
.
fileLabel
?
.
isHidden
=
true
}
return
cell
case
1
:
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
HomeOtherCollectionCell
.
identifier
,
for
:
indexPath
)
as!
HomeOtherCollectionCell
...
...
@@ -279,7 +211,14 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
let
model
=
model
?
.
titleModelArray
[
indexPath
.
row
]
return
(
model
?
.
assets
.
first
?
.
count
??
0
)
>
2
?
((
collection
.
width
-
marginLR
-
20
)
/
2.5
)
+
64
:
((
collection
.
width
-
2
*
marginLR
-
10
)
/
2
)
+
64
if
model
?
.
assets
.
count
??
0
>
0
{
return
(
model
?
.
assets
.
first
?
.
count
??
0
)
>
2
?
((
collection
.
width
-
marginLR
-
20
)
/
2.5
)
+
64
:
((
collection
.
width
-
2
*
marginLR
-
10
)
/
2
)
+
64
}
else
{
return
52
}
}
else
{
let
model
=
model
?
.
otherModelArray
[
indexPath
.
row
]
...
...
PhoneManager/Class/Session/Home/View/cell/HomeInfoTableViewCell.swift
View file @
7e28f310
...
...
@@ -14,7 +14,7 @@ class HomeInfoTableViewCell:UITableViewCell {
private
var
backView
:
UIView
?
private
var
collectionView
:
UICollectionView
?
var
collectionView
:
UICollectionView
?
private
var
numberLabel
:
UILabel
?
...
...
@@ -112,8 +112,10 @@ class HomeInfoTableViewCell:UITableViewCell {
collectionView
?
.
x
=
(
backView
?
.
x
??
0
)
+
marginLR
collectionView
?
.
y
=
(
backView
?
.
y
??
0
)
+
(
backView
?
.
height
??
0
)
-
(
collectionView
?
.
height
??
0
)
-
16
self
.
collectionView
?
.
reloadData
()
UIView
.
transition
(
with
:
collectionView
!
,
duration
:
0.3
,
options
:
.
transitionCrossDissolve
,
animations
:
{
self
.
collectionView
?
.
reloadData
()
},
completion
:
nil
)
}
}
...
...
PhoneManager/Class/Session/Home/View/cell/HomeVideoDetailCell.swift
View file @
7e28f310
...
...
@@ -27,7 +27,7 @@ class HomeVideoDetailCell : UICollectionViewCell {
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
tru
e
options
.
isSynchronous
=
fals
e
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
resourceIdent
!.
localIdentifier
]){
// 使用requestImageForAsset方法请求视频的第一帧图片
...
...
PhoneManager/Class/Session/Lauch/LauchVC.swift
View file @
7e28f310
...
...
@@ -33,13 +33,14 @@ class LauchVC:UIViewController {
backView
.
addSubview
(
LaunchingLoop
)
LaunchingView
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
make
.
centerY
.
equalToSuperview
()
.
offset
(
-
80
)
make
.
width
.
equalToSuperview
()
.
offset
(
-
20
)
make
.
height
.
equalTo
(
LaunchingView
.
snp
.
width
)
.
multipliedBy
(
276
/
504.0
)
make
.
centerY
.
equalToSuperview
()
.
offset
(
-
140
*
RScreenH
()
)
make
.
width
.
equalToSuperview
()
make
.
height
.
equalTo
(
LaunchingView
.
snp
.
width
)
}
LaunchingLoop
.
snp
.
makeConstraints
{
make
in
make
.
left
.
right
.
equalToSuperview
()
make
.
centerY
.
equalToSuperview
()
.
offset
(
80
)
make
.
centerX
.
equalToSuperview
()
make
.
width
.
height
.
equalTo
(
200
)
make
.
bottom
.
equalToSuperview
()
.
offset
(
-
60
*
RScreenH
())
}
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
3
,
execute
:
{
var
vc
:
UIViewController
?
...
...
PhoneManager/Class/Session/Secret/SecretSetViewController.swift
View file @
7e28f310
...
...
@@ -29,6 +29,11 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
self
.
titleView
.
backBtn
.
setImage
(
UIImage
(
named
:
"ic_close_charging"
),
for
:
.
normal
)
self
.
titleView
.
model
.
isBackBtnShow
=
true
titleView
.
model
.
title
=
"Secret Library"
titleView
.
titleLabel
.
textColor
=
.
black
titleView
.
titleLabel
.
textAlignment
=
.
left
...
...
@@ -40,7 +45,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
override
func
close
(
animation
:
Bool
=
true
)
{
if
secretType
==
.
verify
{
self
.
navigationController
?
.
popToRootViewController
(
animated
:
true
)
self
.
dismiss
(
animated
:
true
)
return
}
Callback
(
false
)
...
...
@@ -63,6 +68,11 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
}
else
{
if
secretType
==
.
del
{
UserDefaults
.
standard
.
set
(
""
,
forKey
:
SecretViewController
.
psKey
)
let
alert
=
UIAlertController
(
title
:
nil
,
message
:
"The PIN has been deleted"
,
preferredStyle
:
.
alert
)
self
.
present
(
alert
,
animated
:
true
)
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.5
)
{
alert
.
dismiss
(
animated
:
true
)
}
}
}
}
else
{
...
...
@@ -78,7 +88,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.5
)
{
alert
.
dismiss
(
animated
:
true
)
{
self
.
Callback
(
true
)
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
self
.
dismiss
(
animated
:
true
)
}
}
}
...
...
@@ -90,8 +100,16 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
}
return
}
Callback
(
true
)
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
UserDefaults
.
standard
.
set
(
""
,
forKey
:
SecretViewController
.
psKey
)
let
alert
=
UIAlertController
(
title
:
nil
,
message
:
"Unlocked"
,
preferredStyle
:
.
alert
)
self
.
present
(
alert
,
animated
:
true
)
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.5
)
{
alert
.
dismiss
(
animated
:
true
){
self
.
Callback
(
true
)
self
.
dismiss
(
animated
:
true
)
}
}
}
}
}
...
...
PhoneManager/Class/Session/Secret/SecretViewController.swift
View file @
7e28f310
...
...
@@ -22,7 +22,7 @@ class SecretViewController: BaseViewController {
/** 首次显示 */
private
var
isShow
:
Bool
{
get
{
guard
let
show
=
UserDefaults
.
standard
.
object
(
forKey
:
"SecretFirstShow"
)
else
{
guard
UserDefaults
.
standard
.
object
(
forKey
:
"SecretFirstShow"
)
!=
nil
else
{
UserDefaults
.
standard
.
set
(
"1"
,
forKey
:
"SecretFirstShow"
)
return
false
}
...
...
@@ -54,16 +54,17 @@ class SecretViewController: BaseViewController {
super
.
viewDidLoad
()
_
=
Resource
.
isDirect
()
if
isShow
{
if
pass
.
count
>
2
{
let
set
=
SecretSetViewController
()
set
.
secretType
=
.
verify
set
.
Callback
=
{[
weak
self
]
su
in
self
?
.
ShowUI
()
}
self
.
navigationController
?
.
pushViewController
(
set
,
animated
:
true
)
}
else
{
self
.
ShowUI
()
}
// if pass.count > 2 {
// let set = SecretSetViewController()
// set.secretType = .verify
// set.Callback = {[weak self] su in
// self?.ShowUI()
// }
// self.navigationController?.pushViewController(set, animated: true)
// }else{
// self.ShowUI()
// }
self
.
ShowUI
()
}
else
{
let
alert
=
SecretAlert
()
titleView
.
isHidden
=
true
...
...
@@ -73,9 +74,12 @@ class SecretViewController: BaseViewController {
let
set
=
SecretSetViewController
()
set
.
secretType
=
.
create
set
.
Callback
=
{
su
in
set
.
dismiss
(
animated
:
true
)
self
?
.
ShowUI
()
}
self
?
.
navigationController
?
.
pushViewController
(
set
,
animated
:
true
)
set
.
modalPresentationStyle
=
.
fullScreen
self
?
.
present
(
set
,
animated
:
true
)
// self?.navigationController?.pushViewController(set, animated: true)
}
else
{
self
?
.
ShowUI
()
}
...
...
@@ -135,14 +139,22 @@ class SecretViewController: BaseViewController {
if
pass
.
count
>
2
{
let
set
=
SecretSetViewController
()
set
.
secretType
=
.
del
self
.
navigationController
?
.
pushViewController
(
set
,
animated
:
true
)
// self.navigationController?.pushViewController(set, animated: true)
set
.
Callback
=
{
cr
in
set
.
dismiss
(
animated
:
true
)
}
set
.
modalPresentationStyle
=
.
fullScreen
self
.
present
(
set
,
animated
:
true
)
}
else
{
let
set
=
SecretSetViewController
()
set
.
secretType
=
.
create
set
.
Callback
=
{
cr
in
set
.
dismiss
(
animated
:
true
)
}
self
.
navigationController
?
.
pushViewController
(
set
,
animated
:
true
)
// self.navigationController?.pushViewController(set, animated: true)
set
.
modalPresentationStyle
=
.
fullScreen
self
.
present
(
set
,
animated
:
true
)
}
}
...
...
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
View file @
7e28f310
...
...
@@ -321,6 +321,7 @@ class PhotoAndVideoMananger {
let
targetSize
=
CGSize
(
width
:
400
,
height
:
400
)
let
options
=
PHImageRequestOptions
()
options
.
isSynchronous
=
true
options
.
deliveryMode
=
.
opportunistic
options
.
isNetworkAccessAllowed
=
true
imageManager
.
requestImage
(
for
:
asset
,
targetSize
:
targetSize
,
contentMode
:
.
aspectFill
,
options
:
options
)
{
result
,
_
in
image
=
result
...
...
@@ -829,7 +830,7 @@ class PhotoAndVideoMananger {
}
var
finalData
:
[[
AssetModel
]]
=
[]
// 按照大小排序下
data
=
data
.
sorted
{
$0
.
assetSize
<
$1
.
assetSize
}
data
=
data
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
finalData
.
append
(
data
)
completionHandler
(
finalData
)
}
...
...
@@ -847,6 +848,8 @@ class PhotoAndVideoMananger {
data
.
append
(
AssetModel
(
localIdentifier
:
item
.
localIdentifier
,
assetSize
:
self
.
findAssetSize
(
asset
:
item
),
createDate
:
item
.
creationDate
!
))
}
var
finalData
:
[[
AssetModel
]]
=
[]
// 排序,从大到小
data
=
data
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
finalData
.
append
(
data
)
completionHandler
(
finalData
)
}
...
...
@@ -855,7 +858,7 @@ class PhotoAndVideoMananger {
// MARK: - 处理截图数据-------------------------------------------------------
// MARK: - 处理照片数据-------------------------------------------------------
// MARK: - 处理照片数据-------------------------
------------------------------
func
dealImageAssetData
(
completionHandler
:
@escaping
([[
AssetModel
]])
->
Void
){
DispatchQueue
.
global
()
.
async
{
var
data
:[
AssetModel
]
=
[]
...
...
@@ -863,6 +866,8 @@ class PhotoAndVideoMananger {
data
.
append
(
AssetModel
(
localIdentifier
:
item
.
localIdentifier
,
assetSize
:
self
.
findAssetSize
(
asset
:
item
),
createDate
:
item
.
creationDate
!
))
}
var
finalData
:
[[
AssetModel
]]
=
[]
// 排序,从大到小
data
=
data
.
sorted
{
$0
.
assetSize
>
$1
.
assetSize
}
finalData
.
append
(
data
)
completionHandler
(
finalData
)
}
...
...
@@ -886,7 +891,7 @@ class PhotoAndVideoMananger {
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
tru
e
options
.
isSynchronous
=
fals
e
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
ident
.
localIdentifier
]){
// 使用requestImageForAsset方法请求视频的第一帧图片
...
...
@@ -919,7 +924,7 @@ class PhotoAndVideoMananger {
semaphore
.
signal
()
}
if
let
data
=
imageData
{
let
hash
=
Insecure
.
MD5
.
hash
(
data
:
data
)
let
hash
=
SHA256
.
hash
(
data
:
data
)
hashString
=
hash
.
compactMap
{
String
(
format
:
"%02x"
,
$0
)
}
.
joined
()
}
}
...
...
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