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
7e531da8
Commit
7e531da8
authored
Apr 11, 2025
by
CZ1004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改首页问题
parent
939708d2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
231 additions
and
221 deletions
+231
-221
CompressCompletedLight.json
...mation/CompressCompletedLight/CompressCompletedLight.json
+1
-1
CompressCompletedLightOld.json
...ion/CompressCompletedLight/CompressCompletedLightOld.json
+1
-0
ChargeInfoSettingView.swift
...ger/Class/Session/Charge/View/ChargeInfoSettingView.swift
+1
-1
HomePhotosDetailViewController.swift
...sion/Home/Controller/HomePhotosDetailViewController.swift
+90
-88
HomeVideoDetailController.swift
...s/Session/Home/Controller/HomeVideoDetailController.swift
+101
-117
HomeViewController.swift
...er/Class/Session/Home/Controller/HomeViewController.swift
+5
-0
VideoDetaiNavView.swift
PhoneManager/Class/Session/Home/View/VideoDetaiNavView.swift
+1
-1
PMShowImgVideoController.swift
...nager/Class/Session/Secret/PMShowImgVideoController.swift
+0
-13
PhotoAndVideoMananger.swift
...l/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
+31
-0
No files found.
PhoneManager/Class/Resource/Animation/CompressCompletedLight/CompressCompletedLight.json
View file @
7e531da8
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Resource/Animation/CompressCompletedLight/CompressCompletedLightOld.json
0 → 100644
View file @
7e531da8
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Session/Charge/View/ChargeInfoSettingView.swift
View file @
7e531da8
...
...
@@ -55,7 +55,7 @@ class ChargeInfoSettingView:UIView {
// 存储到userDefaults
UserDefaults
.
standard
.
set
(
String
(
flag
!
),
forKey
:
"chargePicInfo"
)
let
alert
=
UIAlertController
(
title
:
nil
,
message
:
"
完成
!"
,
preferredStyle
:
.
alert
)
let
alert
=
UIAlertController
(
title
:
nil
,
message
:
"
Done
!"
,
preferredStyle
:
.
alert
)
self
.
responderViewController
()?
.
present
(
alert
,
animated
:
true
,
completion
:
nil
)
// 2 秒后关闭弹窗
...
...
PhoneManager/Class/Session/Home/Controller/HomePhotosDetailViewController.swift
View file @
7e531da8
...
...
@@ -15,6 +15,7 @@ class HomePhotosDetailViewController : BaseViewController {
private
var
currentHeaderView
:
HomePhotosDetailCustomHeaderView
?
var
mediaType
:
PhotsFileType
?
@MainActor
required
init
?(
coder
:
NSCoder
)
{
...
...
@@ -36,6 +37,7 @@ class HomePhotosDetailViewController : BaseViewController {
dataArray
=
dataArray
+
item
}
self
.
resourceData
=
dataArray
self
.
sortByType
(
sortType
:
self
.
currentSort
)
}
var
model
:
HomePhotosModel
...
...
@@ -201,11 +203,19 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
cell
.
cellCallBack
=
{[
weak
self
]
ident
,
order
in
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
async
{
// 点击跳转详情,左右滑动删除照片
let
vc
:
PreViewController
=
PreViewController
()
vc
.
dataSource
=
self
.
resourceData
vc
.
imageIdent
=
ident
// 点击之后跳转详情页面
let
vc
=
PMShowImgVideoController
()
vc
.
state
=
.
similarPhotos
vc
.
currentIdx
=
0
let
dataSource
=
ImageSeletedCollectionItem
()
dataSource
.
isSeleted
=
true
dataSource
.
id
=
ident
// 获取image
dataSource
.
image
=
PhotoAndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
ident
)
vc
.
homeDataSource
=
[
dataSource
]
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
}
cell
.
clickCallBack
=
{[
weak
self
]
click
,
order
in
...
...
@@ -254,6 +264,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
// 点击之后跳转详情页面
}
func
referenceSizeForHeader
(
collectionView
collection
:
UICollectionView
,
layout
:
WaterfallMutiSectionFlowLayout
,
section
:
Int
)
->
CGSize
{
return
CGSize
(
width
:
self
.
collectionView
.
width
,
height
:
headerHeight
)
...
...
@@ -278,6 +289,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
guard
let
self
else
{
return
}
self
.
currentSort
=
sortType
as!
Int
self
.
sortByType
(
sortType
:
self
.
currentSort
)
self
.
changeHeaderTitle
()
}
}
...
...
@@ -292,97 +304,87 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
return
footer
}
}
func
sortByType
(
sortType
:
Int
){
let
viewModel
=
CompressViewModel
()
if
self
.
datas
.
count
>
0
{
switch
sortType
{
/// 改变标题
func
changeHeaderTitle
(){
var
title
:
String
=
"Largest"
switch
self
.
currentSort
{
case
0
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Largest"
// 按照文件大小降序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
1
,
sortKind
:
0
)
title
=
"Largest"
break
case
1
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Smallest"
// 按照文件大小升序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
0
,
sortKind
:
0
)
title
=
"Smallest"
break
case
2
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Newest"
// 按照时间降序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
1
,
sortKind
:
1
)
title
=
"Newest"
break
case
3
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Oldest"
// 按照时间升序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
0
,
sortKind
:
1
)
title
=
"Oldest"
break
default
:
break
}
var
finalData
:
[
String
]
=
[]
for
item
in
self
.
datas
{
finalData
.
append
(
item
.
ident
)
}
self
.
resourceData
=
finalData
self
.
collectionView
.
reloadData
()
}
else
{
DispatchQueue
.
global
()
.
async
{
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
self
.
resourceData
,
options
:
nil
)
let
assetsArray
=
fetchResult
.
objects
(
at
:
IndexSet
(
0
..<
fetchResult
.
count
))
let
options
=
PHImageRequestOptions
()
options
.
isSynchronous
=
false
options
.
deliveryMode
=
.
highQualityFormat
options
.
isNetworkAccessAllowed
=
true
var
count
=
0
for
item
in
assetsArray
{
PHImageManager
.
default
()
.
requestImageDataAndOrientation
(
for
:
item
,
options
:
options
)
{
(
imageData
,
_
,
_
,
error
)
in
guard
let
originalData
=
imageData
else
{
return
}
let
model
=
ResourceModel
(
ident
:
item
.
localIdentifier
,
orgSize
:
Double
(
originalData
.
count
),
createDate
:
item
.
creationDate
!
)
self
.
datas
.
append
(
model
)
}
count
=
count
+
1
// 表示结束了
if
count
==
assetsArray
.
count
{
DispatchQueue
.
main
.
async
{
switch
sortType
{
case
0
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Largest"
// 按照文件大小降序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
1
,
sortKind
:
0
)
break
case
1
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Smallest"
// 按照文件大小升序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
0
,
sortKind
:
0
)
break
case
2
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Newest"
// 按照时间降序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
1
,
sortKind
:
1
)
break
case
3
:
self
.
currentHeaderView
!.
selectlabel
.
text
=
"Oldest"
// 按照时间升序
self
.
datas
=
viewModel
.
sortRsource
(
resource
:
self
.
datas
,
sortType
:
0
,
sortKind
:
1
)
break
default
:
break
self
.
currentHeaderView
!.
selectlabel
.
text
=
title
self
.
collectionView
.
reloadData
()
}
var
finalData
:
[
String
]
=
[]
for
item
in
self
.
datas
{
finalData
.
append
(
item
.
ident
)
}
self
.
resourceData
=
finalData
self
.
collectionView
.
reloadData
()
/// 对当前页面资源排序(注意这里获取的资源是image)
/// - Parameter sortType: 排序类型
func
sortByType
(
sortType
:
Int
){
// 实际就是对Video数据排序
var
assetsWithSize
:
[(
asset
:
PHAsset
,
size
:
Int64
)]
=
[]
let
allImagesResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
self
.
resourceData
,
options
:
nil
)
let
allImages
=
allImagesResult
.
objects
(
at
:
IndexSet
(
0
..<
allImagesResult
.
count
))
for
item
in
allImages
{
let
resources
=
PHAssetResource
.
assetResources
(
for
:
item
)
for
resource
in
resources
{
if
let
fileSize
=
resource
.
value
(
forKey
:
"fileSize"
)
as?
Int64
{
assetsWithSize
.
append
((
item
,
fileSize
))
}
}
}
if
sortType
==
0
||
sortType
==
1
{
if
sortType
==
0
{
assetsWithSize
=
assetsWithSize
.
sorted
{
$0
.
size
>
$1
.
size
}
}
else
{
assetsWithSize
=
assetsWithSize
.
sorted
{
$0
.
size
<
$1
.
size
}
}
// 输出排序后的资源信息
var
sources
:[
String
]
=
[]
for
(
_
,
item
)
in
assetsWithSize
.
enumerated
()
{
sources
.
append
(
item
.
asset
.
localIdentifier
)
}
self
.
resourceData
=
sources
}
if
sortType
==
2
||
sortType
==
3
{
var
assetsWithDate
:
[(
asset
:
PHAsset
,
size
:
Int64
)]
=
[]
if
sortType
==
2
{
assetsWithDate
=
assetsWithSize
.
sorted
{
guard
let
date1
=
$0
.
asset
.
creationDate
,
let
date2
=
$1
.
asset
.
creationDate
else
{
return
false
}
return
date1
>
date2
}
}
else
{
assetsWithDate
=
assetsWithSize
.
sorted
{
guard
let
date1
=
$0
.
asset
.
creationDate
,
let
date2
=
$1
.
asset
.
creationDate
else
{
return
false
}
return
date1
<
date2
}
}
var
sources
:[
String
]
=
[]
for
item
in
assetsWithDate
{
sources
.
append
(
item
.
asset
.
localIdentifier
)
}
self
.
resourceData
=
sources
}
}
...
...
@@ -407,7 +409,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
// 更新页面
DispatchQueue
.
main
.
async
{
self
.
clearSelected
()
self
.
collectionView
.
reload
Data
(
)
self
.
collectionView
.
reload
Sections
(
IndexSet
(
integer
:
0
)
)
}
}
...
...
PhoneManager/Class/Session/Home/Controller/HomeVideoDetailController.swift
View file @
7e531da8
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Session/Home/Controller/HomeViewController.swift
View file @
7e531da8
...
...
@@ -60,6 +60,11 @@ class HomeViewController:BaseViewController {
if
otherItemRow
==
2
||
otherItemRow
==
4
{
DispatchQueue
.
main
.
async
{
let
vc
:
HomePhotosDetailViewController
=
HomePhotosDetailViewController
(
model
:
model
)
if
otherItemRow
==
2
{
vc
.
mediaType
=
.
screenshots
}
else
{
vc
.
mediaType
=
.
Other
}
vc
.
dealData
()
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
...
...
PhoneManager/Class/Session/Home/View/VideoDetaiNavView.swift
View file @
7e531da8
...
...
@@ -54,7 +54,7 @@ class VideoDetaiNavView : UIView {
self
.
addSubview
(
self
.
seletedAllBtn
)
self
.
seletedAllBtn
.
snp
.
makeConstraints
{
make
in
make
.
right
.
equalToSuperview
()
.
offset
(
-
15
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
23
)
make
.
centerY
.
equalTo
(
self
.
backButton
.
snp
.
centerY
)
}
...
...
PhoneManager/Class/Session/Secret/PMShowImgVideoController.swift
View file @
7e531da8
...
...
@@ -232,19 +232,6 @@ extension PMShowImgVideoController : UICollectionViewDelegate,UICollectionViewDa
return
}
PHPhotoLibrary
.
requestAuthorization
{
status
in
switch
status
{
case
.
authorized
:
print
(
"Access granted"
)
case
.
denied
,
.
restricted
:
print
(
"Access denied"
)
case
.
notDetermined
:
print
(
"Access not determined"
)
@unknown
default
:
print
(
"Unhandled authorization status"
)
}
}
let
options
=
PHVideoRequestOptions
()
options
.
isNetworkAccessAllowed
=
true
// 允许从网络下载
options
.
deliveryMode
=
.
automatic
// 要求高质量格式
...
...
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
View file @
7e531da8
...
...
@@ -799,6 +799,37 @@ class PhotoAndVideoMananger {
// MARK: - 处理截图数据-------------------------------------------------------
/// 获取视频第一帧
/// - Parameters:
/// - ident: 视频的标识
/// - finished: 完成回调
func
getVideoImageByIdent
(
ident
:
String
,
finished
:
@escaping
(
UIImage
)
->
Void
,
errorHandler
:
@escaping
()
->
Void
){
// 定义请求选项来获取视频的第一帧
let
options
=
PHImageRequestOptions
()
// 获取当前版本的照片或视频
options
.
version
=
.
current
// 尽可能快地提供结果
options
.
deliveryMode
=
.
opportunistic
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
true
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
PhotoAndVideoMananger
.
mananger
.
getPHAsssetwithID
(
ids
:
[
ident
]){
// 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager
.
default
()
.
requestImage
(
for
:
videoAsset
,
targetSize
:
CGSize
(
width
:
400
,
height
:
400
),
contentMode
:
PHImageContentMode
.
aspectFit
,
options
:
options
)
{
image
,
_
in
// 处理获取到的图片
if
let
thumbnailImage
=
image
{
// 使用获取到的图片,例如显示在UIImageView上
finished
(
thumbnailImage
)
}
else
{
errorHandler
()
}
}
}
}
}
...
...
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