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
766549b8
Commit
766549b8
authored
May 22, 2025
by
shenyong
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev_syong' into dev_main
parents
6fff8e28
cd2a7ab3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
135 additions
and
59 deletions
+135
-59
AppDelegate.swift
PhoneManager/AppDelegate.swift
+6
-1
GroupDatabase.swift
PhoneManager/Class/Database/GroupDatabase.swift
+3
-0
TrashDatabase.swift
PhoneManager/Class/Database/TrashDatabase.swift
+3
-0
PhotoManager.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
+19
-0
CompressController.swift
...r/Class/Page/Compress/Controller/CompressController.swift
+1
-1
HomeInfoViewController.swift
...r/Class/Page/Home/Controller/HomeInfoViewController.swift
+12
-9
HomeVideoDetailController.swift
...lass/Page/Home/Controller/HomeVideoDetailController.swift
+24
-18
PMAnimationLoaing.json
...eManager/Class/Page/Public/Loading/PMAnimationLoaing.json
+1
-1
PMLoadingView.swift
PhoneManager/Class/Page/Public/Loading/PMLoadingView.swift
+65
-29
UIViewController+Extension.swift
...ass/Tool/Extension.swift/UIViewController+Extension.swift
+1
-0
No files found.
PhoneManager/AppDelegate.swift
View file @
766549b8
...
...
@@ -94,10 +94,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// ]
// let dic = attribution.jso
Print
(
"获取当前归因信息"
,
attribution
?
.
jsonResponse
as
Any
)
// APIReportManager.shared.startReport(type: .source_atrribute,ext: pram)
//APIReportManager.shared.startReport(type: .source_atrribute,ext: pram)
}
PMLoadingHUD
.
share
.
config
()
return
true
}
...
...
PhoneManager/Class/Database/GroupDatabase.swift
View file @
766549b8
...
...
@@ -187,6 +187,9 @@ class GroupDatabase {
// 根据mediaType查询数据
func
queryByMediaType
(
_
mediaType
:
Int
)
->
[(
localIdentifier
:
String
,
assetSize
:
Double
,
createDate
:
Date
,
mediaType
:
Int
,
groupId
:
String
)]
{
if
PhotoManager
.
shared
.
permissionStatus
!=
.
authorized
{
return
[]
}
let
queryStatementString
=
"SELECT * FROM groups WHERE mediaType = ?;"
var
queryStatement
:
OpaquePointer
?
var
result
:
[(
localIdentifier
:
String
,
assetSize
:
Double
,
createDate
:
Date
,
mediaType
:
Int
,
groupId
:
String
)]
=
[]
...
...
PhoneManager/Class/Database/TrashDatabase.swift
View file @
766549b8
...
...
@@ -183,6 +183,9 @@ class TrashDatabase {
// 根据mediaType查询数据
func
queryByMediaType
(
_
mediaType
:
Int
)
->
[(
localIdentifier
:
String
,
assetSize
:
Double
,
createDate
:
Date
,
mediaType
:
Int
)]
{
if
PhotoManager
.
shared
.
permissionStatus
!=
.
authorized
{
return
[]
}
let
queryStatementString
=
"SELECT * FROM trash WHERE mediaType = ?;"
var
queryStatement
:
OpaquePointer
?
var
result
:
[(
localIdentifier
:
String
,
assetSize
:
Double
,
createDate
:
Date
,
mediaType
:
Int
)]
=
[]
...
...
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
View file @
766549b8
...
...
@@ -719,6 +719,25 @@ extension PhotoManager{
extension
PhotoManager
{
//调用系统删除
func
deleteAssets
(
localIdentifiers
:
[
String
],
suc
:
@escaping
()
->
())
{
// 获取要删除的 PHAsset
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
localIdentifiers
,
options
:
nil
)
// 开始删除操作
PHPhotoLibrary
.
shared
()
.
performChanges
({
// 创建删除请求
PHAssetChangeRequest
.
deleteAssets
(
fetchResult
)
})
{
success
,
error
in
if
success
{
suc
()
}
else
if
let
error
=
error
{
print
(
"删除失败:
\(
error
.
localizedDescription
)
"
)
PMLoadingHUD
.
share
.
disMiss
()
}
}
}
// 处理app图片删除
func
removeDataWhenDeleteInPage
(
data
:[
AssetModel
],
completionHandler
:
(()
->
Void
)?
=
nil
){
...
...
PhoneManager/Class/Page/Compress/Controller/CompressController.swift
View file @
766549b8
...
...
@@ -83,7 +83,7 @@ class CompressController : BaseViewController {
func
getViewData
(){
if
PhotoManager
.
shared
.
permissionStatus
==
.
denied
{
loadPermissView
(
CGRect
(
x
:
0
,
y
:
2
00
,
width
:
ScreenW
,
height
:
450
))
loadPermissView
(
CGRect
(
x
:
0
,
y
:
3
00
,
width
:
ScreenW
,
height
:
450
))
return
}
...
...
PhoneManager/Class/Page/Home/Controller/HomeInfoViewController.swift
View file @
766549b8
...
...
@@ -83,22 +83,22 @@ class HomeInfoViewController:BaseViewController {
}
let
fetchs
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
tempStringArray
,
options
:
nil
)
let
fileSize
=
FileTool
()
.
calculateTotalAssetSize
(
fetchResult
:
fetchs
)
PhotoAndVideoMananger
.
deleteAssets
(
localIdentifiers
:
tempStringArray
)
{[
weak
self
]
in
PMLoadingHUD
.
share
.
show
()
PhotoManager
.
shared
.
deleteAssets
(
localIdentifiers
:
tempStringArray
)
{[
weak
self
]
in
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1
.0
)
{
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1
)
{
PMLoadingHUD
.
share
.
disMiss
()
// 更新免费次数
if
isAfterAdv
==
false
{
updateFreeTimes
()
}
self
.
showDeleteSuccess
(
fileCount
:
tempStringArray
.
count
,
fileSize
:
fileSize
)
PhotoManager
.
shared
.
removeDataWhenDeleteInPage
(
data
:
imgs
)
let
new
=
self
.
ids
?
.
removingElementsAndSmallGroups
(
ids
:
imgs
.
compactMap
{
$0
.
localIdentifier
})
...
...
@@ -107,7 +107,7 @@ class HomeInfoViewController:BaseViewController {
self
.
tablewView
.
ids
=
self
.
ids
self
.
tablewView
.
deleteModel
(
array
:
imgs
)
self
.
setDefaultPage
()
}
...
...
@@ -123,6 +123,9 @@ class HomeInfoViewController:BaseViewController {
}
}
}
}
// 显示弹出框
...
...
@@ -483,7 +486,7 @@ class HomeInfoViewController:BaseViewController {
extension
UIViewController
{
func
loadPermissView
(
_
frame
:
CGRect
=
CGRect
(
x
:
0
,
y
:
100
+
kSafeAreaInsets
.
top
,
width
:
ScreenW
,
height
:
45
0
)){
func
loadPermissView
(
_
frame
:
CGRect
=
CGRect
(
x
:
0
,
y
:
200
+
kSafeAreaInsets
.
top
,
width
:
ScreenW
,
height
:
34
0
)){
let
permissionView
=
Bundle
.
main
.
loadNibNamed
(
"PMPermissionView"
,
owner
:
nil
)?
.
last
as!
PMPermissionView
permissionView
.
frame
=
frame
self
.
view
.
addSubview
(
permissionView
)
...
...
PhoneManager/Class/Page/Home/Controller/HomeVideoDetailController.swift
View file @
766549b8
...
...
@@ -681,29 +681,35 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
self
.
selectedModel
.
map
{
$0
.
localIdentifier
},
options
:
nil
)
let
fileSize
=
FileTool
()
.
calculateTotalAssetSize
(
fetchResult
:
fetchResult
)
PMLoadingHUD
.
share
.
show
()
PHPhotoLibrary
.
shared
()
.
performChanges
({
PHAssetChangeRequest
.
deleteAssets
(
fetchResult
as
NSFastEnumeration
)
}){
success
,
error
in
if
(
success
)
{
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
print
(
"删除文件成功"
)
if
isAfterAdv
==
false
{
self
.
updateFreeTimes
(
)
CATransaction
.
begin
(
)
CATransaction
.
setCompletionBlock
{
PHPhotoLibrary
.
shared
()
.
performChanges
(
{
PHAssetChangeRequest
.
deleteAssets
(
fetchResult
as
NSFastEnumeration
)
}){
success
,
error
in
if
(
success
){
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
print
(
"删除文件成功"
)
if
isAfterAdv
==
false
{
self
.
updateFreeTimes
()
}
self
.
showDeleteSuccess
(
fileCount
:
self
.
selectedModel
.
count
,
fileSize
:
fileSize
)
// 移除当前总数据源的数据
self
.
updateCurrentPageWhenDeleteAny
()
}
}
else
{
PMLoadingHUD
.
share
.
disMiss
()
if
let
error
=
error
{
print
(
"删除文件时出错:
\(
error
.
localizedDescription
)
"
)
}
self
.
showDeleteSuccess
(
fileCount
:
self
.
selectedModel
.
count
,
fileSize
:
fileSize
)
// 移除当前总数据源的数据
self
.
updateCurrentPageWhenDeleteAny
()
}
}
else
{
PMLoadingHUD
.
share
.
disMiss
()
if
let
error
=
error
{
print
(
"删除文件时出错:
\(
error
.
localizedDescription
)
"
)
}
}
}
CATransaction
.
commit
()
}
// 删除成功页面
...
...
PhoneManager/Class/Page/Public/Loading/PMAnimationLoaing.json
View file @
766549b8
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Page/Public/Loading/PMLoadingView.swift
View file @
766549b8
...
...
@@ -18,12 +18,17 @@ class PMLoadingHUD{
return
loadingView
}()
func
config
(){
//loadingView.animationView.play()
loadingView
.
isHidden
=
false
}
func
show
(
_
title
:
String
=
"Deleting..."
,
_
subTitle
:
String
=
"Please wait on the screen. This might take several minutes."
){
disMiss
()
DispatchQueue
.
main
.
async
{
cWindow
?
.
addSubview
(
self
.
loadingView
)
cWindow
?
.
bringSubviewToFront
(
self
.
loadingView
)
self
.
loadingView
.
setTitle
a
AndSubTitle
(
title
:
title
,
subTitle
:
subTitle
)
self
.
loadingView
.
setTitleAndSubTitle
(
title
:
title
,
subTitle
:
subTitle
)
self
.
loadingView
.
animationView
.
play
()
}
}
...
...
@@ -33,8 +38,8 @@ class PMLoadingHUD{
DispatchQueue
.
main
.
async
{
cWindow
?
.
addSubview
(
self
.
loadingView
)
cWindow
?
.
bringSubviewToFront
(
self
.
loadingView
)
self
.
loadingView
.
setTitle
a
AndSubTitle
(
title
:
title
,
subTitle
:
subTitle
)
self
.
loadingView
.
animationView
.
play
()
self
.
loadingView
.
setTitleAndSubTitle
(
title
:
title
,
subTitle
:
subTitle
)
self
.
loadingView
.
animationView
.
play
()
}
}
...
...
@@ -52,24 +57,29 @@ class PMLoadingHUD{
}
class
PMLoadingView
:
UIView
{
var
title
:
UILabel
!
var
subtitle
:
UILabel
!
var
animationView
:
LottieAnimationView
!
var
title
:
UILabel
!
// 标记动画是否已加载
private
var
isAnimationLoaded
=
false
var
subtitle
:
UILabel
!
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
setupUI
()
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
private
func
setupUI
()
{
self
.
backgroundColor
=
UIColor
.
black
.
withAlphaComponent
(
0.8
)
// 先创建空的动画视图,不加载内容
animationView
=
LottieAnimationView
()
animationView
.
loopMode
=
.
loop
addSubview
(
animationView
)
animationView
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
make
.
centerY
.
equalToSuperview
()
make
.
width
.
equalTo
(
300
)
make
.
height
.
equalTo
(
200
)
}
title
=
UILabel
()
title
.
text
=
"Deleting..."
...
...
@@ -85,37 +95,63 @@ class PMLoadingView: UIView {
subtitle
.
font
=
UIFont
.
systemFont
(
ofSize
:
18
,
weight
:
.
semibold
)
addSubview
(
subtitle
)
// 设置约束
setupConstraints
()
// 异步加载动画
loadAnimationAsync
()
}
private
func
setupConstraints
()
{
animationView
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
make
.
centerY
.
equalToSuperview
()
make
.
width
.
equalTo
(
300
)
make
.
height
.
equalTo
(
300
)
}
title
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
make
.
top
.
equalTo
(
animationView
.
snp
.
bottom
)
.
offset
(
-
80
)
}
subtitle
.
snp
.
makeConstraints
{
make
in
make
.
centerX
.
equalToSuperview
()
make
.
width
.
equalTo
(
250
)
make
.
top
.
equalTo
(
title
.
snp
.
bottom
)
.
offset
(
2
)
}
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
private
func
loadAnimationAsync
()
{
DispatchQueue
.
global
()
.
async
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
// 在后台线程解析动画
let
animation
=
LottieAnimation
.
named
(
"PMAnimationLoaing"
)
DispatchQueue
.
main
.
async
{
// 主线程更新 UI
self
.
animationView
.
animation
=
animation
self
.
isAnimationLoaded
=
true
// 如果视图已经显示,则立即播放
if
self
.
superview
!=
nil
{
self
.
animationView
.
play
()
}
}
}
}
lazy
var
animationView
:
LottieAnimationView
=
{
let
animationView
=
LottieAnimationView
(
name
:
"PMAnimationLoaing"
)
animationView
.
loopMode
=
.
loop
return
animationView
}()
func
setTitleaAndSubTitle
(
title
:
String
,
subTitle
:
String
){
func
setTitleAndSubTitle
(
title
:
String
,
subTitle
:
String
)
{
self
.
title
.
text
=
title
self
.
subtitle
.
text
=
subTitle
}
// 重写添加到父视图的方法,在视图显示时播放动画
// override func didMoveToSuperview() {
// super.didMoveToSuperview()
// if isAnimationLoaded && superview != nil {
// animationView.play()
// }
// }
}
PhoneManager/Class/Tool/Extension.swift/UIViewController+Extension.swift
View file @
766549b8
...
...
@@ -60,3 +60,4 @@ extension UIViewController {
}
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