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
b5f7ddad
Commit
b5f7ddad
authored
May 27, 2025
by
shenyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
广告增加版本控制,广告管理类更换,删除无效资源
parent
86e200c3
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1187 additions
and
2333 deletions
+1187
-2333
project.pbxproj
PhoneManager.xcodeproj/project.pbxproj
+2
-4
AppDelegate.swift
PhoneManager/AppDelegate.swift
+7
-1
ADManager.swift
PhoneManager/Class/Manager/ADManager/ADManager.swift
+632
-0
ADModel.swift
PhoneManager/Class/Manager/ADManager/ADModel.swift
+63
-0
APIReportManager.swift
PhoneManager/Class/Manager/APIReport/APIReportManager.swift
+12
-9
PhotoManager.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
+108
-0
PhotoModel.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoModel.swift
+20
-0
SecretPhotoManager.swift
...ger/Class/Manager/PMPhotoManager/SecretPhotoManager.swift
+87
-0
AdvManager.swift
...Manager/Class/Page/Advertisement/Manager/AdvManager.swift
+9
-7
AdvTipDeleteView.swift
...ager/Class/Page/Advertisement/View/AdvTipDeleteView.swift
+1
-1
ChargeInfoViewController.swift
...ass/Page/Charge/Controller/ChargeInfoViewController.swift
+10
-4
CompressSelectCell.swift
...Manager/Class/Page/Compress/Cell/CompressSelectCell.swift
+22
-18
CompressQualityController.swift
.../Page/Compress/Controller/CompressQualityController.swift
+13
-7
PreViewController.swift
...er/Class/Page/Compress/Controller/PreViewController.swift
+1
-1
MergeButtonView.swift
...Manager/Class/Page/Contact/View/Dup/MergeButtonView.swift
+14
-7
MergePreButtonView.swift
...ager/Class/Page/Contact/View/Dup/MergePreButtonView.swift
+13
-7
HomeInfoViewController.swift
...r/Class/Page/Home/Controller/HomeInfoViewController.swift
+21
-5
HomePhotosDetailViewController.swift
...Page/Home/Controller/HomePhotosDetailViewController.swift
+12
-7
HomeVideoDetailController.swift
...lass/Page/Home/Controller/HomeVideoDetailController.swift
+15
-8
HomeViewController.swift
...nager/Class/Page/Home/Controller/HomeViewController.swift
+24
-21
PhotoRemoveViewController.swift
...lass/Page/Home/Controller/PhotoRemoveViewController.swift
+1
-1
PhotoSlideViewController.swift
...Class/Page/Home/Controller/PhotoSlideViewController.swift
+2
-2
HomePhotosModel .swift
...Manager/Class/Page/Home/View/Model/HomePhotosModel .swift
+0
-386
TrashSubView.swift
PhoneManager/Class/Page/Home/View/TrashSubView.swift
+18
-8
PermissionVC.swift
PhoneManager/Class/Page/Landing/PermissionVC.swift
+18
-16
SecretViewController.swift
PhoneManager/Class/Page/Secret/SecretViewController.swift
+1
-2
SettingViewController.swift
.../Page/Settings/ViewController/SettingViewController.swift
+29
-13
TrashViewController.swift
...ger/Class/Page/Trash/Controller/TrashViewController.swift
+17
-6
TrashDataManager.swift
...nager/Class/Page/Trash/DataManager/TrashDataManager.swift
+1
-1
chargingStart.png
PhoneManager/Class/Resource/Image/chargingStart.png
+0
-0
img_bj_start_1.png
PhoneManager/Class/Resource/Image/img_bj_start_1.png
+0
-0
img_star_start_2.png
PhoneManager/Class/Resource/Image/img_star_start_2.png
+0
-0
Resnet50.mlmodel
PhoneManager/Class/Resource/Model/Resnet50.mlmodel
+0
-0
EmailCleanListView.swift
...Manager/Class/Session/Email/View/EmailCleanListView.swift
+2
-1
EmailContentView.swift
PhoneManager/Class/Session/Email/View/EmailContentView.swift
+1
-1
PhotoAndVideoMananger.swift
...l/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
+0
-1413
PhotoSimilarOptimizer.swift
...l/Class/PhotoAndVideoMananger/PhotoSimilarOptimizer.swift
+0
-288
ResourceManager.swift
...ss/Tool/Class/PhotoAndVideoMananger/ResourceManager.swift
+0
-62
SystemCommentManager.swift
...ool/Class/SystemCommentManager/SystemCommentManager.swift
+1
-1
NSString+Extension.swift
...nager/Class/Tool/Extension.swift/NSString+Extension.swift
+9
-0
Singleton.swift
PhoneManager/Class/Tool/Singleton/Singleton.swift
+1
-25
No files found.
PhoneManager.xcodeproj/project.pbxproj
View file @
b5f7ddad
...
@@ -816,7 +816,7 @@
...
@@ -816,7 +816,7 @@
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_STYLE
=
Automatic
;
CODE_SIGN_STYLE
=
Automatic
;
CURRENT_PROJECT_VERSION
=
2
;
CURRENT_PROJECT_VERSION
=
3
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
GENERATE_INFOPLIST_FILE
=
YES
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
...
@@ -831,7 +831,6 @@
...
@@ -831,7 +831,6 @@
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIStatusBarStyle
=
""
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
...
@@ -865,7 +864,7 @@
...
@@ -865,7 +864,7 @@
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_STYLE
=
Automatic
;
CODE_SIGN_STYLE
=
Automatic
;
CURRENT_PROJECT_VERSION
=
2
;
CURRENT_PROJECT_VERSION
=
3
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
GENERATE_INFOPLIST_FILE
=
YES
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
...
@@ -880,7 +879,6 @@
...
@@ -880,7 +879,6 @@
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIStatusBarStyle
=
""
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
...
...
PhoneManager/AppDelegate.swift
View file @
b5f7ddad
...
@@ -66,7 +66,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
...
@@ -66,7 +66,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}
}
// 初始化广告SDK
// 初始化广告SDK
A
dv
Manager
.
shared
.
initAdertisementSDK
()
A
D
Manager
.
shared
.
initAdertisementSDK
()
FirebaseApp
.
configure
()
FirebaseApp
.
configure
()
PMEmailManager
.
shareManager
.
restore
()
PMEmailManager
.
shareManager
.
restore
()
SettingConfiguration
.
share
.
initData
()
SettingConfiguration
.
share
.
initData
()
...
@@ -85,6 +85,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
...
@@ -85,6 +85,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
self
.
reportAdjsutADJAttribution
(
attribution
)
self
.
reportAdjsutADJAttribution
(
attribution
)
}
}
PMLoadingHUD
.
share
.
config
()
PMLoadingHUD
.
share
.
config
()
UNUserNotificationCenter
.
current
()
.
delegate
=
self
UNUserNotificationCenter
.
current
()
.
delegate
=
self
return
true
return
true
...
@@ -188,6 +189,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
...
@@ -188,6 +189,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
APIReportManager
.
shared
.
startReport
(
type
:
.
app_start
)
APIReportManager
.
shared
.
startReport
(
type
:
.
app_start
)
UserDef
.
shard
.
saveFirstStart
()
UserDef
.
shard
.
saveFirstStart
()
}
}
ADManager
.
shared
.
getAppStoreVersion
{
value
in
if
let
version
=
value
{
ADManager
.
shared
.
onlineVersion
=
version
}
}
break
break
}
}
}
}
...
...
PhoneManager/Class/Manager/ADManager/ADManager.swift
0 → 100644
View file @
b5f7ddad
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Manager/ADManager/ADModel.swift
0 → 100644
View file @
b5f7ddad
//
// ADModel.swift
// PhoneManager
//
// Created by edy on 2025/5/26.
//
import
Foundation
enum
ADShowError
{
case
limit
case
noAd
case
unkown
case
presentFail
case
fail
(
Error
?)
var
localizedDescription
:
String
{
switch
self
{
case
.
limit
:
return
"ad is limit time"
case
.
noAd
:
return
"no ad to show"
case
.
unkown
:
return
"unkown error"
case
.
fail
(
let
error
):
return
error
?
.
localizedDescription
??
"fail"
case
.
presentFail
:
return
"can not present ad"
}
}
}
enum
ADShowTypeEnum
{
case
Merge
,
PhotoDelete
,
Secret
,
Email
,
Charge
,
Compress
,
videoDdelete
,
Trash
,
EmailLoginSignOut
,
Widgets
var
name
:
String
{
switch
self
{
case
.
Merge
:
return
"Merge"
case
.
PhotoDelete
:
return
"PhotoDelete"
case
.
Secret
:
return
"Secret"
case
.
Email
:
return
"Email"
case
.
Charge
:
return
"Charge"
case
.
Compress
:
return
"Compress"
case
.
videoDdelete
:
return
"videoDelete"
case
.
Trash
:
return
"Trash"
case
.
EmailLoginSignOut
:
return
"EmailLoginSignOut"
case
.
Widgets
:
return
"Widgets"
}
}
}
PhoneManager/Class/Manager/APIReport/APIReportManager.swift
View file @
b5f7ddad
...
@@ -68,30 +68,33 @@ struct APIReportManager{
...
@@ -68,30 +68,33 @@ struct APIReportManager{
}
}
private
func
getbpBody
()
->
[
String
:
String
]{
private
func
getbpBody
()
->
[
String
:
String
]{
// var DEBUG = true
// #if DEBUG
// DEBUG = true
// #else
// DEBUG = false
// #endif
let
DEBUG
=
false
let
body
=
[
let
body
=
[
"
\(
bundleId
)
_3"
:
"
\(
Device
.
current
)
"
,
//手机型号
"
\(
bundleId
)
_3"
:
"
\(
Device
.
current
)
"
,
//手机型号
"
\(
bundleId
)
_4"
:
"Apple"
,
// 手机厂商
"
\(
bundleId
)
_4"
:
"Apple"
,
// 手机厂商
"
\(
bundleId
)
_5"
:
UIDevice
.
current
.
systemVersion
,
//系统版本号
"
\(
bundleId
)
_5"
:
UIDevice
.
current
.
systemVersion
,
//系统版本号
"
\(
bundleId
)
_8"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleShortVersionString"
]
as?
String
??
""
,
// APP版本号
"
\(
bundleId
)
_8"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleShortVersionString"
]
as?
String
??
""
,
// APP版本号
"
\(
bundleId
)
_9"
:
DeviceIDManager
.
shared
.
deviceID
,
//UUID
"
\(
bundleId
)
_9"
:
DeviceIDManager
.
shared
.
deviceID
,
//UUID
"
\(
bundleId
)
_10"
:
A
dv
Manager
.
shared
.
getIDFA
(),
//iafa
"
\(
bundleId
)
_10"
:
A
D
Manager
.
shared
.
getIDFA
(),
//iafa
"
\(
bundleId
)
_13"
:
"iOS"
,
// platform
"
\(
bundleId
)
_13"
:
"iOS"
,
// platform
"
\(
bundleId
)
_14"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleVersion"
]
as?
String
??
""
,
//版本号
"
\(
bundleId
)
_14"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleVersion"
]
as?
String
??
""
,
//版本号
"
\(
bundleId
)
_15"
:
"AppStore"
,
//渠道标识
"
\(
bundleId
)
_15"
:
"AppStore"
,
//渠道标识
"
\(
bundleId
)
_24"
:
DEBUG
?
"debug"
:
"release"
,
//环境 debug:开发环境 release:正式环境
"
\(
bundleId
)
_24"
:
isDebug
()
?
"debug"
:
"release"
,
//环境 debug:开发环境 release:正式环境
"
\(
bundleId
)
_34"
:
TimeZone
.
current
.
identifier
,
//手机本地时区
"
\(
bundleId
)
_34"
:
TimeZone
.
current
.
identifier
,
//手机本地时区
"
\(
bundleId
)
_35"
:
DeviceIDManager
.
shared
.
deviceID
//UUID
"
\(
bundleId
)
_35"
:
DeviceIDManager
.
shared
.
deviceID
//UUID
]
]
return
body
return
body
}
}
// 使用编译时条件的辅助函数
private
func
isDebug
()
->
Bool
{
#if DEBUG
return
true
#else
return
false
#endif
}
}
}
...
...
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
View file @
b5f7ddad
...
@@ -833,4 +833,112 @@ extension PhotoManager{
...
@@ -833,4 +833,112 @@ extension PhotoManager{
filterSimilarScreenShotModels
=
similarShots
filterSimilarScreenShotModels
=
similarShots
}
}
func
getPHAsssetwithID
(
ids
:[
String
])
->
PHAsset
?
{
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
ids
,
options
:
nil
)
let
assetsArray
=
fetchResult
.
objects
(
at
:
IndexSet
(
0
..<
fetchResult
.
count
))
return
assetsArray
.
first
}
func
getPHAsssetwithIDs
(
ids
:[
AssetModel
])
->
[
PHAsset
]?
{
let
localIdentifiers
=
ids
.
map
{
$0
.
localIdentifier
}
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
localIdentifiers
,
options
:
nil
)
let
assetsArray
=
fetchResult
.
objects
(
at
:
IndexSet
(
0
..<
fetchResult
.
count
))
return
assetsArray
}
func
getImageFromAssetID
(
id
:
String
)
->
UIImage
?
{
if
let
asset
=
getPHAsssetwithID
(
ids
:
[
id
])
{
return
getImageFromAsset
(
asset
:
asset
)
}
else
{
return
nil
}
}
func
getImageFromAsset
(
asset
:
PHAsset
)
->
UIImage
?
{
var
image
:
UIImage
?
let
imageManager
=
PHImageManager
.
default
()
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
}
return
image
}
static
func
deleteAssets
(
localIdentifiers
:
[
String
],
suc
:
@escaping
()
->
())
{
// 获取要删除的 PHAsset
PMLoadingHUD
.
share
.
show
()
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
()
}
}
func
asynGetImageFromAssetID
(
id
:
String
,
finised
:
@escaping
(
UIImage
)
->
Void
)
{
if
let
asset
=
getPHAsssetwithID
(
ids
:
[
id
])
{
let
imageManager
=
PHImageManager
.
default
()
let
targetSize
=
CGSize
(
width
:
400
,
height
:
400
)
let
options
=
PHImageRequestOptions
()
options
.
isSynchronous
=
false
options
.
deliveryMode
=
.
opportunistic
options
.
isNetworkAccessAllowed
=
true
imageManager
.
requestImage
(
for
:
asset
,
targetSize
:
targetSize
,
contentMode
:
.
aspectFill
,
options
:
options
)
{
result
,
_
in
finised
(
result
??
UIImage
())
}
}
else
{
finised
(
UIImage
())
}
}
/// 获取视频第一帧
/// - Parameters:
/// - ident: 视频的标识
/// - finished: 完成回调
func
getVideoImageByIdent
(
ident
:
AssetModel
,
finished
:
@escaping
(
UIImage
)
->
Void
,
errorHandler
:
@escaping
()
->
Void
){
// 定义请求选项来获取视频的第一帧
let
options
=
PHImageRequestOptions
()
// 获取当前版本的照片或视频
options
.
version
=
.
current
// 尽可能快地提供结果
options
.
deliveryMode
=
.
highQualityFormat
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
false
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
getPHAsssetwithID
(
ids
:
[
ident
.
localIdentifier
]){
// 使用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
()
}
}
}
}
}
}
PhoneManager/Class/Manager/PMPhotoManager/PhotoModel.swift
View file @
b5f7ddad
...
@@ -191,3 +191,23 @@ extension Sequence where Element == [AssetModel] {
...
@@ -191,3 +191,23 @@ extension Sequence where Element == [AssetModel] {
}
}
}
}
}
}
enum
PrivacyType
:
String
{
case
authorized
=
"authorized"
case
notDetermined
=
"notDetermined"
case
denied
=
"denied"
case
restricted
=
"restricted"
}
enum
PhotsFileType
:
String
{
case
duplicates
=
"Duplicates"
case
similar
=
"Similar"
case
videos
=
"Videos"
case
similarScreenshots
=
"Similar Screenshots"
case
screenshots
=
"Screenshots"
case
SimilarVideos
=
"Similar Videos"
case
Other
=
"Other"
}
PhoneManager/Class/Manager/PMPhotoManager/SecretPhotoManager.swift
0 → 100644
View file @
b5f7ddad
//
// SecretPhotoManager.swift
// PhoneManager
//
// Created by edy on 2025/5/26.
//
import
Foundation
import
UIKit
import
HXPhotoPicker
import
CryptoKit
import
Photos
class
SecretPhotoManager
:
NSObject
,
PhotoPickerControllerDelegate
,
CameraControllerDelegate
{
func
cameraController
(
_
cameraController
:
HXPhotoPicker
.
CameraController
,
didFinishWithResult
result
:
HXPhotoPicker
.
CameraController
.
Result
,
phAsset
:
PHAsset
?,
location
:
CLLocation
?)
{
switch
result
{
case
.
image
(
let
image
):
image
.
compressImage
(
0.3
)
{[
weak
self
]
image
in
let
data
=
image
.
pngData
()
guard
self
?
.
callback
!=
nil
else
{
return
}
self
?
.
callback
!
(
0
,
data
)
}
break
case
.
video
(
let
fileUrl
):
let
data
=
NSData
(
contentsOf
:
fileUrl
)
guard
callback
!=
nil
else
{
return
}
callback
!
(
1
,
data
)
break
default
:
break
}
}
func
pickerController
(
_
pickerController
:
PhotoPickerController
,
didFinishSelection
result
:
PickerResult
)
{
guard
callback
!=
nil
else
{
return
}
callback
!
(
-
1
,
result
.
photoAssets
)
}
func
deleteAssets
(
_
assets
:[
PHAsset
]
=
[])
->
Void
{
if
assets
.
count
>
0
{
PMLoadingHUD
.
share
.
show
()
PHPhotoLibrary
.
shared
()
.
performChanges
({
PHAssetChangeRequest
.
deleteAssets
(
assets
as
NSFastEnumeration
)
})
{
success
,
error
in
if
success
{
print
(
"删除成功"
)
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
}
}
else
if
let
error
=
error
{
DispatchQueue
.
main
.
async
{
PMLoadingHUD
.
share
.
disMiss
()
}
print
(
"删除失败:
\(
error
.
localizedDescription
)
"
)
}
}
}
}
static
let
share
=
SecretPhotoManager
()
var
callback
:((
Int
,
Any
)
->
Void
)?
func
show
(
_
type
:
Int
)
->
Void
{
if
type
==
0
{
let
config
=
CameraConfiguration
()
let
vc
=
CameraController
(
config
:
config
,
type
:
.
all
,
delegate
:
self
)
vc
.
modalPresentationStyle
=
.
overFullScreen
guard
let
root
=
cWindow
?
.
rootViewController
else
{
return
}
root
.
present
(
vc
,
animated
:
true
)
}
else
{
var
config
=
PickerConfiguration
()
config
.
selectMode
=
.
multiple
config
.
maximumSelectedCount
=
4
let
vc
=
PhotoPickerController
(
picker
:
config
,
delegate
:
self
)
vc
.
modalPresentationStyle
=
.
overFullScreen
guard
let
root
=
cWindow
?
.
rootViewController
else
{
return
}
root
.
present
(
vc
,
animated
:
true
)
}
}
}
PhoneManager/Class/Page/Advertisement/Manager/AdvManager.swift
View file @
b5f7ddad
...
@@ -23,12 +23,12 @@ enum AdvertisementType {
...
@@ -23,12 +23,12 @@ enum AdvertisementType {
class
AdvManager
:
NSObject
,
FullScreenContentDelegate
{
class
AdvManager
:
NSObject
,
FullScreenContentDelegate
{
// fixme:上线前更改
// fixme:上线前更改
private
static
let
REWARDED_INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3480207748580737/4276457203"
//
private static let REWARDED_INTERSTITIALAD_KEY : String = "ca-app-pub-3480207748580737/4276457203"
private
static
let
INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3480207748580737/5836950888"
//
private static let INTERSTITIALAD_KEY : String = "ca-app-pub-3480207748580737/5836950888"
// info.plist: ca-app-pub-3480207748580737~4236262472
// info.plist: ca-app-pub-3480207748580737~4236262472
//
private static let REWARDED_INTERSTITIALAD_KEY : String = "ca-app-pub-3940256099942544/6978759866"
private
static
let
REWARDED_INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3940256099942544/6978759866"
//
private static let INTERSTITIALAD_KEY : String = "ca-app-pub-3940256099942544/4411468910"
private
static
let
INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3940256099942544/4411468910"
static
let
shared
:
AdvManager
=
AdvManager
()
static
let
shared
:
AdvManager
=
AdvManager
()
...
@@ -253,10 +253,12 @@ class AdvManager : NSObject, FullScreenContentDelegate {
...
@@ -253,10 +253,12 @@ class AdvManager : NSObject, FullScreenContentDelegate {
await
self
.
loadRewardedInterstitialAd
()
await
self
.
loadRewardedInterstitialAd
()
}
}
if
!
isByInter
{
if
!
isByInter
{
if
let
inter
=
self
.
interstitial
{
showInterstitialAd
(
vc
:
vc
,
isByReward
:
true
)
showInterstitialAd
(
vc
:
vc
,
isByReward
:
true
)
}
else
{
}
else
{
showErrMessage
(
vc
:
vc
)
showErrMessage
(
vc
:
vc
)
}
}
}
return
return
}
}
self
.
adFromName
=
from
self
.
adFromName
=
from
...
...
PhoneManager/Class/Page/Advertisement/View/AdvTipDeleteView.swift
View file @
b5f7ddad
...
@@ -306,7 +306,7 @@ extension AdvTipDeleteView : UICollectionViewDataSource, UICollectionViewDelegat
...
@@ -306,7 +306,7 @@ extension AdvTipDeleteView : UICollectionViewDataSource, UICollectionViewDelegat
// }
// }
// 最多25张使用同步
// 最多25张使用同步
if
let
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
self
.
dataSource
[
indexPath
.
item
]
.
localIdentifier
)
{
if
let
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
self
.
dataSource
[
indexPath
.
item
]
.
localIdentifier
)
{
cell
.
imageView
.
image
=
image
cell
.
imageView
.
image
=
image
}
}
return
cell
return
cell
...
...
PhoneManager/Class/Page/Charge/Controller/ChargeInfoViewController.swift
View file @
b5f7ddad
...
@@ -78,9 +78,9 @@ class ChargeInfoViewController:BaseViewController {
...
@@ -78,9 +78,9 @@ class ChargeInfoViewController:BaseViewController {
self
.
view
.
hideBlur
()
self
.
view
.
hideBlur
()
if
isSure
{
if
isSure
{
self
.
popAdverTisement
()
self
.
popAdverTisement
()
AdvManager
.
shared
.
finisedCallBack
=
{
//
AdvManager.shared.finisedCallBack = {
self
.
setAnimation
()
//
self.setAnimation()
}
//
}
}
}
}
}
}
}
...
@@ -239,7 +239,13 @@ class ChargeInfoViewController:BaseViewController {
...
@@ -239,7 +239,13 @@ class ChargeInfoViewController:BaseViewController {
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"charge"
)
//AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"charge")
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Charge
.
name
)
{
self
.
setAnimation
()
}
showFailBlock
:
{
error
in
}
}
}
}
}
PhoneManager/Class/Page/Compress/Cell/CompressSelectCell.swift
View file @
b5f7ddad
...
@@ -36,24 +36,28 @@ class CompressSelectCell : UICollectionViewCell {
...
@@ -36,24 +36,28 @@ class CompressSelectCell : UICollectionViewCell {
var
model
:
AssetModel
?
{
var
model
:
AssetModel
?
{
didSet
{
didSet
{
guard
let
model
=
self
.
model
else
{
return
}
guard
let
model
=
self
.
model
else
{
return
}
self
.
backImageView
.
image
=
UIImage
()
let
placeImage
=
currentMediaType
==
.
compressPhoto
?
"videosmoren"
:
"othermoren"
if
self
.
currentMediaType
==
.
compressPhoto
{
self
.
backImageView
.
asset
.
load
(
withLocalIdentifier
:
model
.
localIdentifier
,
placeholder
:
UIImage
.
init
(
named
:
placeImage
))
let
viewModel
=
CompressViewModel
()
viewModel
.
getImageFromAssetIdentifier
(
identifier
:
model
.
localIdentifier
)
{[
weak
self
]
image
in
guard
let
self
else
{
return
}
// self.backImageView.image = UIImage()
DispatchQueue
.
main
.
async
{
// if self.currentMediaType == .compressPhoto {
self
.
backImageView
.
image
=
image
// let viewModel = CompressViewModel()
}
// viewModel.getImageFromAssetIdentifier(identifier: model.localIdentifier) {[weak self] image in
}
// guard let self else { return}
}
else
{
// DispatchQueue.main.async {
PhotoAndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
model
)
{
image
in
// self.backImageView.image = image
DispatchQueue
.
main
.
async
{
// }
self
.
backImageView
.
image
=
image
// }
}
// }else {
}
errorHandler
:
{
// PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: model) { image in
print
(
"获取视频图片资源失败"
)
// DispatchQueue.main.async {
}
// self.backImageView.image = image
}
// }
// } errorHandler: {
// print("获取视频图片资源失败")
// }
// }
// 这里不再进行计算了 直接按照50%的去计算
// 这里不再进行计算了 直接按照50%的去计算
let
saveSize
=
model
.
assetSize
/
2
let
saveSize
=
model
.
assetSize
/
2
let
sizeKB
:
Double
=
saveSize
/
1000
let
sizeKB
:
Double
=
saveSize
/
1000
...
...
PhoneManager/Class/Page/Compress/Controller/CompressQualityController.swift
View file @
b5f7ddad
...
@@ -290,12 +290,12 @@ class CompressQualityController : BaseViewController{
...
@@ -290,12 +290,12 @@ class CompressQualityController : BaseViewController{
alertView
.
dismiss
(
animated
:
true
)
{
alertView
.
dismiss
(
animated
:
true
)
{
if
isSure
{
if
isSure
{
self
.
popAdverTisement
()
self
.
popAdverTisement
()
AdvManager
.
shared
.
finisedCallBack
=
{
//
AdvManager.shared.finisedCallBack = {
self
.
jumpToNextPage
()
//
self.jumpToNextPage()
}
//
}
AdvManager
.
shared
.
failueFinishedCallBack
=
{
//
AdvManager.shared.failueFinishedCallBack = {
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
//
self.navigationController?.popViewController(animated: true)
}
//
}
}
}
}
}
}
}
...
@@ -319,7 +319,13 @@ class CompressQualityController : BaseViewController{
...
@@ -319,7 +319,13 @@ class CompressQualityController : BaseViewController{
}
}
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"compress"
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"compress")
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Compress
.
name
)
{
self
.
jumpToNextPage
()
}
showFailBlock
:
{
error
in
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
}
}
}
}
}
PhoneManager/Class/Page/Compress/Controller/PreViewController.swift
View file @
b5f7ddad
...
@@ -15,7 +15,7 @@ class PreViewController : BaseViewController {
...
@@ -15,7 +15,7 @@ class PreViewController : BaseViewController {
lazy
var
preImageView
:
UIImageView
=
{
lazy
var
preImageView
:
UIImageView
=
{
let
view
=
UIImageView
(
frame
:
CGRect
(
x
:
0
,
y
:
self
.
titleView
.
height
,
width
:
self
.
view
.
width
,
height
:
self
.
view
.
height
-
self
.
titleView
.
height
))
let
view
=
UIImageView
(
frame
:
CGRect
(
x
:
0
,
y
:
self
.
titleView
.
height
,
width
:
self
.
view
.
width
,
height
:
self
.
view
.
height
-
self
.
titleView
.
height
))
view
.
backgroundColor
=
.
white
view
.
backgroundColor
=
.
white
view
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
self
.
imageIdent
)
view
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
self
.
imageIdent
)
view
.
contentMode
=
.
scaleAspectFit
view
.
contentMode
=
.
scaleAspectFit
view
.
clipsToBounds
=
true
view
.
clipsToBounds
=
true
...
...
PhoneManager/Class/Page/Contact/View/Dup/MergeButtonView.swift
View file @
b5f7ddad
...
@@ -63,14 +63,21 @@ extension MergeButtonView {
...
@@ -63,14 +63,21 @@ extension MergeButtonView {
self
.
alertWhenMergeContact
()
self
.
alertWhenMergeContact
()
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
// 添加的时候需要先弹出广告
// 添加的时候需要先弹出广告
if
let
vc
=
self
.
responderViewController
()
{
// if let vc = self.responderViewController() {
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
vc
,
from
:
"merge"
,
needAlert
:
true
)
// AdvManager.shared.showInterstitialAd(vc: vc,from:"merge",needAlert: true)
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
self
.
alertWhenMergeContact
()
// self.alertWhenMergeContact()
}
// }
}
else
{
// }else {
self
.
alertWhenMergeContact
()
// self.alertWhenMergeContact()
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Merge
.
name
)
{[
weak
self
]
in
guard
let
weakSelf
=
self
else
{
return
}
weakSelf
.
alertWhenMergeContact
()
}
showFailBlock
:
{
_
in
ADManager
.
shared
.
showErrMessage
()
}
}
}
else
{
}
else
{
self
.
alertWhenMergeContact
()
self
.
alertWhenMergeContact
()
}
}
...
...
PhoneManager/Class/Page/Contact/View/Dup/MergePreButtonView.swift
View file @
b5f7ddad
...
@@ -60,13 +60,19 @@ extension MergePreButtonView {
...
@@ -60,13 +60,19 @@ extension MergePreButtonView {
@objc
func
mergePre
(){
@objc
func
mergePre
(){
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
// 添加的时候需要先弹出广告
// 添加的时候需要先弹出广告
if
let
vc
=
self
.
responderViewController
()
{
// if let vc = self.responderViewController() {
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
vc
,
needAlert
:
true
)
// AdvManager.shared.showInterstitialAd(vc: vc,needAlert: true)
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
self
.
mergePreCallBack
()
// self.mergePreCallBack()
}
// }
}
else
{
// }else {
self
.
mergePreCallBack
()
// self.mergePreCallBack()
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Merge
.
name
)
{[
weak
self
]
in
guard
let
weakSelf
=
self
else
{
return
}
weakSelf
.
mergePreCallBack
()
}
showFailBlock
:
{
_
in
ADManager
.
shared
.
showErrMessage
()
}
}
}
else
{
}
else
{
self
.
mergePreCallBack
()
self
.
mergePreCallBack
()
...
...
PhoneManager/Class/Page/Home/Controller/HomeInfoViewController.swift
View file @
b5f7ddad
...
@@ -136,7 +136,7 @@ class HomeInfoViewController:BaseViewController {
...
@@ -136,7 +136,7 @@ class HomeInfoViewController:BaseViewController {
view
.
dataSource
=
dealArray
view
.
dataSource
=
dealArray
// 获取当前免费次数
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
if
freeCount
<=
0
{
HomePayViewController
.
show
{
HomePayViewController
.
show
{
...
@@ -229,13 +229,21 @@ class HomeInfoViewController:BaseViewController {
...
@@ -229,13 +229,21 @@ class HomeInfoViewController:BaseViewController {
}
}
if
isMore
==
true
{
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
let
currentType
=
self
.
type
==
.
SimilarVideos
?
ADShowTypeEnum
.
videoDdelete
:
ADShowTypeEnum
.
PhotoDelete
// 广告看完再结束
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
currentType
.
name
)
{
AdvManager
.
shared
.
finisedCallBack
=
{
DispatchQueue
.
main
.
async
{
DispatchQueue
.
main
.
async
{
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
}
}
}
showFailBlock
:
{
error
in
}
}
// self.popAdverTisement()
// 广告看完再结束
// AdvManager.shared.finisedCallBack = {
// DispatchQueue.main.async {
// deleteOp(imgs: tempArr,isAfterAdv: true)
// }
// }
}
else
{
}
else
{
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
}
}
...
@@ -293,7 +301,15 @@ class HomeInfoViewController:BaseViewController {
...
@@ -293,7 +301,15 @@ class HomeInfoViewController:BaseViewController {
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self)
// ADManager.shared.showRewardedInterstitialAd(from: "") {
// DispatchQueue.main.async {
// deleteOp(imgs: tempArr,isAfterAdv: true)
// }
// } showFailBlock: { error in
//
// }
}
}
// 由于继承自 UIViewController,必须实现这个必需的构造器
// 由于继承自 UIViewController,必须实现这个必需的构造器
...
...
PhoneManager/Class/Page/Home/Controller/HomePhotosDetailViewController.swift
View file @
b5f7ddad
...
@@ -506,7 +506,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
...
@@ -506,7 +506,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
dataSource
.
isSeleted
=
cell
.
choose
dataSource
.
isSeleted
=
cell
.
choose
dataSource
.
id
=
ident
dataSource
.
id
=
ident
// 获取image
// 获取image
dataSource
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
ident
.
localIdentifier
)
dataSource
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
ident
.
localIdentifier
)
vc
.
homeDataSource
=
[
dataSource
]
vc
.
homeDataSource
=
[
dataSource
]
vc
.
backOrgPageCallBack
=
{
index
,
data
in
vc
.
backOrgPageCallBack
=
{
index
,
data
in
...
@@ -671,7 +671,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
...
@@ -671,7 +671,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
view
.
dataSource
=
self
.
selectedModel
view
.
dataSource
=
self
.
selectedModel
// 获取当前免费次数
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
if
freeCount
<=
0
{
HomePayViewController
.
show
{
HomePayViewController
.
show
{
...
@@ -686,7 +686,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
...
@@ -686,7 +686,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
}
else
{
}
else
{
// 获取次数对应的删除照片数量
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
self
.
selectedModel
let
tempArray
=
self
.
selectedModel
if
freeCount
>
1
{
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
// 如果是前两次,可以免费删除5张照片
...
@@ -754,10 +754,15 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
...
@@ -754,10 +754,15 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
if
isMore
==
true
{
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// self.popAdverTisement()
// 广告看完再结束
// // 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
// self.deleteAction(count: deleteCount,isAfterAdv: true)
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
self
.
mediaType
?
.
rawValue
??
""
)
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
showFailBlock
:
{
error
in
}
}
}
else
{
}
else
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
...
@@ -776,7 +781,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
...
@@ -776,7 +781,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
self
.
mediaType
?
.
rawValue
??
""
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self,from:self.mediaType?.rawValue ?? ""
}
}
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
...
...
PhoneManager/Class/Page/Home/Controller/HomeVideoDetailController.swift
View file @
b5f7ddad
...
@@ -393,7 +393,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
...
@@ -393,7 +393,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
guard
let
self
else
{
return
}
guard
let
self
else
{
return
}
// 获取视频的图片
// 获取视频的图片
Photo
AndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
Photo
Manager
.
shared
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
// 点击之后跳转详情页面
// 点击之后跳转详情页面
if
self
.
videoDetailNavView
?
.
startSelectButton
.
isSelected
==
false
{
if
self
.
videoDetailNavView
?
.
startSelectButton
.
isSelected
==
false
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
...
@@ -562,7 +562,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
...
@@ -562,7 +562,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
view
.
dataSource
=
self
.
selectedModel
view
.
dataSource
=
self
.
selectedModel
// 获取当前免费次数
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
if
freeCount
<=
0
{
HomePayViewController
.
show
{
HomePayViewController
.
show
{
...
@@ -577,7 +577,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
...
@@ -577,7 +577,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
}
else
{
}
else
{
// 获取次数对应的删除照片数量
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
self
.
selectedModel
let
tempArray
=
self
.
selectedModel
if
freeCount
>
1
{
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
// 如果是前两次,可以免费删除5张照片
...
@@ -639,18 +639,25 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
...
@@ -639,18 +639,25 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
}
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
self
.
view
.
hideBlur
()
self
.
view
.
hideBlur
()
if
deleteCount
<
0
{
if
deleteCount
<
0
{
return
return
}
}
if
isMore
==
true
{
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// self.popAdverTisement()
// 广告看完再结束
// // 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
// self.deleteAction(count: deleteCount,isAfterAdv: true)
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
""
)
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
showFailBlock
:
{
_
in
}
}
}
else
{
}
else
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
}
...
@@ -675,7 +682,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
...
@@ -675,7 +682,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"video_delete"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "video_delete")
}
}
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
...
...
PhoneManager/Class/Page/Home/Controller/HomeViewController.swift
View file @
b5f7ddad
...
@@ -21,8 +21,6 @@ class HomeViewController:BaseViewController {
...
@@ -21,8 +21,6 @@ class HomeViewController:BaseViewController {
var
isAdCallBack
=
false
var
isAdCallBack
=
false
let
adManager
=
AdvManager
.
shared
fileprivate
func
junmToModule
(
_
cIndex
:
String
,
_
self
:
HomeViewController
)
{
fileprivate
func
junmToModule
(
_
cIndex
:
String
,
_
self
:
HomeViewController
)
{
switch
cIndex
{
switch
cIndex
{
...
@@ -185,23 +183,28 @@ class HomeViewController:BaseViewController {
...
@@ -185,23 +183,28 @@ class HomeViewController:BaseViewController {
//self.junmToModule(cIndex, self)
//self.junmToModule(cIndex, self)
// 先走广告策略
// 先走广告策略
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
adManager
.
finisedCallBack
=
{
// self.adManager.finisedCallBack = {
Print
(
"执行成功"
,
cIndex
)
// Print("执行成功",cIndex)
if
self
.
adManager
.
adFromVC
==
cIndex
,
self
.
adManager
.
isFromHome
{
// if self.adManager.adFromVC == cIndex,self.adManager.isFromHome{
self
.
isAdCallBack
=
true
// self.isAdCallBack = true
// self.junmToModule(cIndex, self)
// }
// }
// self.adManager.failueFinishedCallBack = {
// // 首页特殊要求广告没准备好也需要跳转
// Print("执行失败",cIndex)
// if self.adManager.adFromVC == cIndex,self.adManager.isFromHome{
// self.junmToModule(cIndex, self)
// }
// }
// self.adManager.showInterstitialAd(vc: self,from: cIndex,isHome: true)
// self.junmToModule(cIndex, self)
ADManager
.
shared
.
showInterstitialAd
(
from
:
cIndex
)
{
self
.
junmToModule
(
cIndex
,
self
)
self
.
junmToModule
(
cIndex
,
self
)
}
}
showFailBlock
:
{
error
in
}
self
.
adManager
.
failueFinishedCallBack
=
{
// 首页特殊要求广告没准备好也需要跳转
Print
(
"执行失败"
,
cIndex
)
if
self
.
adManager
.
adFromVC
==
cIndex
,
self
.
adManager
.
isFromHome
{
self
.
junmToModule
(
cIndex
,
self
)
self
.
junmToModule
(
cIndex
,
self
)
}
}
}
self
.
adManager
.
showInterstitialAd
(
vc
:
self
,
from
:
cIndex
,
isHome
:
true
)
// self.junmToModule(cIndex, self)
}
else
{
}
else
{
self
.
isAdCallBack
=
true
self
.
isAdCallBack
=
true
...
@@ -321,7 +324,7 @@ extension HomeViewController {
...
@@ -321,7 +324,7 @@ extension HomeViewController {
case
.
authorized
:
case
.
authorized
:
// 用户已授权跟踪
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
case
.
denied
:
// 用户拒绝了跟踪请求
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
print
(
"用户拒绝了应用的跟踪请求"
)
...
@@ -347,7 +350,7 @@ extension HomeViewController {
...
@@ -347,7 +350,7 @@ extension HomeViewController {
case
.
authorized
:
case
.
authorized
:
// 用户已授权跟踪
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
case
.
denied
:
// 用户拒绝了跟踪请求
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
PhoneManager/Class/Page/Home/Controller/PhotoRemoveViewController.swift
View file @
b5f7ddad
...
@@ -548,7 +548,7 @@ class PhotoRemoveViewController: BaseViewController {
...
@@ -548,7 +548,7 @@ class PhotoRemoveViewController: BaseViewController {
}
}
}
}
}
else
{
}
else
{
Photo
AndVideoMananger
.
mananger
.
asynGetImageFromAssetID
(
id
:
dataModel
[
imageIndex
]
.
localIdentifier
)
{
image
in
Photo
Manager
.
shared
.
asynGetImageFromAssetID
(
id
:
dataModel
[
imageIndex
]
.
localIdentifier
)
{
image
in
view
.
configure
(
with
:
image
)
view
.
configure
(
with
:
image
)
}
}
}
}
...
...
PhoneManager/Class/Page/Home/Controller/PhotoSlideViewController.swift
View file @
b5f7ddad
...
@@ -215,11 +215,11 @@ class PhotoSlideViewController: BaseViewController {
...
@@ -215,11 +215,11 @@ class PhotoSlideViewController: BaseViewController {
guard
dataSource
.
indices
.
contains
(
currentIndex
)
else
{
return
}
guard
dataSource
.
indices
.
contains
(
currentIndex
)
else
{
return
}
// 获取资源
// 获取资源
topView
.
imageView
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
dataSource
[
currentIndex
]
.
localIdentifier
)
topView
.
imageView
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
dataSource
[
currentIndex
]
.
localIdentifier
)
// 预加载下一张
// 预加载下一张
let
next
=
currentIndex
-
1
>=
0
?
currentIndex
-
1
:
dataSource
.
count
-
1
let
next
=
currentIndex
-
1
>=
0
?
currentIndex
-
1
:
dataSource
.
count
-
1
bottomView
.
imageView
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
dataSource
[
next
]
.
localIdentifier
)
bottomView
.
imageView
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
dataSource
[
next
]
.
localIdentifier
)
}
}
private
func
handleCardDisappeared
()
{
private
func
handleCardDisappeared
()
{
...
...
PhoneManager/Class/Page/Home/View/Model/HomePhotosModel .swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Page/Home/View/TrashSubView.swift
View file @
b5f7ddad
...
@@ -116,7 +116,7 @@ extension TrashSubView {
...
@@ -116,7 +116,7 @@ extension TrashSubView {
view
.
dataSource
=
data
view
.
dataSource
=
data
// 获取当前免费次数
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
Print
(
"免费次数----
\(
freeCount
)
"
)
Print
(
"免费次数----
\(
freeCount
)
"
)
// 当免费次数用完以后,无论删除多少都需要弹出广告
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
if
freeCount
<=
0
{
...
@@ -132,7 +132,7 @@ extension TrashSubView {
...
@@ -132,7 +132,7 @@ extension TrashSubView {
}
}
}
else
{
}
else
{
// 获取次数对应的删除照片数量
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
data
let
tempArray
=
data
if
freeCount
>
1
{
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
// 如果是前两次,可以免费删除5张照片
...
@@ -193,8 +193,8 @@ extension TrashSubView {
...
@@ -193,8 +193,8 @@ extension TrashSubView {
}
}
}
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{
[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
if
let
vc
=
self
.
responderViewController
()
{
if
let
vc
=
self
.
responderViewController
()
{
vc
.
view
.
hideBlur
()
vc
.
view
.
hideBlur
()
}
}
...
@@ -208,15 +208,25 @@ extension TrashSubView {
...
@@ -208,15 +208,25 @@ extension TrashSubView {
}
}
if
isMore
==
true
{
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// self.popAdverTisement()
// 广告看完再结束
// // 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
// let tempArray = Array(data.prefix(deleteCount))
// TrashDataManager.clearTrashData(mediaType: self.type,data: tempArray) {
// self.clearTashDataCallBack()
// self.showDeleteSuccess(array: tempArray)
// }
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Trash
.
name
)
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
self
.
clearTashDataCallBack
()
self
.
clearTashDataCallBack
()
self
.
showDeleteSuccess
(
array
:
tempArray
)
self
.
showDeleteSuccess
(
array
:
tempArray
)
}
}
}
showFailBlock
:
{
_
in
}
}
}
else
{
}
else
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
...
@@ -279,7 +289,7 @@ extension TrashSubView {
...
@@ -279,7 +289,7 @@ extension TrashSubView {
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
if
let
vc
=
self
.
responderViewController
()
{
if
let
vc
=
self
.
responderViewController
()
{
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
vc
,
from
:
"trash"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: vc,from: "trash")
}
}
}
}
...
...
PhoneManager/Class/Page/Landing/PermissionVC.swift
View file @
b5f7ddad
...
@@ -155,20 +155,22 @@ class PermissionVC:UIViewController {
...
@@ -155,20 +155,22 @@ class PermissionVC:UIViewController {
@IBAction
func
gerstartedClick
(
_
sender
:
Any
)
{
@IBAction
func
gerstartedClick
(
_
sender
:
Any
)
{
PhotoAndVideoMananger
.
getPrivacy
{[
weak
self
]
status
in
// PhotoAndVideoMananger.getPrivacy {[weak self] status in
//
guard
let
self
else
{
return
}
// guard let self else {return}
//
if
let
photoStatus
=
status
as?
PrivacyType
{
// if let photoStatus = status as? PrivacyType {
//
switch
photoStatus
{
// switch photoStatus {
//
// case .authorized,.denied,.restricted:
// self.gotoNext()
// case .notDetermined: break
// }
// }
// }
case
.
authorized
,
.
denied
,
.
restricted
:
self
.
gotoNext
()
self
.
gotoNext
()
case
.
notDetermined
:
break
}
}
}
}
}
...
@@ -258,7 +260,7 @@ extension PermissionVC {
...
@@ -258,7 +260,7 @@ extension PermissionVC {
case
.
authorized
:
case
.
authorized
:
// 用户已授权跟踪
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
case
.
denied
:
// 用户拒绝了跟踪请求
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
print
(
"用户拒绝了应用的跟踪请求"
)
...
@@ -284,7 +286,7 @@ extension PermissionVC {
...
@@ -284,7 +286,7 @@ extension PermissionVC {
case
.
authorized
:
case
.
authorized
:
// 用户已授权跟踪
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
case
.
denied
:
// 用户拒绝了跟踪请求
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
PhoneManager/Class/Page/Secret/SecretViewController.swift
View file @
b5f7ddad
...
@@ -309,7 +309,6 @@ class SecretViewController: BaseViewController {
...
@@ -309,7 +309,6 @@ class SecretViewController: BaseViewController {
popAdvThenDo
(
idx
:
idx
)
popAdvThenDo
(
idx
:
idx
)
}
}
}
else
{
}
else
{
self
.
AddAction
=
SecretActionView
()
self
.
AddAction
=
SecretActionView
()
self
.
view
.
showBlur
()
self
.
view
.
showBlur
()
...
@@ -343,7 +342,7 @@ class SecretViewController: BaseViewController {
...
@@ -343,7 +342,7 @@ class SecretViewController: BaseViewController {
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"Secret"
)
//
AdvManager.shared.showInterstitialAd(vc: self,from:"Secret")
}
}
...
...
PhoneManager/Class/Page/Settings/ViewController/SettingViewController.swift
View file @
b5f7ddad
...
@@ -192,11 +192,21 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
...
@@ -192,11 +192,21 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
// callblock()
// callblock()
// }
// }
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"Widgets"
)
//AdvManager.shared.showInterstitialAd(vc: self,from: "Widgets")
}
ADManager
.
shared
.
showInterstitialAd
(
from
:
ADShowTypeEnum
.
Widgets
.
name
)
{[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
showFailBlock
:
{[
weak
self
]
_
in
guard
let
self
=
self
else
{
return
}
let
widget
=
WidgetViewController
()
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
}
else
{
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
break
break
case
settingLabels
.
FollowonInstagram
.
rawValue
:
case
settingLabels
.
FollowonInstagram
.
rawValue
:
guard
let
url
=
URL
(
string
:
"https://www.instagram.com/phone.manager.app/"
)
else
{
return
}
guard
let
url
=
URL
(
string
:
"https://www.instagram.com/phone.manager.app/"
)
else
{
return
}
...
@@ -346,16 +356,22 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
...
@@ -346,16 +356,22 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
// callblock()
// callblock()
// }
// }
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"emailLoginSignOut"
)
ADManager
.
shared
.
showInterstitialAd
(
from
:
"emailLoginSignOut"
)
{
let
vc
:
EmailLoginController
=
EmailLoginController
()
vc
.
state
=
.
home
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
vc
.
callblock
=
{
[
weak
self
]
in
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
}
}
}
showFailBlock
:
{
error
in
let
vc
:
EmailLoginController
=
EmailLoginController
()
let
vc
:
EmailLoginController
=
EmailLoginController
()
vc
.
state
=
.
home
vc
.
state
=
.
home
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
vc
.
callblock
=
{
[
weak
self
]
in
vc
.
callblock
=
{
[
weak
self
]
in
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
}
}
// self.tableView.reloadData()
}
}
}
}
}
}
...
...
PhoneManager/Class/Page/Trash/Controller/TrashViewController.swift
View file @
b5f7ddad
...
@@ -202,7 +202,7 @@ extension TrashViewController:UIScrollViewDelegate{
...
@@ -202,7 +202,7 @@ extension TrashViewController:UIScrollViewDelegate{
view
.
dataSource
=
data
view
.
dataSource
=
data
// 获取当前免费次数
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
Print
(
"免费次数----
\(
freeCount
)
"
)
Print
(
"免费次数----
\(
freeCount
)
"
)
// 当免费次数用完以后,无论删除多少都需要弹出广告
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
if
freeCount
<=
0
{
...
@@ -218,7 +218,7 @@ extension TrashViewController:UIScrollViewDelegate{
...
@@ -218,7 +218,7 @@ extension TrashViewController:UIScrollViewDelegate{
}
}
}
else
{
}
else
{
// 获取次数对应的删除照片数量
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
data
let
tempArray
=
data
if
freeCount
>
1
{
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
// 如果是前两次,可以免费删除5张照片
...
@@ -279,7 +279,8 @@ extension TrashViewController:UIScrollViewDelegate{
...
@@ -279,7 +279,8 @@ extension TrashViewController:UIScrollViewDelegate{
}
}
}
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
self
.
view
.
hideBlur
()
self
.
view
.
hideBlur
()
if
deleteCount
<
0
{
if
deleteCount
<
0
{
return
return
...
@@ -291,15 +292,25 @@ extension TrashViewController:UIScrollViewDelegate{
...
@@ -291,15 +292,25 @@ extension TrashViewController:UIScrollViewDelegate{
}
}
if
isMore
==
true
{
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
//
self.popAdverTisement()
// 广告看完再结束
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
// let tempArray = Array(data.prefix(deleteCount))
// TrashDataManager.clearTrashData(mediaType: info.0,data: tempArray) {
// info.1.dataSource.removeAll(where: {tempArray.map({$0.localIdentifier}).contains($0.localIdentifier)})
// self.showDeleteSuccess(array: tempArray)
// }
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Trash
.
name
)
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
info
.
1
.
dataSource
.
removeAll
(
where
:
{
tempArray
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
info
.
1
.
dataSource
.
removeAll
(
where
:
{
tempArray
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
self
.
showDeleteSuccess
(
array
:
tempArray
)
self
.
showDeleteSuccess
(
array
:
tempArray
)
}
}
}
showFailBlock
:
{
_
in
}
}
}
else
{
}
else
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
...
@@ -324,7 +335,7 @@ extension TrashViewController:UIScrollViewDelegate{
...
@@ -324,7 +335,7 @@ extension TrashViewController:UIScrollViewDelegate{
/// 弹出广告
/// 弹出广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"trash"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "trash")
}
}
// 显示弹出框
// 显示弹出框
...
...
PhoneManager/Class/Page/Trash/DataManager/TrashDataManager.swift
View file @
b5f7ddad
...
@@ -23,7 +23,7 @@ class TrashDataManager {
...
@@ -23,7 +23,7 @@ class TrashDataManager {
let
trashData
=
self
.
getCurrentMediaTypeTrashData
(
mediaType
:
mediaType
)
let
trashData
=
self
.
getCurrentMediaTypeTrashData
(
mediaType
:
mediaType
)
if
trashData
.
count
>
0
{
if
trashData
.
count
>
0
{
let
identifierArray
:
[
String
]
=
data
.
count
==
0
?
trashData
.
map
({
$0
.
localIdentifier
})
:
data
.
map
({
$0
.
localIdentifier
})
let
identifierArray
:
[
String
]
=
data
.
count
==
0
?
trashData
.
map
({
$0
.
localIdentifier
})
:
data
.
map
({
$0
.
localIdentifier
})
Photo
AndVideoMananger
.
deleteAssets
(
localIdentifiers
:
identifierArray
)
{
Photo
Manager
.
shared
.
deleteAssets
(
localIdentifiers
:
identifierArray
)
{
// 清空单利和数据库的数据
// 清空单利和数据库的数据
if
data
.
count
>
0
{
if
data
.
count
>
0
{
for
item
in
data
{
for
item
in
data
{
...
...
PhoneManager/Class/Resource/Image/chargingStart.png
deleted
100644 → 0
View file @
86e200c3
85 KB
PhoneManager/Class/Resource/Image/img_bj_start_1.png
deleted
100644 → 0
View file @
86e200c3
38 KB
PhoneManager/Class/Resource/Image/img_star_start_2.png
deleted
100644 → 0
View file @
86e200c3
12.8 KB
PhoneManager/Class/Resource/Model/Resnet50.mlmodel
deleted
100644 → 0
View file @
86e200c3
File deleted
PhoneManager/Class/Session/Email/View/EmailCleanListView.swift
View file @
b5f7ddad
...
@@ -135,7 +135,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
...
@@ -135,7 +135,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
// 广告
// 广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
UIViewController
.
topMostViewController
()
??
UIViewController
(),
from
:
"email"
)
//
AdvManager.shared.showInterstitialAd(vc: UIViewController.topMostViewController() ?? UIViewController(),from: "email")
}
}
private
func
selectSet
(
_
indexPath
:
IndexPath
)
->
Void
{
private
func
selectSet
(
_
indexPath
:
IndexPath
)
->
Void
{
...
@@ -154,6 +154,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
...
@@ -154,6 +154,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
}
}
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
EmailCleanListViewCell
.
id
,
for
:
indexPath
)
as!
EmailCleanListViewCell
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
EmailCleanListViewCell
.
id
,
for
:
indexPath
)
as!
EmailCleanListViewCell
cell
.
selectionStyle
=
.
none
cell
.
selectionStyle
=
.
none
let
data
=
datasource
[
indexPath
.
row
]
let
data
=
datasource
[
indexPath
.
row
]
...
...
PhoneManager/Class/Session/Email/View/EmailContentView.swift
View file @
b5f7ddad
...
@@ -184,7 +184,7 @@ extension EmailContentView :UITableViewDelegate,UITableViewDataSource{
...
@@ -184,7 +184,7 @@ extension EmailContentView :UITableViewDelegate,UITableViewDataSource{
// 广告
// 广告
func
popAdverTisement
(){
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
UIViewController
.
topMostViewController
()
??
UIViewController
())
//
AdvManager.shared.showInterstitialAd(vc: UIViewController.topMostViewController() ?? UIViewController())
}
}
private
func
Total
()
->
Void
{
private
func
Total
()
->
Void
{
...
...
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoSimilarOptimizer.swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/ResourceManager.swift
deleted
100644 → 0
View file @
86e200c3
//
// ResourceManager.swift
// PhoneManager
//
// Created by edy on 2025/4/1.
//
import
Foundation
import
Photos
class
ResourceManager
{
static
let
manager
:
ResourceManager
=
ResourceManager
()
func
getAllPhotos
()
->
[
String
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
image
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
var
array
:
[
String
]
=
[]
for
ass
in
assetsArray
{
array
.
append
(
ass
.
localIdentifier
)
}
return
array
}
func
getAllPhotosByPHAsset
()
->
[
PHAsset
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
image
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
return
assetsArray
}
/// 获取所有视频
/// - Returns: 视频集合
func
getAllVideo
()
->
[
String
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
video
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
var
array
:
[
String
]
=
[]
for
ass
in
assetsArray
{
array
.
append
(
ass
.
localIdentifier
)
}
return
array
}
func
getAllVideosByPHAsset
()
->
[
PHAsset
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
video
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
return
assetsArray
}
}
PhoneManager/Class/Tool/Class/SystemCommentManager/SystemCommentManager.swift
View file @
b5f7ddad
...
@@ -29,7 +29,7 @@ class SystemCommentManager {
...
@@ -29,7 +29,7 @@ class SystemCommentManager {
initCommentInfoInDisk
()
initCommentInfoInDisk
()
}
}
// 首先是免费三次机会用完之后,第四次点击广告,在结果页点击棒极了(删除成功,且loading页面消失)
// 首先是免费三次机会用完之后,第四次点击广告,在结果页点击棒极了(删除成功,且loading页面消失)
if
A
dv
Manager
.
shared
.
defaultFreeTimes
==
0
{
if
A
D
Manager
.
shared
.
defaultFreeTimes
==
0
{
// 判断当天有没有被触发过
// 判断当天有没有被触发过
if
let
isCommentInCurrentDay
=
UserDefaults
.
standard
.
object
(
forKey
:
SHOW_COMMENT_IN_CURRENT_DAY
){
if
let
isCommentInCurrentDay
=
UserDefaults
.
standard
.
object
(
forKey
:
SHOW_COMMENT_IN_CURRENT_DAY
){
let
temp
:
Bool
=
isCommentInCurrentDay
as!
Bool
let
temp
:
Bool
=
isCommentInCurrentDay
as!
Bool
...
...
PhoneManager/Class/Tool/Extension.swift/NSString+Extension.swift
View file @
b5f7ddad
...
@@ -195,3 +195,12 @@ extension URL {
...
@@ -195,3 +195,12 @@ extension URL {
}
}
}
}
extension
Array
{
func
chunked
(
into
size
:
Int
)
->
[[
Element
]]
{
return
stride
(
from
:
0
,
to
:
count
,
by
:
size
)
.
map
{
Array
(
self
[
$0
..<
Swift
.
min
(
$0
+
size
,
count
)])
}
}
}
PhoneManager/Class/Tool/Singleton/Singleton.swift
View file @
b5f7ddad
...
@@ -6,8 +6,7 @@
...
@@ -6,8 +6,7 @@
//
//
import
Foundation
import
Foundation
import
GoogleMobileAds
import
ContactsUI
class
Singleton
{
class
Singleton
{
// 使用静态常量来保存单例实例
// 使用静态常量来保存单例实例
...
@@ -21,31 +20,8 @@ class Singleton {
...
@@ -21,31 +20,8 @@ class Singleton {
var
keepList
:
[
TrashTypeEnum
:
[
AssetModel
]]
=
[:]
var
keepList
:
[
TrashTypeEnum
:
[
AssetModel
]]
=
[:]
var
photoPermission
:
PrivacyType
?
var
photoPermission
:
PrivacyType
?
// func startCountdown(completion: @escaping () -> Void) {
//
// if AdvManager.shared.timer != nil {
// return
// }
// let queue = DispatchQueue.global()
// let timer = DispatchSource.makeTimerSource(queue: queue)
// AdvManager.shared.timer = timer
// AdvManager.shared.timer?.schedule(deadline: .now(), repeating: .seconds(1))
// AdvManager.shared.timer?.setEventHandler {
// AdvManager.shared.advTimeAfterInAPP -= 1
// if AdvManager.shared.advTimeAfterInAPP >= 0 {
// } else {
// print("倒计时结束!")
// AdvManager.shared.timer?.cancel()
// completion()
// AdvManager.shared.timer = nil
// }
// }
// timer.resume()
// }
}
}
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