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
cf0c547d
Commit
cf0c547d
authored
Dec 06, 2024
by
Alex朱枝文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
首页小窗以及banner
parent
5516b476
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
171 additions
and
59 deletions
+171
-59
YHHomePageViewController.swift
...Classes/Modules/Home(首页)/C/YHHomePageViewController.swift
+15
-0
YHLifeViewController.swift
...es/Modules/Home(首页)/Life(生活)/C/YHLifeViewController.swift
+1
-1
YHHomeBannerView.swift
.../galaxy/Classes/Modules/Home(首页)/V/YHHomeBannerView.swift
+26
-43
YHSelectLookView.swift
...lasses/Modules/Home(首页)/YHSelect/V/YHSelectLookView.swift
+1
-1
YHMainChannelDelegate.swift
...dules/LivestreamSales(直播销售)/C/YHMainChannelDelegate.swift
+25
-3
YHPlayerManager.swift
...ses/Modules/LivestreamSales(直播销售)/C/YHPlayerManager.swift
+23
-2
YHFloatingWindow.swift
...es/Modules/LivestreamSales(直播销售)/V/YHFloatingWindow.swift
+80
-9
No files found.
galaxy/galaxy/Classes/Modules/Home(首页)/C/YHHomePageViewController.swift
View file @
cf0c547d
...
...
@@ -28,10 +28,15 @@ class YHHomePageViewController: YHBaseViewController {
var
homeHeaderViewHeight
:
CGFloat
=
0.0
private
var
isGoYHManagerFlag
:
Bool
=
false
private
var
didShowFloating
:
Bool
=
false
var
configModel
:
YHHomeInfoModel
?
{
didSet
{
homeHeaderView
.
kingModel
=
configModel
?
.
king_kong_list
??
[]
if
let
live_info
=
configModel
?
.
live_info
{
setupLiveFloating
(
liveInfo
:
live_info
)
}
}
}
...
...
@@ -112,6 +117,16 @@ class YHHomePageViewController: YHBaseViewController {
//MARK: - 私有方法
private
extension
YHHomePageViewController
{
private
func
setupLiveFloating
(
liveInfo
:
YHHomeLiveInfoModel
)
{
printLog
(
"#####setupLiveFloating(liveInfo: YHHomeLiveInfoModel) "
)
guard
!
didShowFloating
else
{
return
}
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
)
YHPlayerManager
.
shared
.
enterFloating
(
from
:
nil
,
playbackInfo
:
playbackInfo
)
}
func
gotoMgrVC
()
{
if
self
.
isGoYHManagerFlag
{
return
...
...
galaxy/galaxy/Classes/Modules/Home(首页)/Life(生活)/C/YHLifeViewController.swift
View file @
cf0c547d
...
...
@@ -288,7 +288,7 @@ extension YHLifeViewController: UICollectionViewDelegate, UICollectionViewDataSo
return
}
let
item
=
self
.
viewModel
.
liveArr
[
indexPath
.
row
]
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
item
.
id
,
url
:
item
.
pull_ur
l
,
title
:
item
.
live_title
,
roomId
:
item
.
room_id
,
uid
:
UInt
(
item
.
id
),
isLive
:
true
,
scene
:
.
fullscreen
)
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
item
.
id
,
url
:
ni
l
,
title
:
item
.
live_title
,
roomId
:
item
.
room_id
,
uid
:
UInt
(
item
.
id
),
isLive
:
true
,
scene
:
.
fullscreen
)
YHPlayerManager
.
shared
.
enterLive
(
from
:
nil
,
playbackInfo
:
playbackInfo
)
}
}
...
...
galaxy/galaxy/Classes/Modules/Home(首页)/V/YHHomeBannerView.swift
View file @
cf0c547d
...
...
@@ -25,11 +25,8 @@ class YHHomeBannerView: UIView {
// 指定显示图片为第一个
bannerView
.
selectItem
(
at
:
0
,
animated
:
false
)
let
noNeedAutoScroll
=
dataArr
.
contains
(
where
:
{
$0
.
skip_type
==
100
||
$0
.
skip_type
==
102
$0
.
skip_type
==
100
})
// // TODO: - alex测试
// noNeedAutoScroll = true
// // TODO: - alex测试
// 开启定时器开始滚动
bannerView
.
automaticSlidingInterval
=
noNeedAutoScroll
?
0
:
bannerSildingInterval
bannerView
.
removesInfiniteLoopForSingleItem
=
true
...
...
@@ -146,14 +143,6 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if
model
.
isLocalItemFlag
{
return
}
// // TODO: - alex测试
// if index == 1 {
// let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell
// let playbackInfo = YHPlayerManager.PlaybackInfo(id: 40, url: "https://pull-flv-f1-admin.douyincdn.com/thirdgame/stream-7443723341506054922_md.flv?keeptime=00093a80&wsSecret=cf2c048a5bceb7669e37b229e807c0e2&wsTime=674d82e7&major_anchor_level=common&abr_pts=-800&select_mode=score&_session_id=037-2024120217503167B9DF9F03DF6401DE50.1733133032147.26047&rsi=1", title: nil, roomId: nil, isLive: true, scene: .fullscreen)
// YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo)
// return
// }
// // TODO: - alex测试
switch
model
.
skip_type
{
case
1
:
//跳转H5
if
model
.
skip_url
.
isEmpty
==
false
{
...
...
@@ -249,6 +238,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
return
}
let
cell
:
YHHomeBannerCollectionViewCell
?
=
pagerView
.
cellForItem
(
at
:
index
)
as?
YHHomeBannerCollectionViewCell
if
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
{
YHPlayerManager
.
shared
.
leaveChannel
(
for
:
player
)
player
.
clearPlayerView
()
}
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
model
.
live_id
,
url
:
model
.
live_pull_url
,
title
:
nil
,
roomId
:
nil
,
token
:
model
.
token
,
channelId
:
model
.
rtmp_channel
,
uid
:
UInt
(
model
.
live_id
),
isLive
:
true
,
scene
:
.
fullscreen
)
YHPlayerManager
.
shared
.
enterLive
(
from
:
cell
?
.
bannerImagV
,
playbackInfo
:
playbackInfo
)
printLog
(
"跳转直播"
)
...
...
@@ -257,6 +250,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if
!
checkLogin
()
{
return
}
if
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
{
player
.
stop
()
player
.
clearPlayerView
()
}
let
cell
:
YHHomeBannerCollectionViewCell
?
=
pagerView
.
cellForItem
(
at
:
index
)
as?
YHHomeBannerCollectionViewCell
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
model
.
recorded_video_id
,
url
:
model
.
video_url
,
title
:
nil
,
roomId
:
nil
,
uid
:
nil
,
isLive
:
false
,
scene
:
.
fullscreen
)
YHPlayerManager
.
shared
.
enterVOD
(
from
:
cell
?
.
bannerImagV
,
playbackInfo
:
playbackInfo
)
...
...
@@ -265,6 +262,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if
!
checkLogin
()
{
return
}
if
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
{
YHPlayerManager
.
shared
.
leaveChannel
(
for
:
player
)
player
.
clearPlayerView
()
}
let
cell
:
YHHomeBannerCollectionViewCell
?
=
pagerView
.
cellForItem
(
at
:
index
)
as?
YHHomeBannerCollectionViewCell
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
model
.
live_id
,
url
:
model
.
live_pull_url
,
title
:
nil
,
roomId
:
nil
,
token
:
model
.
token
,
channelId
:
model
.
rtmp_channel
,
uid
:
UInt
(
model
.
live_id
),
isLive
:
true
,
scene
:
.
fullscreen
)
YHPlayerManager
.
shared
.
enterLive
(
from
:
cell
?
.
bannerImagV
,
playbackInfo
:
playbackInfo
)
...
...
@@ -294,33 +295,17 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if
model
.
isLocalItemFlag
{
return
}
// // TODO: - alex测试
// if let cell = cell as? YHHomeBannerCollectionViewCell {
// if index == 1 {
//
// let playbackInfo = YHPlayerManager.PlaybackInfo(id: 40, url: "https://pull-flv-f1-admin.douyincdn.com/thirdgame/stream-7443723341506054922_md.flv?keeptime=00093a80&wsSecret=cf2c048a5bceb7669e37b229e807c0e2&wsTime=674d82e7&major_anchor_level=common&abr_pts=-800&select_mode=score&_session_id=037-2024120217503167B9DF9F03DF6401DE50.1733133032147.26047&rsi=1", title: nil, roomId: nil, isLive: true, scene: .banner)
// YHPlayerManager.shared.enterBanner(playbackInfo: playbackInfo, inView: cell.bannerImagV)
//
// } else {
// let player = YHPlayerManager.shared.getPlayer(.secondary)
// player?.setPlayView(nil)
// }
// return
// }
// // TODO: - alex测试
if
model
.
skip_url
.
isEmpty
==
false
{
if
let
cell
=
cell
as?
YHHomeBannerCollectionViewCell
{
if
model
.
skip_type
==
100
||
model
.
skip_type
==
102
{
YHPlayerManager
.
shared
.
play
(
url
:
model
.
live_pull_url
,
inView
:
cell
.
bannerImagV
,
title
:
nil
,
type
:
.
secondary
)
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
model
.
live_id
,
url
:
model
.
live_pull_url
,
title
:
nil
,
roomId
:
nil
,
isLive
:
true
,
scene
:
.
banner
)
YHPlayerManager
.
shared
.
enterBanner
(
playbackInfo
:
playbackInfo
,
inView
:
cell
.
bannerImagV
)
}
else
{
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
// player?.setPlayView(nil)
player
?
.
clearPlayerView
()
if
let
cell
=
cell
as?
YHHomeBannerCollectionViewCell
{
if
model
.
skip_type
==
100
{
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
model
.
live_id
,
token
:
model
.
token
,
channelId
:
model
.
rtmp_channel
,
uid
:
UInt
(
model
.
live_id
),
isLive
:
true
,
scene
:
.
banner
,
playerType
:
.
secondary
)
YHPlayerManager
.
shared
.
enterBanner
(
playbackInfo
:
playbackInfo
,
inView
:
cell
.
bannerImagV
)
}
else
{
if
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
{
YHPlayerManager
.
shared
.
leaveChannel
(
for
:
player
)
player
.
clearPlayerView
()
}
}
}
}
...
...
@@ -332,15 +317,13 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if
model
.
isLocalItemFlag
{
return
}
// // TODO: - alex测试
// if index == 1 {
// YHPlayerManager.shared.stop(type: .secondary)
// return
// }
// // TODO: - alex测试
if
model
.
skip_url
.
isEmpty
==
false
{
if
model
.
skip_type
==
100
||
model
.
skip_type
==
102
{
YHPlayerManager
.
shared
.
stop
(
type
:
.
secondary
)
if
let
player
=
YHPlayerManager
.
shared
.
getPlayer
(
.
secondary
)
{
YHPlayerManager
.
shared
.
leaveChannel
(
for
:
player
)
player
.
clearPlayerView
()
}
}
}
}
...
...
galaxy/galaxy/Classes/Modules/Home(首页)/YHSelect/V/YHSelectLookView.swift
View file @
cf0c547d
...
...
@@ -118,7 +118,7 @@ extension YHSelectLookView: UICollectionViewDelegate, UICollectionViewDataSource
return
}
let
item
=
items
[
indexPath
.
row
]
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
item
.
id
,
url
:
item
.
pull_ur
l
,
title
:
item
.
live_title
,
roomId
:
item
.
room_id
,
uid
:
UInt
(
item
.
id
),
isLive
:
true
,
scene
:
.
fullscreen
)
let
playbackInfo
=
YHPlayerManager
.
PlaybackInfo
(
id
:
item
.
id
,
url
:
ni
l
,
title
:
item
.
live_title
,
roomId
:
item
.
room_id
,
uid
:
UInt
(
item
.
id
),
isLive
:
true
,
scene
:
.
fullscreen
)
YHPlayerManager
.
shared
.
enterLive
(
from
:
nil
,
playbackInfo
:
playbackInfo
)
}
}
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHMainChannelDelegate.swift
View file @
cf0c547d
...
...
@@ -16,7 +16,7 @@ class YHMainChannelDelegate: NSObject, AgoraRtcEngineDelegate {
weak
var
player
:
YHPlayer
?
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
didJoinChannel
channel
:
String
,
withUid
uid
:
UInt
,
elapsed
:
Int
)
{
printLog
(
"main channel: local user join room
\(
channelId
??
""
)
:
\(
uid
)
\(
elapsed
)
ms"
)
printLog
(
"
$$$$###
main channel: local user join room
\(
channelId
??
""
)
:
\(
uid
)
\(
elapsed
)
ms"
)
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
didJoinedOfUid
uid
:
UInt
,
elapsed
:
Int
)
{
...
...
@@ -24,7 +24,7 @@ class YHMainChannelDelegate: NSObject, AgoraRtcEngineDelegate {
let
player
=
player
,
let
view
=
player
.
currentPlayView
else
{
return
}
printLog
(
"main channel: remote user join room
\(
channelId
)
:
\(
uid
)
\(
elapsed
)
ms"
)
printLog
(
"
$$$$###
main channel: remote user join room
\(
channelId
)
:
\(
uid
)
\(
elapsed
)
ms"
)
let
videoCanvas
=
AgoraRtcVideoCanvas
()
videoCanvas
.
uid
=
uid
...
...
@@ -34,7 +34,7 @@ class YHMainChannelDelegate: NSObject, AgoraRtcEngineDelegate {
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
didOfflineOfUid
uid
:
UInt
,
reason
:
AgoraUserOfflineReason
)
{
printLog
(
"main channel: remote user left:
\(
uid
)
reason
\(
reason
)
"
)
printLog
(
"
$$$$###
main channel: remote user left:
\(
uid
)
reason
\(
reason
)
"
)
let
videoCanvas
=
AgoraRtcVideoCanvas
()
videoCanvas
.
uid
=
uid
...
...
@@ -42,6 +42,17 @@ class YHMainChannelDelegate: NSObject, AgoraRtcEngineDelegate {
videoCanvas
.
renderMode
=
.
hidden
engine
.
setupRemoteVideo
(
videoCanvas
)
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
videoSizeChangedOf
sourceType
:
AgoraVideoSourceType
,
uid
:
UInt
,
size
:
CGSize
,
rotation
:
Int
)
{
printLog
(
"$$$$###videoSizeChangedOf:
\(
size
)
"
)
if
let
player
=
player
{
player
.
delegate
?
.
player
(
player
,
didReceiveVideoSize
:
size
)
}
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
firstRemoteVideoFrameOfUid
uid
:
UInt
,
size
:
CGSize
,
elapsed
:
Int
)
{
printLog
(
"$$$$###firstRemoteVideoFrameOfUid:
\(
size
)
"
)
}
}
class
YHSecondaryChannelDelegate
:
NSObject
,
AgoraRtcEngineDelegate
{
...
...
@@ -86,4 +97,15 @@ class YHSecondaryChannelDelegate: NSObject, AgoraRtcEngineDelegate {
connection
.
localUid
=
player
.
currentUid
??
0
engine
.
setupRemoteVideoEx
(
videoCanvas
,
connection
:
connection
)
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
videoSizeChangedOf
sourceType
:
AgoraVideoSourceType
,
uid
:
UInt
,
size
:
CGSize
,
rotation
:
Int
)
{
printLog
(
"$$$$###videoSizeChangedOf:
\(
size
)
"
)
if
let
player
=
player
{
player
.
delegate
?
.
player
(
player
,
didReceiveVideoSize
:
size
)
}
}
func
rtcEngine
(
_
engine
:
AgoraRtcEngineKit
,
firstRemoteVideoFrameOfUid
uid
:
UInt
,
size
:
CGSize
,
elapsed
:
Int
)
{
printLog
(
"###firstRemoteVideoFrameOfUid:
\(
size
)
"
)
}
}
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHPlayerManager.swift
View file @
cf0c547d
...
...
@@ -369,7 +369,20 @@ class YHPlayerManager: NSObject {
func
enterFloating
(
from
viewController
:
UIViewController
?
=
nil
,
playbackInfo
:
PlaybackInfo
)
{
guard
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
else
{
return
}
guard
floatingWindow
==
nil
else
{
return
}
let
isCurrentFromLive
=
viewController
is
YHLivePlayerViewController
let
isCurrentFromVod
=
viewController
is
YHVODPlayerViewController
if
!
isCurrentFromLive
,
!
isCurrentFromVod
,
let
topVC
=
UIApplication
.
shared
.
yhKeyWindow
()?
.
rootViewController
?
.
topMostViewController
()
{
// 如果当前顶部控制器是播放器页面,则不创建浮窗
if
topVC
is
YHLivePlayerViewController
||
topVC
is
YHVODPlayerViewController
{
return
}
}
let
playerType
=
determinePlayerType
(
for
:
.
floating
)
let
player
:
YHPlayer
=
player
(
for
:
playerType
)
...
...
@@ -390,6 +403,7 @@ class YHPlayerManager: NSObject {
floatingWindow
.
playbackInfo
=
updatedInfo
floatingWindow
.
delegate
=
self
floatingWindow
.
player
=
player
player
.
delegate
=
floatingWindow
self
.
floatingWindow
=
floatingWindow
// 添加截图视图到窗口
...
...
@@ -441,10 +455,12 @@ class YHPlayerManager: NSObject {
floatingWindow
.
player
=
player
floatingWindow
.
playbackInfo
=
updatedInfo
self
.
floatingWindow
=
floatingWindow
player
.
delegate
=
floatingWindow
// 检查是否存在当前播放器
if
let
token
=
playbackInfo
.
token
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
leaveChannel
(
for
:
player
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
floatingWindow
.
contentView
)
}
else
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
floatingWindow
.
contentView
)
...
...
@@ -476,7 +492,12 @@ class YHPlayerManager: NSObject {
// 加入频道
if
let
token
=
playbackInfo
.
token
,
let
channelId
=
playbackInfo
.
channelId
,
let
uid
=
playbackInfo
.
uid
,
!
token
.
isEmpty
,
!
channelId
.
isEmpty
{
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
)
if
player
.
isJoined
{
leaveChannel
(
for
:
player
)
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
)
}
else
{
joinChannel
(
for
:
player
,
token
:
token
,
channelId
:
channelId
,
uid
:
uid
,
view
:
view
)
}
}
else
if
let
url
=
playbackInfo
.
url
,
!
url
.
isEmpty
{
player
.
play
(
url
:
url
,
title
:
playbackInfo
.
title
,
view
:
view
)
}
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/V/YHFloatingWindow.swift
View file @
cf0c547d
...
...
@@ -6,6 +6,7 @@
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import
AgoraRtcKit
import
UIKit
// MARK: - 浮窗管理
...
...
@@ -187,15 +188,66 @@ class YHFloatingWindow: NSObject {
// MARK: - Private Methods
private
func
updateLayoutForOrientation
()
{
let
currentWidth
=
containerView
.
bounds
.
width
let
newHeight
=
currentWidth
/
videoOrientation
.
aspectRatio
UIView
.
animate
(
withDuration
:
0.3
)
{
var
frame
=
self
.
containerView
.
frame
frame
.
size
.
height
=
newHeight
self
.
containerView
.
frame
=
frame
self
.
delegate
?
.
floatingWindow
(
self
,
didChangeSize
:
frame
.
size
)
}
// let currentWidth = containerView.bounds.width
// let newHeight = currentWidth / videoOrientation.aspectRatio
//
// UIView.animate(withDuration: 0.3) {
// var frame = self.containerView.frame
// frame.size.height = newHeight
// self.containerView.frame = frame
// self.delegate?.floatingWindow(self, didChangeSize: frame.size)
// }
guard
let
window
=
UIApplication
.
shared
.
yhKeyWindow
()
else
{
return
}
let
currentWidth
=
containerView
.
bounds
.
width
let
newHeight
=
currentWidth
/
videoOrientation
.
aspectRatio
// 计算安全区域
let
safeAreaInsets
=
window
.
safeAreaInsets
let
maxHeight
=
window
.
bounds
.
height
-
safeAreaInsets
.
top
-
safeAreaInsets
.
bottom
// 如果新高度超过最大高度,则反过来调整宽度
let
finalWidth
:
CGFloat
let
finalHeight
:
CGFloat
if
newHeight
>
maxHeight
{
finalHeight
=
maxHeight
finalWidth
=
maxHeight
*
videoOrientation
.
aspectRatio
}
else
{
finalWidth
=
currentWidth
finalHeight
=
newHeight
}
// 确保浮窗位置在屏幕范围内
var
newFrame
=
containerView
.
frame
newFrame
.
size
.
width
=
finalWidth
newFrame
.
size
.
height
=
finalHeight
// 检查右边界
if
newFrame
.
maxX
>
window
.
bounds
.
width
-
16
{
newFrame
.
origin
.
x
=
window
.
bounds
.
width
-
newFrame
.
width
-
16
}
// 检查左边界
if
newFrame
.
minX
<
16
{
newFrame
.
origin
.
x
=
16
}
// 检查底部边界
if
newFrame
.
maxY
>
window
.
bounds
.
height
-
44
{
newFrame
.
origin
.
y
=
window
.
bounds
.
height
-
newFrame
.
height
-
44
}
// 检查顶部边界
if
newFrame
.
minY
<
safeAreaInsets
.
top
+
16
{
newFrame
.
origin
.
y
=
safeAreaInsets
.
top
+
16
}
UIView
.
animate
(
withDuration
:
0.3
)
{
self
.
containerView
.
frame
=
newFrame
self
.
delegate
?
.
floatingWindow
(
self
,
didChangeSize
:
newFrame
.
size
)
}
}
// MARK: - Gesture Handlers
...
...
@@ -439,3 +491,22 @@ extension YHFloatingWindow: UIGestureRecognizerDelegate {
return
true
}
}
// MARK: - YHPlayerDelegate
extension
YHFloatingWindow
:
YHPlayerDelegate
{
func
player
(
_
player
:
YHPlayer
,
didChangedToState
state
:
AgoraMediaPlayerState
,
reason
:
AgoraMediaPlayerReason
)
{
//
}
func
player
(
_
player
:
YHPlayer
,
didChangedToPosition
position
:
Int
)
{
//
}
func
player
(
_
player
:
YHPlayer
,
didReceiveVideoSize
size
:
CGSize
)
{
DispatchQueue
.
main
.
async
{
self
.
setVideoSize
(
size
)
}
}
func
player
(
_
player
:
YHPlayer
,
didChangedTo
positionMs
:
Int
,
atTimestamp
timestampMs
:
TimeInterval
)
{
//
}
}
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