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
8255602f
Commit
8255602f
authored
Apr 08, 2025
by
yqz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
4-8
parent
784f2c41
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
336 additions
and
127 deletions
+336
-127
AppDelegate.swift
PhoneManager/AppDelegate.swift
+1
-1
CompressQualityController.swift
...ssion/Compress/Controller/CompressQualityController.swift
+61
-53
CompressNavView.swift
...Manager/Class/Session/Compress/View/CompressNavView.swift
+3
-4
HomeInfoViewController.swift
PhoneManager/Class/Session/Home/HomeInfoViewController.swift
+25
-8
HomeViewController.swift
PhoneManager/Class/Session/Home/HomeViewController.swift
+3
-9
HomeNavView.swift
PhoneManager/Class/Session/Home/View/HomeNavView.swift
+3
-4
HomeNoAdsViewController.swift
...Manager/Class/Session/NoAds/HomeNoAdsViewController.swift
+95
-37
HomePayModel.swift
PhoneManager/Class/Session/Pay/Model/HomePayModel.swift
+6
-0
HomePayView.swift
PhoneManager/Class/Session/Pay/View/HomePayView.swift
+7
-6
HomePayViewController.swift
...ss/Session/Pay/ViewController/HomePayViewController.swift
+13
-0
SettingViewHeaderCell.swift
...r/Class/Session/Settings/View/SettingViewHeaderCell.swift
+4
-4
SettingViewController.swift
...ssion/Settings/ViewController/SettingViewController.swift
+1
-1
PMAlertView.swift
PhoneManager/Class/Tool/Common/PMAlertView.swift
+49
-0
UIView+Extension.swift
...anager/Class/Tool/Extension.swift/ UIView+Extension.swift
+30
-0
UIViewController+Extension.swift
...ass/Tool/Extension.swift/UIViewController+Extension.swift
+35
-0
No files found.
PhoneManager/AppDelegate.swift
View file @
8255602f
...
...
@@ -37,7 +37,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
private
func
setupDefault
()
{
HomePayModel
.
share
.
checkTrialStatus
()
NetStatusManager
.
manager
.
startNet
{
status
in
switch
status
{
...
...
PhoneManager/Class/Session/Compress/Controller/CompressQualityController.swift
View file @
8255602f
...
...
@@ -217,68 +217,76 @@ class CompressQualityController : BaseViewController{
@objc
func
submitAction
(){
let
compressingView
:
CompressingView
=
CompressingView
(
frame
:
self
.
view
.
bounds
)
compressingView
.
data
=
self
.
model
self
.
view
.
addSubview
(
compressingView
)
// 开始压缩
let
manager
:
CompressViewModel
=
CompressViewModel
()
var
currentQulity
=
0.2
if
currentQulityType
==
1
{
currentQulity
=
0.5
}
if
currentQulityType
==
2
{
currentQulity
=
0.8
}
var
comDataSource
:
[
Data
]
=
[]
if
self
.
currentMediaType
==
0
{
// 表示压缩图片
manager
.
compress
(
assets
:
self
.
model
!
,
compressionQuality
:
currentQulity
)
{
progress
in
compressingView
.
animationView
.
setProgress
(
CGFloat
(
progress
),
animated
:
false
,
duration
:
0.1
)
}
completion
:
{
compressedDataArray
,
errorArray
in
var
compressAllSize
=
0.0
for
(
index
,
data
)
in
compressedDataArray
.
enumerated
()
{
if
let
error
=
errorArray
[
index
]
{
print
(
"第
\(
index
+
1
)
个文件压缩出错:
\(
error
.
localizedDescription
)
"
)
}
else
if
let
data
=
data
{
print
(
"第
\(
index
+
1
)
个文件压缩完成,压缩后大小:
\(
data
.
count
)
字节"
)
compressAllSize
=
compressAllSize
+
Double
(
data
.
count
)
comDataSource
.
append
(
data
)
}
else
{
print
(
"第
\(
index
+
1
)
个文件压缩失败"
)
let
actionBlock
=
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
let
compressingView
:
CompressingView
=
CompressingView
(
frame
:
self
.
view
.
bounds
)
compressingView
.
data
=
self
.
model
self
.
view
.
addSubview
(
compressingView
)
// 开始压缩
let
manager
:
CompressViewModel
=
CompressViewModel
()
var
currentQulity
=
0.2
if
currentQulityType
==
1
{
currentQulity
=
0.5
}
if
currentQulityType
==
2
{
currentQulity
=
0.8
}
var
comDataSource
:
[
Data
]
=
[]
if
self
.
currentMediaType
==
0
{
// 表示压缩图片
manager
.
compress
(
assets
:
self
.
model
!
,
compressionQuality
:
currentQulity
)
{
progress
in
compressingView
.
animationView
.
setProgress
(
CGFloat
(
progress
),
animated
:
false
,
duration
:
0.1
)
}
completion
:
{
compressedDataArray
,
errorArray
in
var
compressAllSize
=
0.0
for
(
index
,
data
)
in
compressedDataArray
.
enumerated
()
{
if
let
error
=
errorArray
[
index
]
{
print
(
"第
\(
index
+
1
)
个文件压缩出错:
\(
error
.
localizedDescription
)
"
)
}
else
if
let
data
=
data
{
print
(
"第
\(
index
+
1
)
个文件压缩完成,压缩后大小:
\(
data
.
count
)
字节"
)
compressAllSize
=
compressAllSize
+
Double
(
data
.
count
)
comDataSource
.
append
(
data
)
}
else
{
print
(
"第
\(
index
+
1
)
个文件压缩失败"
)
}
}
self
.
updateNextView
(
compressAllSize
,
compressingView
,
comDataSource
,[])
}
self
.
updateNextView
(
compressAllSize
,
compressingView
,
comDataSource
,[])
}
}
else
{
// 压缩视频
var
compressAllSize
:
Double
=
0.0
manager
.
compressVideos
(
models
:
self
.
model
!
,
quality
:
Float
(
currentQulity
))
{
(
identifier
,
progress
)
in
compressingView
.
animationView
.
setProgress
(
CGFloat
(
progress
),
animated
:
false
,
duration
:
0.1
)
}
completion
:
{
(
outputURLs
,
errors
)
in
for
(
index
,
outputURL
)
in
outputURLs
.
enumerated
()
{
if
let
outputURL
=
outputURL
{
do
{
let
attributes
=
try
FileManager
.
default
.
attributesOfItem
(
atPath
:
outputURL
.
path
)
if
let
fileSize
=
attributes
[
.
size
]
as?
Int64
{
compressAllSize
=
compressAllSize
+
Double
(
fileSize
)
}
else
{
// 压缩视频
var
compressAllSize
:
Double
=
0.0
manager
.
compressVideos
(
models
:
self
.
model
!
,
quality
:
Float
(
currentQulity
))
{
(
identifier
,
progress
)
in
compressingView
.
animationView
.
setProgress
(
CGFloat
(
progress
),
animated
:
false
,
duration
:
0.1
)
}
completion
:
{
(
outputURLs
,
errors
)
in
for
(
index
,
outputURL
)
in
outputURLs
.
enumerated
()
{
if
let
outputURL
=
outputURL
{
do
{
let
attributes
=
try
FileManager
.
default
.
attributesOfItem
(
atPath
:
outputURL
.
path
)
if
let
fileSize
=
attributes
[
.
size
]
as?
Int64
{
compressAllSize
=
compressAllSize
+
Double
(
fileSize
)
}
}
catch
{
Print
(
"获取视频文件大小失败"
)
}
}
catch
{
Print
(
"获取视频文件大小失败"
)
print
(
"Compressed video
\(
index
)
saved at:
\(
outputURL
)
"
)
}
else
if
let
error
=
errors
[
index
]
{
print
(
"Error compressing video
\(
index
)
:
\(
error
.
localizedDescription
)
"
)
}
print
(
"Compressed video
\(
index
)
saved at:
\(
outputURL
)
"
)
}
else
if
let
error
=
errors
[
index
]
{
print
(
"Error compressing video
\(
index
)
:
\(
error
.
localizedDescription
)
"
)
}
self
.
updateNextView
(
compressAllSize
,
compressingView
,[],
outputURLs
)
}
self
.
updateNextView
(
compressAllSize
,
compressingView
,[],
outputURLs
)
}
}
}
if
HomePayModel
.
share
.
isNoAd
==
false
{
HomeNoAdsViewController
.
show
{
actionBlock
()
}
}
}
}
...
...
PhoneManager/Class/Session/Compress/View/CompressNavView.swift
View file @
8255602f
...
...
@@ -58,10 +58,9 @@ class CompressNavView : UIView {
}
@objc
private
func
proBtnClick
()
{
let
homeNavViewModel
=
HomeNavViewModel
()
let
vc
=
HomePayViewController
()
vc
.
modalPresentationStyle
=
.
fullScreen
homeNavViewModel
.
presentToDetailController
(
currentView
:
self
,
destnationController
:
vc
)
HomePayViewController
.
show
{
}
}
...
...
PhoneManager/Class/Session/Home/HomeInfoViewController.swift
View file @
8255602f
...
...
@@ -56,16 +56,33 @@ class HomeInfoViewController:BaseViewController {
}
}
sview
.
deleteCallBack
=
{
array
in
sview
.
deleteCallBack
=
{
[
weak
self
]
array
in
guard
let
self
=
self
else
{
return
}
if
let
cA
=
array
as?
[
String
]
{
PhotoAndVideoMananger
.
deleteAssets
(
localIdentifiers
:
cA
)
{[
weak
self
]
in
guard
let
self
else
{
return
}
self
.
tablewView
.
deleteModel
()
let
deleteOp
:((
Any
)
->
Void
)
=
{[
weak
self
]
imgs
in
if
let
cA
=
imgs
as?
[
String
]
{
PhotoAndVideoMananger
.
deleteAssets
(
localIdentifiers
:
cA
)
{[
weak
self
]
in
guard
let
self
else
{
return
}
self
.
tablewView
.
deleteModel
()
}
}
}
if
HomePayModel
.
share
.
isNoAd
==
false
{
if
self
.
type
==
.
duplicates
{
// 重复
HomePayViewController
.
show
{
deleteOp
(
array
)
}
}
else
if
self
.
type
==
.
similar
{
// 相似
HomeNoAdsViewController
.
show
{
deleteOp
(
array
)
}
}
else
{
HomeNoAdsViewController
.
show
{
deleteOp
(
array
)
}
}
}
else
{
deleteOp
(
array
)
}
}
...
...
PhoneManager/Class/Session/Home/HomeViewController.swift
View file @
8255602f
...
...
@@ -128,15 +128,9 @@ class HomeViewController:BaseViewController {
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
false
)
}
else
{
HomeNoAdsViewController
.
show
()
// if HomePayModel.share.isNoAd == false {
// let vc:HomePayViewController = HomePayViewController()
// let nav:BaseNavViewController = BaseNavViewController(rootViewController: vc)
// nav.modalPresentationStyle = .fullScreen
// self.navigationController?.present(nav, animated: true)
// }
if
HomePayModel
.
share
.
isNoAd
==
false
{
HomePayViewController
.
show
{}
}
}
}
}
...
...
PhoneManager/Class/Session/Home/View/HomeNavView.swift
View file @
8255602f
...
...
@@ -85,10 +85,9 @@ class HomeNavView:UIView {
}
@objc
private
func
proBtnClick
()
{
let
homeNavViewModel
=
HomeNavViewModel
()
let
vc
=
HomePayViewController
()
vc
.
modalPresentationStyle
=
.
fullScreen
homeNavViewModel
.
presentToDetailController
(
currentView
:
self
,
destnationController
:
vc
)
HomePayViewController
.
show
{
}
}
...
...
PhoneManager/Class/Session/NoAds/HomeNoAdsViewController.swift
View file @
8255602f
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Session/Pay/Model/HomePayModel.swift
View file @
8255602f
...
...
@@ -29,6 +29,7 @@ class HomePayModel: NSObject ,SKProductsRequestDelegate ,SKPaymentTransactionObs
func
checkTrialStatus
()
->
Void
{
verifyReceiptWithApple
{
receipt
in
self
.
alert
.
dismiss
()
guard
let
json
=
receipt
else
{
self
.
refreshReceipt
()
return
...
...
@@ -76,11 +77,13 @@ class HomePayModel: NSObject ,SKProductsRequestDelegate ,SKPaymentTransactionObs
else
{
return
}
let
payment
=
SKPayment
(
product
:
prod
)
SKPaymentQueue
.
default
()
.
add
(
payment
)
alert
.
show
()
}
/** 恢复 */
func
restore
()
->
Void
{
SKPaymentQueue
.
default
()
.
restoreCompletedTransactions
()
alert
.
show
()
}
override
init
()
{
...
...
@@ -88,6 +91,8 @@ class HomePayModel: NSObject ,SKProductsRequestDelegate ,SKPaymentTransactionObs
SKPaymentQueue
.
default
()
.
add
(
self
)
}
let
alert
=
PMAlertView
()
}
extension
HomePayModel
{
...
...
@@ -105,6 +110,7 @@ extension HomePayModel {
break
case
.
failed
:
Print
(
"购买失败"
)
alert
.
dismiss
()
SKPaymentQueue
.
default
()
.
finishTransaction
(
transaction
)
break
case
.
restored
:
...
...
PhoneManager/Class/Session/Pay/View/HomePayView.swift
View file @
8255602f
...
...
@@ -148,7 +148,7 @@ class HomePayView:UIView {
}
titleLabel1
=
UILabel
()
titleLabel1
?
.
text
=
"Clean your
Storag
e"
titleLabel1
?
.
text
=
"Clean your
storage spac
e"
titleLabel1
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
24
,
weight
:
.
bold
)
titleLabel1
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black3Color
)
self
.
addSubview
(
titleLabel1
!
)
...
...
@@ -161,7 +161,7 @@ class HomePayView:UIView {
titleLabel1
?
.
sizeToFit
()
titleLabel2
=
UILabel
()
titleLabel2
?
.
text
=
"
Get rid of what you don't need
"
titleLabel2
?
.
text
=
"
Delete unnecessary content
"
titleLabel2
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
14
,
weight
:
.
bold
)
titleLabel2
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black3Color
)
self
.
addSubview
(
titleLabel2
!
)
...
...
@@ -287,7 +287,7 @@ class HomePayView:UIView {
}
contentView1Tip1
=
UILabel
()
contentView1Tip1
?
.
text
=
"Smart Cleaning, Video Compressor, Secret Storage,
Manage Contacts,
No Ads and Limits."
contentView1Tip1
?
.
text
=
"Smart Cleaning, Video Compressor, Secret Storage, No Ads and Limits."
contentView1Tip1
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
regular
)
contentView1Tip1
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black6Color
)
contentView1Tip1
?
.
numberOfLines
=
2
...
...
@@ -303,7 +303,6 @@ class HomePayView:UIView {
contentView1Tip1
?
.
setlineSpacing
(
font
:
contentView1Tip1
!.
font
,
lineSpacing
:
3
,
width
:
contentView1Tip1
!.
width
,
numberOfLines
:
contentView1Tip1
!.
numberOfLines
,
content
:
contentView1Tip1
!.
text
??
""
)
contentView1Tip2
=
UILabel
()
contentView1Tip2
?
.
text
=
"Free for 7 days, then $6.99/week"
contentView1Tip2
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
regular
)
contentView1Tip2
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black6Color
)
contentView1Tip2
?
.
numberOfLines
=
1
...
...
@@ -454,7 +453,7 @@ class HomePayView:UIView {
})
freeContentTip
=
UILabel
()
freeContentTip
?
.
text
=
"
7
days free"
freeContentTip
?
.
text
=
"
3
days free"
freeContentTip
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
bold
)
freeContentTip
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
whiteColor
)
freeContentTip
?
.
backgroundColor
=
UIColor
.
colorWithHex
(
hexStr
:
"#52C776"
)
...
...
@@ -483,7 +482,8 @@ class HomePayView:UIView {
})
normalContentTitle
=
UILabel
()
normalContentTitle
?
.
text
=
"Due today"
let
date
:
String
=
Date
()
.
operation
(
1
)?
.
string
(
"MMMM dd yyyy"
)
??
""
normalContentTitle
?
.
text
=
"Due
\(
date
)
"
normalContentTitle
?
.
font
=
UIFont
.
systemFont
(
ofSize
:
12
,
weight
:
.
regular
)
normalContentTitle
?
.
textColor
=
UIColor
.
colorWithHex
(
hexStr
:
black6Color
)
normalContent
?
.
addSubview
(
normalContentTitle
!
)
...
...
@@ -523,6 +523,7 @@ class HomePayView:UIView {
didSet
{
guard
let
prod
=
product
else
{
return
}
normalContentMoney
?
.
text
=
"$
\(
prod
.
price
)
"
contentView1Tip2
?
.
text
=
"Free trial for 3 days, $
\(
prod
.
price
)
per year thereafter"
}
}
...
...
PhoneManager/Class/Session/Pay/ViewController/HomePayViewController.swift
View file @
8255602f
...
...
@@ -14,6 +14,8 @@ class HomePayViewController:UIViewController {
private
var
homePayView
:
HomePayView
?
private
var
disjunctor
=
false
private
var
doneBlock
:(()
->
Void
)
=
{}
var
currentProduct
:
SKProduct
?
{
didSet
{
setPrice
()
...
...
@@ -49,6 +51,7 @@ class HomePayViewController:UIViewController {
switch
operstatus
{
case
.
close
:
self
.
dismiss
(
animated
:
true
)
doneBlock
()
default
:
break
}
...
...
@@ -122,4 +125,14 @@ extension HomePayViewController {
private
func
restoreClick
()
{
HomePayModel
.
share
.
restore
()
}
class
func
show
(
_
compate
:
@escaping(()
->
Void
))
->
Void
{
let
vc
:
HomePayViewController
=
HomePayViewController
()
vc
.
doneBlock
=
compate
let
nav
:
BaseNavViewController
=
BaseNavViewController
(
rootViewController
:
vc
)
nav
.
modalPresentationStyle
=
.
fullScreen
guard
let
rt
=
UIViewController
.
topMostViewController
()
else
{
return
}
rt
.
present
(
nav
,
animated
:
true
)
}
}
PhoneManager/Class/Session/Settings/View/SettingViewHeaderCell.swift
View file @
8255602f
...
...
@@ -112,10 +112,10 @@ class SettingViewHeaderCell : UITableViewCell {
}
@objc
func
leanMoreBtnClick
()
{
let
homeNavViewModel
=
HomeNavViewModel
()
let
vc
=
HomePayViewController
()
vc
.
modalPresentationStyle
=
.
fullScreen
homeNavViewModel
.
presentToDetailController
(
currentView
:
self
,
destnationController
:
vc
)
HomeNoAdsViewController
.
show
{
}
}
}
PhoneManager/Class/Session/Settings/ViewController/SettingViewController.swift
View file @
8255602f
...
...
@@ -180,7 +180,7 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
}
private
func
PhoneShare
()
->
Void
{
let
items
:
[
Any
]
=
[
URL
(
string
:
"
https://www.baidu.com"
)
!
]
let
items
:
[
Any
]
=
[
URL
(
string
:
"
itms-apps://itunes.apple.com/app/id1530333201"
)
!
]
let
shareVc
=
UIActivityViewController
(
activityItems
:
items
,
applicationActivities
:
nil
...
...
PhoneManager/Class/Tool/Common/PMAlertView.swift
0 → 100644
View file @
8255602f
//
// PMAlertView.swift
// PhoneManager
//
// Created by edy on 2025/4/8.
//
import
UIKit
class
PMAlertView
:
NSObject
{
private
var
pm_t
:
String
?
private
var
pm_msg
:
String
?
func
show
()
->
Void
{
DispatchQueue
.
main
.
async
{
guard
let
rt
=
UIViewController
.
topMostViewController
()
else
{
return
}
self
.
pmAlert
.
view
.
addSubview
(
self
.
pm_ActivityIndicator
)
self
.
pm_ActivityIndicator
.
snp
.
makeConstraints
{
make
in
make
.
centerY
.
centerX
.
equalToSuperview
()
}
rt
.
present
(
self
.
pmAlert
,
animated
:
true
)
}
}
func
dismiss
()
->
Void
{
DispatchQueue
.
main
.
async
{
self
.
pmAlert
.
dismiss
(
animated
:
true
)
}
}
convenience
init
(
_
title
:
String
?,
_
message
:
String
?)
{
self
.
init
()
self
.
pm_t
=
title
self
.
pm_msg
=
message
}
private
lazy
var
pmAlert
:
UIAlertController
=
{
let
pm
=
UIAlertController
(
title
:
""
,
message
:
pm_msg
,
preferredStyle
:
.
alert
)
return
pm
}()
private
lazy
var
pm_ActivityIndicator
:
UIActivityIndicatorView
=
{
let
pmact
=
UIActivityIndicatorView
()
pmact
.
style
=
.
medium
pmact
.
startAnimating
()
return
pmact
}()
}
PhoneManager/Class/Tool/Extension.swift/ UIView+Extension.swift
View file @
8255602f
...
...
@@ -214,3 +214,33 @@ enum GradientDirection {
}
}
}
extension
Date
{
func
string
(
_
format
:
String
=
""
)
->
String
{
let
dateforametter
=
DateFormatter
()
dateforametter
.
dateFormat
=
format
return
dateforametter
.
string
(
from
:
self
)
}
func
operation
(
_
year
:
Int
=
0
,
_
month
:
Int
=
0
,
_
day
:
Int
=
0
,
_
houre
:
Int
=
0
,
_
minte
:
Int
=
0
,
_
sec
:
Int
=
0
,
_
week
:
Int
=
0
)
->
Date
?
{
let
calendar
=
Calendar
.
current
let
currentDate
=
self
var
dateComponent
:
DateComponents
=
calendar
.
dateComponents
([
.
year
,
.
month
,
.
day
,
.
hour
,
.
minute
,
.
second
,
.
weekday
],
from
:
currentDate
)
dateComponent
.
year
!
+=
year
dateComponent
.
month
!
+=
month
dateComponent
.
month
!
+=
day
dateComponent
.
hour
!
+=
houre
dateComponent
.
second
!
+=
sec
dateComponent
.
weekday
!
+=
week
guard
let
toDate
=
calendar
.
date
(
from
:
dateComponent
)
else
{
return
self
}
return
toDate
}
}
PhoneManager/Class/Tool/Extension.swift/UIViewController+Extension.swift
View file @
8255602f
...
...
@@ -23,5 +23,40 @@ extension UIViewController {
nav
.
barHidden
=
isHidden
}
class
func
topMostViewController
()
->
UIViewController
?
{
guard
let
rootViewController
=
UIApplication
.
shared
.
keyWindow
?
.
rootViewController
else
{
return
nil
}
return
self
.
topMostViewController
(
of
:
rootViewController
)
}
private
static
func
topMostViewController
(
of
viewController
:
UIViewController
)
->
UIViewController
{
// 处理模态弹出的视图控制器
if
let
presentedViewController
=
viewController
.
presentedViewController
{
return
self
.
topMostViewController
(
of
:
presentedViewController
)
}
// 处理 UINavigationController
if
let
navigationController
=
viewController
as?
UINavigationController
,
let
visibleViewController
=
navigationController
.
visibleViewController
{
return
self
.
topMostViewController
(
of
:
visibleViewController
)
}
// 处理 UITabBarController
if
let
tabBarController
=
viewController
as?
UITabBarController
,
let
selectedViewController
=
tabBarController
.
selectedViewController
{
return
self
.
topMostViewController
(
of
:
selectedViewController
)
}
// 处理子控制器
for
subview
in
viewController
.
view
?
.
subviews
??
[]
{
if
let
childViewController
=
subview
.
next
as?
UIViewController
{
return
self
.
topMostViewController
(
of
:
childViewController
)
}
}
return
viewController
}
}
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