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
a7116f46
Commit
a7116f46
authored
Apr 09, 2025
by
yqz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
隐私空间 图片和设备适配
parent
2584358c
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
138 additions
and
30 deletions
+138
-30
HomeNoAdsViewController.swift
...Manager/Class/Session/NoAds/HomeNoAdsViewController.swift
+2
-1
SecretImageCache.swift
...Manager/Class/Session/Secret/Model/SecretImageCache.swift
+41
-0
SecretSetViewController.swift
...anager/Class/Session/Secret/SecretSetViewController.swift
+3
-1
SecretViewController.swift
PhoneManager/Class/Session/Secret/SecretViewController.swift
+51
-23
SecretBottomView.swift
...eManager/Class/Session/Secret/View/SecretBottomView.swift
+17
-0
SecretFirstCell.swift
PhoneManager/Class/Session/Secret/View/SecretFirstCell.swift
+2
-1
NSString+Extension.swift
...nager/Class/Tool/Extension.swift/NSString+Extension.swift
+22
-4
No files found.
PhoneManager/Class/Session/NoAds/HomeNoAdsViewController.swift
View file @
a7116f46
...
...
@@ -346,7 +346,8 @@ extension HomeNoAdsViewController : UIScrollViewDelegate {
}
closeBtn
.
snp
.
makeConstraints
{
make
in
make
.
left
.
top
.
equalTo
(
view
)
.
inset
(
UIEdgeInsets
(
top
:
35
,
left
:
13
,
bottom
:
0
,
right
:
0
))
make
.
left
.
equalTo
(
view
)
.
inset
(
UIEdgeInsets
(
top
:
35
,
left
:
13
,
bottom
:
0
,
right
:
0
))
make
.
top
.
equalTo
(
view
.
snp
.
topMargin
)
.
offset
(
15
)
}
NoAdTitle
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
.
inset
(
20
)
...
...
PhoneManager/Class/Session/Secret/Model/SecretImageCache.swift
0 → 100644
View file @
a7116f46
//
// SecretImageCache.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import
UIKit
class
SecretImageCache
:
NSObject
{
private
var
imageCache
:[
String
:
UIImage
]
=
[:]
private
var
VideoCache
:[
String
:
Float64
]
=
[:]
func
loadCacheImage
(
_
nm
:
String
)
->
(
UIImage
?,
Float64
)?
{
let
duration
:
Float64
=
self
.
VideoCache
[
nm
]
??
-
1
if
let
image
=
self
.
imageCache
[
nm
]
{
return
(
image
,
duration
)
}
return
nil
}
func
removeAllImage
()
->
Void
{
self
.
imageCache
.
removeAll
()
self
.
VideoCache
.
removeAll
()
}
func
removeImage
(
_
nm
:
String
)
->
Void
{
self
.
imageCache
.
removeValue
(
forKey
:
nm
)
self
.
VideoCache
.
removeValue
(
forKey
:
nm
)
}
func
saveImageCache
(
_
nm
:
String
,
_
image
:
UIImage
,
_
duration
:
Float64
=
-
1
)
->
Void
{
self
.
imageCache
[
nm
]
=
image
if
duration
>
0
{
self
.
VideoCache
[
nm
]
=
duration
}
}
static
let
share
=
SecretImageCache
()
}
PhoneManager/Class/Session/Secret/SecretSetViewController.swift
View file @
a7116f46
...
...
@@ -16,6 +16,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
var
Callback
:((
_
suc
:
Bool
)
->
Void
)?
var
secretType
:
SecretType
=
.
create
{
didSet
{
if
secretType
==
.
create
{
...
...
@@ -24,7 +25,6 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
setTitle
.
text
=
"Please Enter PlN"
}
}
}
override
func
viewDidLoad
()
{
...
...
@@ -46,6 +46,7 @@ class SecretSetViewController: BaseViewController, UITextFieldDelegate {
if
Ps
!=
Secret
{
alert
(
"Pin Verification Failed"
)
Secret
=
""
self
.
ps
.
text
=
""
return
}
}
else
{
...
...
@@ -139,6 +140,7 @@ extension SecretSetViewController:UICollectionViewDelegate,UICollectionViewDataS
st
=
st
.
replacingCharacters
(
in
:
range
,
with
:
string
)
as
NSString
if
st
.
length
>
4
{
Secret
=
st
.
substring
(
to
:
4
)
textField
.
text
=
""
return
false
}
Secret
=
st
as
String
;
...
...
PhoneManager/Class/Session/Secret/SecretViewController.swift
View file @
a7116f46
...
...
@@ -22,31 +22,28 @@ class SecretViewController: BaseViewController {
private
var
selectArray
=
NSMutableSet
()
{
didSet
{
secretCollect
.
reloadData
()
bottomm
.
state
=
selectArray
.
count
>
0
?
.
del
:
.
add
}
}
var
isVerify
:
Bool
=
false
{
didSet
{
if
pass
.
count
>
0
&&
isVerify
{
data
=
loadData
()
}
else
{
data
=
[]
}
if
isVerify
{
NotDataView
.
isHidden
=
data
.
count
>
0
secretCollect
.
isHidden
=
!
(
data
.
count
>
0
)
NotDataView
.
isHidden
=
data
Source
.
count
>
0
secretCollect
.
isHidden
=
!
(
data
Source
.
count
>
0
)
seletedAllBtn
.
isHidden
=
secretCollect
.
isHidden
}
else
{
NotDataView
.
isHidden
=
false
secretCollect
.
isHidden
=
true
seletedAllBtn
.
isHidden
=
true
}
secretCollect
.
reloadData
()
}
}
let
AddAction
=
SecretActionView
()
var
data
:[
String
]
=
[]
{
var
data
Source
:[
String
]
=
[]
{
didSet
{
secretCollect
.
reloadData
()
}
...
...
@@ -93,9 +90,25 @@ class SecretViewController: BaseViewController {
}
}
secretDesc
.
text
=
"
\(
p
)
Photos,
\(
v
)
Videos"
dataSource
=
file
return
file
}
private
func
deleteData
()
->
Void
{
var
delName
:[
String
]
=
[]
for
idx
in
selectArray
.
allObjects
{
guard
let
row
:
Int
=
idx
as?
Int
else
{
return
}
let
name
=
dataSource
[
row
]
delName
.
append
(
name
)
}
""
.
delPhotoVideo
(
delName
)
if
selectArray
.
count
>
0
{
selectArray
.
removeAllObjects
()
}
Print
(
"删除成功"
)
dataSource
=
loadData
()
}
@objc
private
func
lockTouch
(
_
sender
:
UIButton
)
->
Void
{
if
pass
.
count
<
4
{
let
alert
=
SecretAlert
()
...
...
@@ -140,7 +153,8 @@ class SecretViewController: BaseViewController {
titleView
.
addSubview
(
seletedAllBtn
)
secretTL
.
snp
.
makeConstraints
{
make
in
make
.
left
.
top
.
equalToSuperview
()
.
inset
(
UIEdgeInsets
(
top
:
72
.
RW
(),
left
:
15
.
RW
(),
bottom
:
0
,
right
:
0
))
make
.
left
.
equalToSuperview
()
.
inset
(
UIEdgeInsets
(
top
:
72
.
RW
(),
left
:
15
.
RW
(),
bottom
:
0
,
right
:
0
))
make
.
top
.
equalTo
(
titleView
.
snp
.
bottom
)
.
offset
(
10
)
}
secretDesc
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
secretTL
.
snp
.
left
)
...
...
@@ -216,9 +230,14 @@ class SecretViewController: BaseViewController {
let
b
=
SecretBottomView
()
view
.
addSubview
(
b
)
b
.
callback
=
{
[
weak
self
]
in
self
?
.
AddAction
.
show
();
self
?
.
AddAction
.
callback
=
{
[
weak
self
]
idx
in
self
?
.
AddImagePicker
(
idx
)
guard
let
self
=
self
else
{
return
}
if
b
.
state
==
.
add
{
self
.
AddAction
.
show
();
self
.
AddAction
.
callback
=
{
idx
in
self
.
AddImagePicker
(
idx
)
}
}
else
{
self
.
deleteData
()
}
}
return
b
...
...
@@ -246,13 +265,17 @@ class SecretViewController: BaseViewController {
return
btn
}()
deinit
{
SecretImageCache
.
share
.
removeAllImage
()
}
}
extension
SecretViewController
:
UICollectionViewDelegate
,
UICollectionViewDataSource
,
UICollectionViewDelegateFlowLayout
{
func
collectionView
(
_
collectionView
:
UICollectionView
,
numberOfItemsInSection
section
:
Int
)
->
Int
{
return
data
.
count
;
return
(
dataSource
.
count
>
0
&&
isVerify
)
?
dataSource
.
count
:
0
;
}
func
collectionView
(
_
collectionView
:
UICollectionView
,
cellForItemAt
indexPath
:
IndexPath
)
->
UICollectionViewCell
{
...
...
@@ -260,7 +283,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
cell
.
layer
.
cornerRadius
=
12
;
cell
.
clipsToBounds
=
true
cell
.
isSelect
=
selectArray
.
contains
((
indexPath
.
row
))
cell
.
imageText
=
data
[
indexPath
.
row
]
cell
.
imageText
=
data
Source
[
indexPath
.
row
]
cell
.
callback
=
{
[
weak
self
]
in
self
?
.
selectImgVideo
(
indexPath
.
row
)
}
...
...
@@ -269,7 +292,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
let
play
=
SecretShowImgVideoController
()
play
.
imageVideoPath
=
data
[
indexPath
.
row
]
play
.
imageVideoPath
=
data
Source
[
indexPath
.
row
]
self
.
navigationController
?
.
pushViewController
(
play
,
animated
:
true
)
}
...
...
@@ -286,7 +309,7 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
seletedAllBtn
.
x
=
titleView
.
width
-
marginLR
-
seletedAllBtn
.
width
let
sets
=
NSMutableSet
()
if
seletedAllBtn
.
isSelected
{
for
i
in
0
..<
data
.
count
{
for
i
in
0
..<
data
Source
.
count
{
sets
.
add
((
i
))
}
selectArray
=
sets
...
...
@@ -295,18 +318,20 @@ extension SecretViewController : UICollectionViewDelegate,UICollectionViewDataSo
}
}
}
}
extension
SecretViewController
:
UIImagePickerControllerDelegate
,
UINavigationControllerDelegate
{
private
func
selectImgVideo
(
_
row
:
Int
)
->
Void
{
if
selectArray
.
contains
((
row
))
{
selectArray
.
remove
((
row
))
let
set
:
NSMutableSet
=
NSMutableSet
(
set
:
selectArray
)
if
set
.
contains
((
row
))
{
set
.
remove
((
row
))
}
else
{
se
lectArray
.
add
((
row
))
se
t
.
add
((
row
))
}
seletedAllBtn
.
isSelected
=
selectArray
.
count
==
data
.
count
selectArray
=
set
seletedAllBtn
.
isSelected
=
selectArray
.
count
==
dataSource
.
count
secretCollect
.
reloadData
()
}
...
...
@@ -319,16 +344,18 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
set
.
getImage
{[
weak
self
]
icon
in
if
icon
!=
nil
{
self
?
.
SaveSecret
(
name
+
".png"
,
icon
!.
pngData
()
??
Data
())
self
?
.
loadData
()
}
}
}
else
if
set
.
mediaType
==
.
video
{
set
.
getVideoURL
{
resltu
in
set
.
getVideoURL
{
[
weak
self
]
resltu
in
switch
resltu
{
case
.
success
(
let
assetUrl
):
let
fab
=
assetUrl
.
url
do
{
let
data
=
try
Data
(
contentsOf
:
fab
)
self
.
SaveSecret
(
name
+
".mp4"
,
data
)
self
?
.
SaveSecret
(
name
+
".mp4"
,
data
)
self
?
.
loadData
()
}
catch
{
}
...
...
@@ -353,6 +380,7 @@ extension SecretViewController : UIImagePickerControllerDelegate , UINavigationC
}
let
isv
=
isVerify
isVerify
=
isv
loadData
()
}
}
...
...
PhoneManager/Class/Session/Secret/View/SecretBottomView.swift
View file @
a7116f46
...
...
@@ -9,6 +9,11 @@ import UIKit
class
SecretBottomView
:
UIView
{
enum
SecretState
{
case
add
case
del
}
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
addSubview
(
but
)
...
...
@@ -52,6 +57,18 @@ class SecretBottomView: UIView {
return
b
}()
var
state
:
SecretState
=
.
add
{
didSet
{
if
state
==
.
add
{
but
.
setTitle
(
"Add New"
,
for
:
.
normal
)
but
.
setImage
(
UIImage
(
named
:
"ic_add_secret"
),
for
:
.
normal
)
}
else
{
but
.
setTitle
(
"Delete"
,
for
:
.
normal
)
but
.
setImage
(
UIImage
(),
for
:
.
normal
)
}
}
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
...
...
PhoneManager/Class/Session/Secret/View/SecretFirstCell.swift
View file @
a7116f46
...
...
@@ -32,7 +32,7 @@ class SecretFirstCell: UICollectionViewCell {
}
selectInfo
.
snp
.
makeConstraints
{
make
in
make
.
right
.
bottom
.
equalToSuperview
()
.
inset
(
12
)
make
.
size
.
equalTo
(
CGSize
(
width
:
24
,
height
:
24
))
//
make.size.equalTo(CGSize(width: 24, height: 24))
}
timeLabe
.
snp
.
makeConstraints
{
make
in
make
.
left
.
bottom
.
equalToSuperview
()
.
inset
(
14
)
...
...
@@ -73,6 +73,7 @@ class SecretFirstCell: UICollectionViewCell {
info
.
setImage
(
UIImage
(
named
:
"home_info_seleted"
),
for
:
.
selected
)
info
.
addTarget
(
self
,
action
:
#selector(
SelectTouch
)
,
for
:
.
touchUpInside
)
addSubview
(
info
)
info
.
contentEdgeInsets
=
UIEdgeInsets
(
top
:
10
,
left
:
10
,
bottom
:
10
,
right
:
10
)
return
info
}()
...
...
PhoneManager/Class/Tool/Extension.swift/NSString+Extension.swift
View file @
a7116f46
...
...
@@ -71,9 +71,8 @@ extension UIImage {
}
extension
String
{
// 获取文档路径
func
document
()
->
URL
{
let
document
=
FileManager
.
default
.
urls
(
for
:
.
documentDirectory
,
in
:
.
userDomainMask
)
.
first
!
...
...
@@ -83,8 +82,25 @@ extension String {
func
af
()
->
String
{
return
NSSearchPathForDirectoriesInDomains
(
.
documentDirectory
,
.
userDomainMask
,
true
)
.
first
??
""
}
func
delPhotoVideo
(
_
Nms
:[
String
])
->
Void
{
for
name
in
Nms
{
let
path
=
self
.
af
()
+
"/SecretIm/"
let
delFile
=
path
+
name
SecretImageCache
.
share
.
removeImage
(
name
)
do
{
try
FileManager
.
default
.
removeItem
(
atPath
:
delFile
)
}
catch
{
Print
(
"删除出错了"
)
}
}
}
func
loadPhotoOrVideo
(
_
pv
:
@escaping
((
Float64
,
UIImage
)
->
Void
)
)
->
Void
{
if
let
img
=
SecretImageCache
.
share
.
loadCacheImage
(
self
)
{
pv
(
img
.
1
,
img
.
0
??
UIImage
())
return
}
let
path
=
self
.
af
()
+
"/SecretIm/"
let
abe
=
path
+
self
if
self
.
hasSuffix
(
".png"
)
{
...
...
@@ -92,7 +108,8 @@ extension String {
pv
(
-
1
,
UIImage
.
Clear
())
return
}
icon
.
compressImage
(
0.5
)
{
image
in
icon
.
compressImage
(
0.3
)
{
image
in
SecretImageCache
.
share
.
saveImageCache
(
self
,
image
)
pv
(
-
1
,
image
)
}
}
else
{
...
...
@@ -104,7 +121,8 @@ extension String {
do
{
let
cgImage
=
try
imageGenerator
.
copyCGImage
(
at
:
CMTime
(
value
:
0
,
timescale
:
1
),
actualTime
:
nil
)
let
icon
=
UIImage
(
cgImage
:
cgImage
);
icon
.
compressImage
(
0.5
)
{
image
in
icon
.
compressImage
(
0.3
)
{
image
in
SecretImageCache
.
share
.
saveImageCache
(
self
,
image
,
CMTimeGetSeconds
(
duration
))
pv
(
CMTimeGetSeconds
(
duration
)
,
image
)
}
}
catch
{
...
...
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