Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
933db8ea
Commit
933db8ea
authored
Dec 09, 2024
by
Alex朱枝文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
首页banner和小窗逻辑调整
parent
c9c486f7
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
271 additions
and
26 deletions
+271
-26
YHHomePageViewController.swift
...Classes/Modules/Home(首页)/C/YHHomePageViewController.swift
+16
-9
YHHomePageViewModel.swift
...axy/Classes/Modules/Home(首页)/VM/YHHomePageViewModel.swift
+21
-0
YHH5WebViewVC.swift
.../Classes/Modules/InteractionH5(与H5交互)/YHH5WebViewVC.swift
+3
-0
YHBasePlayerViewController.swift
.../LivestreamSales(直播销售)/C/YHBasePlayerViewController.swift
+2
-0
YHLivePlayerViewController.swift
.../LivestreamSales(直播销售)/C/YHLivePlayerViewController.swift
+4
-2
YHPlayerManager.swift
...ses/Modules/LivestreamSales(直播销售)/C/YHPlayerManager.swift
+193
-13
YHVODPlayerViewController.swift
...s/LivestreamSales(直播销售)/C/YHVODPlayerViewController.swift
+1
-1
YHFloatingWindow.swift
...es/Modules/LivestreamSales(直播销售)/V/YHFloatingWindow.swift
+21
-0
YHShareAlertView.swift
...es/Modules/LivestreamSales(直播销售)/V/YHShareAlertView.swift
+7
-1
YHAllApiName.swift
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
+3
-0
No files found.
galaxy/galaxy/Classes/Modules/Home(首页)/C/YHHomePageViewController.swift
View file @
933db8ea
...
@@ -33,10 +33,6 @@ class YHHomePageViewController: YHBaseViewController {
...
@@ -33,10 +33,6 @@ class YHHomePageViewController: YHBaseViewController {
var
configModel
:
YHHomeInfoModel
?
{
var
configModel
:
YHHomeInfoModel
?
{
didSet
{
didSet
{
homeHeaderView
.
kingModel
=
configModel
?
.
king_kong_list
??
[]
homeHeaderView
.
kingModel
=
configModel
?
.
king_kong_list
??
[]
if
let
live_info
=
configModel
?
.
live_info
{
setupLiveFloating
(
liveInfo
:
live_info
)
}
}
}
}
}
...
@@ -74,11 +70,13 @@ class YHHomePageViewController: YHBaseViewController {
...
@@ -74,11 +70,13 @@ class YHHomePageViewController: YHBaseViewController {
override
func
viewWillDisappear
(
_
animated
:
Bool
)
{
override
func
viewWillDisappear
(
_
animated
:
Bool
)
{
super
.
viewWillDisappear
(
animated
)
super
.
viewWillDisappear
(
animated
)
isTopMostAndVisible
=
false
isTopMostAndVisible
=
false
YHPlayerManager
.
shared
.
handlePageChanged
(
isRecommendPage
:
false
)
}
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
super
.
viewWillAppear
(
animated
)
isTopMostAndVisible
=
true
isTopMostAndVisible
=
true
YHPlayerManager
.
shared
.
handlePageChanged
(
isRecommendPage
:
true
)
}
}
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
...
@@ -119,14 +117,14 @@ class YHHomePageViewController: YHBaseViewController {
...
@@ -119,14 +117,14 @@ class YHHomePageViewController: YHBaseViewController {
private
extension
YHHomePageViewController
{
private
extension
YHHomePageViewController
{
private
func
setupLiveFloating
(
liveInfo
:
YHHomeLiveInfoModel
)
{
private
func
setupLiveFloating
(
liveInfo
:
YHHomeLiveInfoModel
)
{
printLog
(
"#####setupLiveFloating(liveInfo: YHHomeLiveInfoModel) "
)
printLog
(
"#####setupLiveFloating(liveInfo: YHHomeLiveInfoModel) "
)
guard
!
didShowFloating
else
{
guard
YHPlayerManager
.
shared
.
isConfigFloating
!=
false
else
{
return
return
}
}
if
liveInfo
.
status
==
1
{
if
liveInfo
.
status
==
1
{
didShowFloating
=
true
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
liveInfo
.
id
,
token
:
liveInfo
.
token
,
channelId
:
liveInfo
.
rtmp_channel
,
uid
:
UInt
(
liveInfo
.
id
),
isLive
:
true
,
scene
:
.
floating
,
playerType
:
.
main
)
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
liveInfo
.
id
,
token
:
liveInfo
.
token
,
channelId
:
liveInfo
.
rtmp_channel
,
uid
:
UInt
(
liveInfo
.
id
),
isLive
:
true
,
scene
:
.
floating
,
playerType
:
.
main
)
YHPlayerManager
.
shared
.
enterFloating
(
from
:
nil
,
playbackInfo
:
playbackInfo
)
YHPlayerManager
.
shared
.
enterFloating
(
from
:
nil
,
playbackInfo
:
playbackInfo
,
isConfigured
:
true
)
}
else
{
YHPlayerManager
.
shared
.
exitFloating
()
}
}
}
}
...
@@ -415,8 +413,17 @@ extension YHHomePageViewController {
...
@@ -415,8 +413,17 @@ extension YHHomePageViewController {
func
getData
()
{
func
getData
()
{
loadFirstData
()
loadFirstData
()
getHomeBannerData
()
getHomeBannerData
()
viewModel
.
getHomeFloatingLive
{
[
weak
self
]
success
,
error
in
guard
let
self
=
self
else
{
return
}
if
success
{
if
let
liveInfo
=
self
.
viewModel
.
liveInfo
{
setupLiveFloating
(
liveInfo
:
liveInfo
)
}
}
}
}
}
// 请求订单数据
// 请求订单数据
func
requestOrder
()
{
func
requestOrder
()
{
...
...
galaxy/galaxy/Classes/Modules/Home(首页)/VM/YHHomePageViewModel.swift
View file @
933db8ea
...
@@ -20,6 +20,7 @@ class YHHomePageViewModel : YHBaseViewModel {
...
@@ -20,6 +20,7 @@ class YHHomePageViewModel : YHBaseViewModel {
var
categoryArr
:[
YHHomeLifeCategoryModel
?]
=
[]
var
categoryArr
:[
YHHomeLifeCategoryModel
?]
=
[]
var
detailModel
:
YHHomeLifeCategoryDetailModel
=
YHHomeLifeCategoryDetailModel
()
var
detailModel
:
YHHomeLifeCategoryDetailModel
=
YHHomeLifeCategoryDetailModel
()
var
liveArr
:
[
YHLiveModel
]
=
[]
var
liveArr
:
[
YHLiveModel
]
=
[]
var
liveInfo
:
YHHomeLiveInfoModel
?
//首页相关参数
//首页相关参数
private
var
curPageIndex
:
Int
=
1
private
var
curPageIndex
:
Int
=
1
private
var
page_Size
:
Int
=
50
private
var
page_Size
:
Int
=
50
...
@@ -574,4 +575,24 @@ extension YHHomePageViewModel {
...
@@ -574,4 +575,24 @@ extension YHHomePageViewModel {
callBackBlock
(
false
,
err
)
callBackBlock
(
false
,
err
)
}
}
}
}
//获取首页浮动小窗
func
getHomeFloatingLive
(
callBackBlock
:
@escaping
(
_
success
:
Bool
,
_
error
:
YHErrorModel
?)
->
())
{
let
strUrl
=
YHBaseUrlManager
.
shared
.
curURL
()
+
YHAllApiName
.
Home
.
homeFloatingLive
let
_
=
YHNetRequest
.
getRequest
(
url
:
strUrl
)
{
[
weak
self
]
json
,
code
in
//1. json字符串 转 对象
guard
let
self
=
self
else
{
return
}
guard
let
dic
=
json
.
data
?
.
peel
as?
[
String
:
Any
],
let
resultModel
=
YHHomeLiveInfoModel
.
deserialize
(
from
:
dic
)
else
{
callBackBlock
(
false
,
nil
)
return
}
self
.
liveInfo
=
resultModel
callBackBlock
(
true
,
nil
)
}
failBlock
:
{
err
in
callBackBlock
(
false
,
err
)
}
}
}
}
galaxy/galaxy/Classes/Modules/InteractionH5(与H5交互)/YHH5WebViewVC.swift
View file @
933db8ea
...
@@ -35,6 +35,9 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
...
@@ -35,6 +35,9 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
webview
.
scrollView
.
contentInsetAdjustmentBehavior
=
.
never
webview
.
scrollView
.
contentInsetAdjustmentBehavior
=
.
never
webview
.
navigationDelegate
=
self
webview
.
navigationDelegate
=
self
webview
.
scrollView
.
delegate
=
self
webview
.
scrollView
.
delegate
=
self
// config.allowsInlineMediaPlayback = true
// /// 开启让自动播放
// config.mediaTypesRequiringUserActionForPlayback = []
webview
.
setDebugMode
(
false
)
webview
.
setDebugMode
(
false
)
return
webview
return
webview
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHBasePlayerViewController.swift
View file @
933db8ea
...
@@ -54,6 +54,7 @@ class YHBasePlayerViewController: YHBaseViewController {
...
@@ -54,6 +54,7 @@ class YHBasePlayerViewController: YHBaseViewController {
gk_navBarAlpha
=
0
gk_navBarAlpha
=
0
gk_navigationBar
.
isHidden
=
true
gk_navigationBar
.
isHidden
=
true
view
.
backgroundColor
=
.
black
view
.
backgroundColor
=
.
black
UIApplication
.
shared
.
isIdleTimerDisabled
=
true
}
}
override
func
viewWillDisappear
(
_
animated
:
Bool
)
{
override
func
viewWillDisappear
(
_
animated
:
Bool
)
{
...
@@ -63,6 +64,7 @@ class YHBasePlayerViewController: YHBaseViewController {
...
@@ -63,6 +64,7 @@ class YHBasePlayerViewController: YHBaseViewController {
view
.
backgroundColor
=
.
black
view
.
backgroundColor
=
.
black
controlsAutoHideTimer
?
.
invalidate
()
controlsAutoHideTimer
?
.
invalidate
()
controlsAutoHideTimer
=
nil
controlsAutoHideTimer
=
nil
UIApplication
.
shared
.
isIdleTimerDisabled
=
false
}
}
deinit
{
deinit
{
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHLivePlayerViewController.swift
View file @
933db8ea
...
@@ -54,6 +54,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -54,6 +54,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
}
vc
.
closeEvent
=
{
[
weak
self
]
in
vc
.
closeEvent
=
{
[
weak
self
]
in
self
?
.
leaveLiveRoom
()
self
?
.
closeLive
()
self
?
.
closeLive
()
}
}
...
@@ -135,6 +136,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -135,6 +136,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
}
topBarView
.
zoomButtonClickEvent
=
{
[
weak
self
]
in
topBarView
.
zoomButtonClickEvent
=
{
[
weak
self
]
in
self
?
.
leaveLiveRoom
()
self
?
.
enterFloating
()
self
?
.
enterFloating
()
}
}
...
@@ -206,7 +208,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -206,7 +208,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
messageListView
.
anchorName
=
liveDetail
.
hxNickname
messageListView
.
anchorName
=
liveDetail
.
hxNickname
if
needJoinLiveChannel
{
if
needJoinLiveChannel
{
if
!
liveDetail
.
rtmp_channel
.
isEmpty
,
!
liveDetail
.
token
.
isEmpty
,
let
uid
=
playbackInfo
?
.
uid
,
let
player
=
player
{
if
!
liveDetail
.
rtmp_channel
.
isEmpty
,
!
liveDetail
.
token
.
isEmpty
,
let
uid
=
playbackInfo
?
.
uid
,
let
player
=
player
{
YHPlayerManager
.
shared
.
joinChannel
(
for
:
player
,
token
:
liveDetail
.
token
,
channelId
:
liveDetail
.
rtmp_channel
,
uid
:
uid
,
view
:
playerView
)
YHPlayerManager
.
shared
.
joinChannel
(
for
:
player
,
token
:
liveDetail
.
token
,
channelId
:
liveDetail
.
rtmp_channel
,
uid
:
uid
,
view
:
playerView
,
defaultMuted
:
false
)
}
else
if
currentPlayingURL
==
nil
,
!
liveDetail
.
pullUrl
.
isEmpty
{
}
else
if
currentPlayingURL
==
nil
,
!
liveDetail
.
pullUrl
.
isEmpty
{
play
(
url
:
liveDetail
.
pullUrl
)
// 如果没有预设URL,使用接口返回的URL播放
play
(
url
:
liveDetail
.
pullUrl
)
// 如果没有预设URL,使用接口返回的URL播放
}
}
...
@@ -338,7 +340,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -338,7 +340,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
guard
let
liveModel
=
viewModel
.
liveDetailModel
else
{
guard
let
liveModel
=
viewModel
.
liveDetailModel
else
{
return
return
}
}
YHShareAlertView
.
show
(
image
:
liveModel
.
live_image
,
title
:
"@"
+
liveModel
.
account
,
subMessage
:
liveModel
.
live_title
,
linkUrl
:
liveModel
.
live_h5_url
,
isLive
:
true
)
YHShareAlertView
.
show
(
image
:
liveModel
.
live_image
,
title
:
"@"
+
liveModel
.
account
,
subMessage
:
liveModel
.
live_title
,
linkUrl
:
liveModel
.
live_h5_url
,
isLive
:
true
,
fromAiSale
:
true
)
}
}
private
func
showGoods
()
{
private
func
showGoods
()
{
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHPlayerManager.swift
View file @
933db8ea
...
@@ -72,6 +72,10 @@ class YHPlayerManager: NSObject {
...
@@ -72,6 +72,10 @@ class YHPlayerManager: NSObject {
private
var
activePlayers
:
[
YHPlayerType
:
YHPlayer
]
=
[:]
private
var
activePlayers
:
[
YHPlayerType
:
YHPlayer
]
=
[:]
private
var
currentPlaybackInfo
:
[
YHPlayerType
:
PlaybackInfo
]
=
[:]
private
var
currentPlaybackInfo
:
[
YHPlayerType
:
PlaybackInfo
]
=
[:]
private
var
floatingWindow
:
YHFloatingWindow
?
private
var
floatingWindow
:
YHFloatingWindow
?
private(set)
var
isInRecommendPage
:
Bool
=
false
private(set)
var
isConfigFloating
:
Bool
?
=
nil
private
var
bannerAutoPlayEnabled
:
Bool
=
true
private
var
bannerPlayerView
:
UIView
?
private
var
transitionSourceView
:
UIView
?
private
var
transitionSourceView
:
UIView
?
...
@@ -213,7 +217,7 @@ class YHPlayerManager: NSObject {
...
@@ -213,7 +217,7 @@ class YHPlayerManager: NSObject {
func
joinChannel
(
for
player
:
YHPlayer
,
func
joinChannel
(
for
player
:
YHPlayer
,
token
:
String
,
token
:
String
,
channelId
:
String
,
channelId
:
String
,
uid
:
UInt
,
view
:
UIView
?
)
{
uid
:
UInt
,
view
:
UIView
?,
defaultMuted
:
Bool
=
false
)
{
let
option
=
AgoraRtcChannelMediaOptions
()
let
option
=
AgoraRtcChannelMediaOptions
()
option
.
publishCameraTrack
=
false
option
.
publishCameraTrack
=
false
option
.
publishMicrophoneTrack
=
false
option
.
publishMicrophoneTrack
=
false
...
@@ -227,6 +231,11 @@ class YHPlayerManager: NSObject {
...
@@ -227,6 +231,11 @@ class YHPlayerManager: NSObject {
connection
.
localUid
=
uid
connection
.
localUid
=
uid
secondaryChannelDelegate
?
.
channelId
=
channelId
secondaryChannelDelegate
?
.
channelId
=
channelId
if
defaultMuted
{
agoraKit
.
disableAudio
()
}
else
{
agoraKit
.
enableAudio
()
}
let
result
=
agoraKit
.
joinChannelEx
(
byToken
:
token
,
let
result
=
agoraKit
.
joinChannelEx
(
byToken
:
token
,
connection
:
connection
,
connection
:
connection
,
delegate
:
secondaryChannelDelegate
,
delegate
:
secondaryChannelDelegate
,
...
@@ -236,6 +245,11 @@ class YHPlayerManager: NSObject {
...
@@ -236,6 +245,11 @@ class YHPlayerManager: NSObject {
}
}
}
else
{
}
else
{
mainChannelDelegate
?
.
channelId
=
channelId
mainChannelDelegate
?
.
channelId
=
channelId
if
defaultMuted
{
agoraKit
.
disableAudio
()
}
else
{
agoraKit
.
enableAudio
()
}
let
result
=
agoraKit
.
joinChannel
(
byToken
:
token
,
let
result
=
agoraKit
.
joinChannel
(
byToken
:
token
,
channelId
:
channelId
,
channelId
:
channelId
,
uid
:
uid
,
uid
:
uid
,
...
@@ -282,7 +296,11 @@ class YHPlayerManager: NSObject {
...
@@ -282,7 +296,11 @@ class YHPlayerManager: NSObject {
if
playbackInfo
.
scene
==
.
banner
,
if
playbackInfo
.
scene
==
.
banner
,
let
bannerPlayer
=
activePlayers
[
.
secondary
]
{
let
bannerPlayer
=
activePlayers
[
.
secondary
]
{
startPosition
=
bannerPlayer
.
getPosition
()
startPosition
=
bannerPlayer
.
getPosition
()
bannerPlayer
.
stop
()
if
playbackInfo
.
isLive
{
leaveChannel
(
for
:
bannerPlayer
)
}
else
{
bannerPlayer
.
pause
()
}
}
}
let
playerVC
=
YHVODPlayerViewController
(
id
:
playbackInfo
.
id
,
url
:
playbackInfo
.
url
,
title
:
playbackInfo
.
title
)
let
playerVC
=
YHVODPlayerViewController
(
id
:
playbackInfo
.
id
,
url
:
playbackInfo
.
url
,
title
:
playbackInfo
.
title
)
...
@@ -323,9 +341,14 @@ class YHPlayerManager: NSObject {
...
@@ -323,9 +341,14 @@ class YHPlayerManager: NSObject {
updatedInfo
.
scene
=
.
fullscreen
updatedInfo
.
scene
=
.
fullscreen
updatedInfo
.
playerType
=
playerType
updatedInfo
.
playerType
=
playerType
// 如果是从banner跳转,释放副播放器
// 如果是从banner跳转,需要转移播放进度
if
playbackInfo
.
scene
==
.
banner
{
if
playbackInfo
.
scene
==
.
banner
,
activePlayers
[
.
secondary
]?
.
pause
()
let
bannerPlayer
=
activePlayers
[
.
secondary
]
{
if
playbackInfo
.
isLive
{
leaveChannel
(
for
:
bannerPlayer
)
}
else
{
bannerPlayer
.
pause
()
}
}
}
let
playerVC
=
YHLivePlayerViewController
(
id
:
playbackInfo
.
id
,
let
playerVC
=
YHLivePlayerViewController
(
id
:
playbackInfo
.
id
,
...
@@ -375,7 +398,10 @@ class YHPlayerManager: NSObject {
...
@@ -375,7 +398,10 @@ class YHPlayerManager: NSObject {
}
}
}
}
func
enterFloating
(
from
viewController
:
UIViewController
?
=
nil
,
playbackInfo
:
PlaybackInfo
)
{
func
enterFloating
(
from
viewController
:
UIViewController
?
=
nil
,
playbackInfo
:
PlaybackInfo
,
isConfigured
:
Bool
=
false
)
{
if
isConfigured
{
self
.
isConfigFloating
=
isConfigured
}
guard
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
else
{
return
}
guard
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
else
{
return
}
guard
floatingWindow
==
nil
else
{
guard
floatingWindow
==
nil
else
{
return
return
...
@@ -383,6 +409,10 @@ class YHPlayerManager: NSObject {
...
@@ -383,6 +409,10 @@ class YHPlayerManager: NSObject {
let
isCurrentFromLive
=
viewController
is
YHLivePlayerViewController
let
isCurrentFromLive
=
viewController
is
YHLivePlayerViewController
let
isCurrentFromVod
=
viewController
is
YHVODPlayerViewController
let
isCurrentFromVod
=
viewController
is
YHVODPlayerViewController
// 如果是配置产生的小窗,但不在推荐页,则不创建
if
isConfigured
&&
!
isInRecommendPage
{
return
}
if
!
isCurrentFromLive
,
!
isCurrentFromVod
,
let
topVC
=
UIApplication
.
shared
.
yhKeyWindow
()?
.
rootViewController
?
.
topMostViewController
()
{
if
!
isCurrentFromLive
,
!
isCurrentFromVod
,
let
topVC
=
UIApplication
.
shared
.
yhKeyWindow
()?
.
rootViewController
?
.
topMostViewController
()
{
// 如果当前顶部控制器是播放器页面,则不创建浮窗
// 如果当前顶部控制器是播放器页面,则不创建浮窗
...
@@ -391,8 +421,32 @@ class YHPlayerManager: NSObject {
...
@@ -391,8 +421,32 @@ class YHPlayerManager: NSObject {
}
}
}
}
// 如果是从banner跳转,需要转移播放进度
if
playbackInfo
.
scene
==
.
banner
,
let
bannerPlayer
=
activePlayers
[
.
secondary
]
{
if
playbackInfo
.
isLive
{
leaveChannel
(
for
:
bannerPlayer
)
}
else
{
bannerPlayer
.
pause
()
}
}
let
playerType
=
determinePlayerType
(
for
:
.
floating
)
let
playerType
=
determinePlayerType
(
for
:
.
floating
)
let
player
:
YHPlayer
=
player
(
for
:
playerType
)
let
player
:
YHPlayer
=
player
(
for
:
playerType
)
var
needMuteLive
:
Bool
=
false
if
isConfigured
{
if
playbackInfo
.
isLive
{
needMuteLive
=
true
}
else
{
player
.
isMuted
=
true
}
}
else
{
if
playbackInfo
.
isLive
{
needMuteLive
=
false
}
else
{
player
.
isMuted
=
false
}
}
var
updatedInfo
=
playbackInfo
var
updatedInfo
=
playbackInfo
updatedInfo
.
scene
=
.
floating
updatedInfo
.
scene
=
.
floating
...
@@ -412,6 +466,7 @@ class YHPlayerManager: NSObject {
...
@@ -412,6 +466,7 @@ class YHPlayerManager: NSObject {
floatingWindow
.
delegate
=
self
floatingWindow
.
delegate
=
self
floatingWindow
.
player
=
player
floatingWindow
.
player
=
player
player
.
delegate
=
floatingWindow
player
.
delegate
=
floatingWindow
floatingWindow
.
source
=
isConfigured
?
.
configured
:
.
userAction
self
.
floatingWindow
=
floatingWindow
self
.
floatingWindow
=
floatingWindow
// 添加截图视图到窗口
// 添加截图视图到窗口
...
@@ -426,7 +481,7 @@ class YHPlayerManager: NSObject {
...
@@ -426,7 +481,7 @@ class YHPlayerManager: NSObject {
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
if
player
.
isJoined
{
if
player
.
isJoined
{
leaveChannel
(
for
:
player
)
leaveChannel
(
for
:
player
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
floatingWindow
.
contentView
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
floatingWindow
.
contentView
,
defaultMuted
:
needMuteLive
)
// // 先清理上次的播放状态
// // 先清理上次的播放状态
// player.clearPlayerView()
// player.clearPlayerView()
// // 将播放状态转移到floating
// // 将播放状态转移到floating
...
@@ -462,6 +517,7 @@ class YHPlayerManager: NSObject {
...
@@ -462,6 +517,7 @@ class YHPlayerManager: NSObject {
floatingWindow
.
delegate
=
self
floatingWindow
.
delegate
=
self
floatingWindow
.
player
=
player
floatingWindow
.
player
=
player
floatingWindow
.
playbackInfo
=
updatedInfo
floatingWindow
.
playbackInfo
=
updatedInfo
floatingWindow
.
source
=
isConfigured
?
.
configured
:
.
userAction
self
.
floatingWindow
=
floatingWindow
self
.
floatingWindow
=
floatingWindow
player
.
delegate
=
floatingWindow
player
.
delegate
=
floatingWindow
// 检查是否存在当前播放器
// 检查是否存在当前播放器
...
@@ -469,14 +525,13 @@ class YHPlayerManager: NSObject {
...
@@ -469,14 +525,13 @@ class YHPlayerManager: NSObject {
let
channelId
=
playbackInfo
.
channelId
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
leaveChannel
(
for
:
player
)
leaveChannel
(
for
:
player
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
floatingWindow
.
contentView
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
floatingWindow
.
contentView
,
defaultMuted
:
needMuteLive
)
}
else
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
}
else
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
floatingWindow
.
contentView
)
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
floatingWindow
.
contentView
)
}
}
let
showFloatingWindow
=
{
let
showFloatingWindow
=
{
floatingWindow
.
show
(
in
:
window
)
floatingWindow
.
show
(
in
:
window
)
// player.setPlayView(floatingWindow.contentView)
}
}
if
let
viewController
=
viewController
{
if
let
viewController
=
viewController
{
...
@@ -490,26 +545,34 @@ class YHPlayerManager: NSObject {
...
@@ -490,26 +545,34 @@ class YHPlayerManager: NSObject {
}
}
func
enterBanner
(
playbackInfo
:
PlaybackInfo
,
inView
view
:
UIView
)
{
func
enterBanner
(
playbackInfo
:
PlaybackInfo
,
inView
view
:
UIView
)
{
// 检查是否应该播放banner
if
!
shouldPlayBanner
()
{
return
}
let
playerType
=
determinePlayerType
(
for
:
.
banner
)
let
playerType
=
determinePlayerType
(
for
:
.
banner
)
var
updatedInfo
=
playbackInfo
var
updatedInfo
=
playbackInfo
updatedInfo
.
scene
=
.
banner
updatedInfo
.
scene
=
.
banner
updatedInfo
.
playerType
=
playerType
updatedInfo
.
playerType
=
playerType
currentPlaybackInfo
[
playerType
]
=
updatedInfo
currentPlaybackInfo
[
playerType
]
=
updatedInfo
bannerPlayerView
=
view
let
player
=
player
(
for
:
playerType
)
let
player
=
player
(
for
:
playerType
)
if
playbackInfo
.
isLive
{
// 加入频道
// 加入频道
if
let
token
=
playbackInfo
.
token
,
if
let
token
=
playbackInfo
.
token
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
if
player
.
isJoined
{
if
player
.
isJoined
{
leaveChannel
(
for
:
player
)
leaveChannel
(
for
:
player
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
,
defaultMuted
:
true
)
}
else
{
}
else
{
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
,
defaultMuted
:
true
)
}
}
}
else
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
}
}
else
{
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
view
)
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
view
)
}
}
}
}
}
func
exitFloating
()
{
func
exitFloating
()
{
// 直播退出channel
// 直播退出channel
...
@@ -605,6 +668,9 @@ extension YHPlayerManager: YHFloatingWindowDelegate {
...
@@ -605,6 +668,9 @@ extension YHPlayerManager: YHFloatingWindowDelegate {
//player.stop()
//player.stop()
floatingWindow
=
nil
floatingWindow
=
nil
leaveChannel
(
for
:
player
)
leaveChannel
(
for
:
player
)
if
window
.
source
==
.
configured
{
isConfigFloating
=
false
}
}
}
func
floatingWindow
(
_
window
:
YHFloatingWindow
,
didChangeSize
size
:
CGSize
)
{
func
floatingWindow
(
_
window
:
YHFloatingWindow
,
didChangeSize
size
:
CGSize
)
{
...
@@ -657,3 +723,117 @@ extension UIViewController {
...
@@ -657,3 +723,117 @@ extension UIViewController {
return
self
return
self
}
}
}
}
extension
YHPlayerManager
{
// MARK: - Page Management
func
handlePageChanged
(
isRecommendPage
:
Bool
)
{
self
.
isInRecommendPage
=
isRecommendPage
if
isRecommendPage
{
if
isConfigFloating
==
true
{
if
let
window
=
floatingWindow
,
let
player
=
window
.
player
,
window
.
source
==
.
configured
{
window
.
isHidden
=
false
resumeConfiguredFloatingWindow
(
window
,
player
)
}
stopBannerPlayback
()
}
else
{
if
let
window
=
floatingWindow
,
let
player
=
window
.
player
,
window
.
source
==
.
configured
{
window
.
isHidden
=
true
stopConfiguredFloatingWindow
(
window
,
player
)
}
enableBannerAutoPlay
()
//resumeBannerPlayback()
}
}
else
{
if
let
window
=
floatingWindow
,
let
player
=
window
.
player
,
window
.
source
==
.
configured
{
window
.
isHidden
=
true
stopConfiguredFloatingWindow
(
window
,
player
)
}
stopBannerPlayback
()
}
}
private
func
resumeConfiguredFloatingWindow
(
_
window
:
YHFloatingWindow
,
_
player
:
YHPlayer
)
{
if
let
playbackInfo
=
window
.
playbackInfo
{
if
playbackInfo
.
isLive
{
if
let
token
=
playbackInfo
.
token
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
{
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
window
.
contentView
)
}
}
else
{
if
let
url
=
playbackInfo
.
url
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
window
.
contentView
)
}
}
}
}
private
func
stopConfiguredFloatingWindow
(
_
window
:
YHFloatingWindow
,
_
player
:
YHPlayer
)
{
if
player
.
playMode
==
.
live
{
leaveChannel
(
for
:
player
)
}
else
{
player
.
stop
()
}
}
private
func
stopBannerPlayback
()
{
bannerAutoPlayEnabled
=
false
if
let
player
=
getPlayer
(
.
secondary
)
{
if
player
.
playMode
==
.
live
{
leaveChannel
(
for
:
player
)
}
else
{
player
.
stop
()
}
}
}
private
func
resumeBannerPlayback
()
{
guard
bannerAutoPlayEnabled
,
let
bannerPlayerView
=
bannerPlayerView
else
{
return
}
if
let
player
=
getPlayer
(
.
secondary
)
{
if
let
playbackInfo
=
currentPlaybackInfo
[
.
secondary
]
{
if
playbackInfo
.
isLive
{
if
let
token
=
playbackInfo
.
token
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
{
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
bannerPlayerView
,
defaultMuted
:
true
)
}
}
else
{
if
let
url
=
playbackInfo
.
url
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
bannerPlayerView
)
player
.
isMuted
=
true
}
}
}
}
}
private
func
enableBannerAutoPlay
()
{
bannerAutoPlayEnabled
=
true
}
func
shouldPlayBanner
()
->
Bool
{
if
let
window
=
floatingWindow
,
!
window
.
isHidden
{
return
false
}
return
bannerAutoPlayEnabled
}
}
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHVODPlayerViewController.swift
View file @
933db8ea
...
@@ -110,7 +110,7 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
...
@@ -110,7 +110,7 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
guard
let
recordedDetailModel
=
viewModel
.
recordedDetailModel
else
{
guard
let
recordedDetailModel
=
viewModel
.
recordedDetailModel
else
{
return
return
}
}
YHShareAlertView
.
show
(
image
:
recordedDetailModel
.
recorded_image
,
title
:
"@"
+
recordedDetailModel
.
account
,
subMessage
:
recordedDetailModel
.
recorded_title
,
linkUrl
:
recordedDetailModel
.
recorded_h5_url
,
isLive
:
false
)
YHShareAlertView
.
show
(
image
:
recordedDetailModel
.
recorded_image
,
title
:
"@"
+
recordedDetailModel
.
account
,
subMessage
:
recordedDetailModel
.
recorded_title
,
linkUrl
:
recordedDetailModel
.
recorded_h5_url
,
isLive
:
false
,
fromAiSale
:
true
)
}
}
// MARK: - Data Loading
// MARK: - Data Loading
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/V/YHFloatingWindow.swift
View file @
933db8ea
...
@@ -21,7 +21,14 @@ protocol YHFloatingWindowDelegate: AnyObject {
...
@@ -21,7 +21,14 @@ protocol YHFloatingWindowDelegate: AnyObject {
class
YHFloatingWindow
:
NSObject
{
class
YHFloatingWindow
:
NSObject
{
// MARK: - Properties
// MARK: - Properties
enum
Source
{
case
configured
// 配置产生的小窗(只在推荐页显示)
case
userAction
// 用户操作产生的小窗(全局显示)
}
weak
var
player
:
YHPlayer
?
weak
var
player
:
YHPlayer
?
var
source
:
Source
=
.
userAction
weak
var
delegate
:
YHFloatingWindowDelegate
?
weak
var
delegate
:
YHFloatingWindowDelegate
?
var
playbackInfo
:
YHPlayerManager
.
PlaybackInfo
?
var
playbackInfo
:
YHPlayerManager
.
PlaybackInfo
?
...
@@ -63,6 +70,20 @@ class YHFloatingWindow: NSObject {
...
@@ -63,6 +70,20 @@ class YHFloatingWindow: NSObject {
private
var
initialDistance
:
CGFloat
=
0
private
var
initialDistance
:
CGFloat
=
0
private
let
scaleMultiplier
:
CGFloat
=
1.5
private
let
scaleMultiplier
:
CGFloat
=
1.5
var
isHidden
:
Bool
=
false
{
didSet
{
if
isHidden
{
player
?
.
isMuted
=
true
}
else
{
if
source
==
.
configured
{
player
?
.
isMuted
=
true
}
else
{
player
?
.
isMuted
=
false
}
}
}
}
// UI组件
// UI组件
private
lazy
var
closeButton
:
UIButton
=
{
private
lazy
var
closeButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
let
button
=
UIButton
(
type
:
.
custom
)
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/V/YHShareAlertView.swift
View file @
933db8ea
...
@@ -11,6 +11,7 @@ import AttributedString
...
@@ -11,6 +11,7 @@ import AttributedString
import
Photos
import
Photos
class
YHShareAlertView
:
UIView
{
class
YHShareAlertView
:
UIView
{
var
fromAiSale
:
Bool
=
false
var
centerView
:
UIView
!
var
centerView
:
UIView
!
var
leftButton
:
YHShareButton
!
var
leftButton
:
YHShareButton
!
var
centerButton
:
YHShareButton
!
var
centerButton
:
YHShareButton
!
...
@@ -266,13 +267,14 @@ class YHShareAlertView: UIView {
...
@@ -266,13 +267,14 @@ class YHShareAlertView: UIView {
dismiss
()
dismiss
()
}
}
static
func
show
(
image
:
String
=
""
,
title
:
String
=
""
,
subMessage
:
String
=
""
,
linkUrl
:
String
=
""
,
isLive
:
Bool
=
false
)
{
static
func
show
(
image
:
String
=
""
,
title
:
String
=
""
,
subMessage
:
String
=
""
,
linkUrl
:
String
=
""
,
isLive
:
Bool
=
false
,
fromAiSale
:
Bool
=
false
)
{
let
view
=
YHShareAlertView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
KScreenWidth
,
height
:
KScreenHeight
))
let
view
=
YHShareAlertView
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
KScreenWidth
,
height
:
KScreenHeight
))
view
.
image
=
image
view
.
image
=
image
view
.
title
=
title
view
.
title
=
title
view
.
subMessage
=
subMessage
view
.
subMessage
=
subMessage
view
.
linkUrl
=
linkUrl
view
.
linkUrl
=
linkUrl
view
.
isLive
=
isLive
view
.
isLive
=
isLive
view
.
fromAiSale
=
fromAiSale
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
window
?
.
addSubview
(
view
)
window
?
.
addSubview
(
view
)
}
}
...
@@ -293,8 +295,12 @@ class YHShareAlertView: UIView {
...
@@ -293,8 +295,12 @@ class YHShareAlertView: UIView {
}
}
@objc
func
wxClick
()
{
@objc
func
wxClick
()
{
if
fromAiSale
{
YHShareManager
.
shared
.
sendLinkContent
(
subMessage
,
""
,
mainImageView
.
image
??
UIImage
(),
link
:
linkUrl
)
}
else
{
YHShareManager
.
shared
.
sendLinkContent
(
title
,
subMessage
,
mainImageView
.
image
??
UIImage
(),
link
:
linkUrl
)
YHShareManager
.
shared
.
sendLinkContent
(
title
,
subMessage
,
mainImageView
.
image
??
UIImage
(),
link
:
linkUrl
)
}
}
}
func
saveImageToPhotosAlbum
(
image
:
UIImage
)
{
func
saveImageToPhotosAlbum
(
image
:
UIImage
)
{
// 确保应用有权访问相册
// 确保应用有权访问相册
...
...
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
View file @
933db8ea
...
@@ -84,6 +84,9 @@ class YHAllApiName {
...
@@ -84,6 +84,9 @@ class YHAllApiName {
//获取签约用户信息
//获取签约用户信息
static
let
signerInfoApi
=
"super-app/infoflow/signer/info"
static
let
signerInfoApi
=
"super-app/infoflow/signer/info"
// 获取首页小窗
static
let
homeFloatingLive
=
"super-app/live/app-live-latest"
}
}
//接口 模块名 Common
//接口 模块名 Common
...
...
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