Commit 0a544f2e authored by Steven杜宇's avatar Steven杜宇

Merge branch 'yinhe-live-1212' of...

Merge branch 'yinhe-live-1212' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into yinhe-live-1212
parents 0884fac0 98325ece
...@@ -136,7 +136,7 @@ private extension YHHomePageViewController { ...@@ -136,7 +136,7 @@ private extension YHHomePageViewController {
if liveInfo.status == 1 { if liveInfo.status == 1 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: liveInfo.id, token: liveInfo.token, channelId: liveInfo.rtmp_channel, uid: UInt(liveInfo.user_id), isLive: true, scene: .floating, playerType: .main) let playbackInfo = YHPlayerManager.PlaybackInfo(id: liveInfo.id, token: liveInfo.token, channelId: liveInfo.rtmp_channel, uid: UInt(liveInfo.user_id), isLive: true, scene: .floating, playerType: .main)
YHPlayerManager.shared.enterFloating(from: nil, playbackInfo: playbackInfo, isConfigured: true) YHPlayerManager.shared.enterFloating(from: nil, playbackInfo: playbackInfo, isConfigured: true)
} else { } else if YHPlayerManager.shared.floatingWindow?.source == .configured {
YHPlayerManager.shared.exitFloating() YHPlayerManager.shared.exitFloating()
} }
} }
......
...@@ -24,17 +24,19 @@ class YHHomeBannerView: UIView { ...@@ -24,17 +24,19 @@ class YHHomeBannerView: UIView {
self.indicatorView.curIndicatorIndex = 0 self.indicatorView.curIndicatorIndex = 0
// 指定显示图片为第一个 // 指定显示图片为第一个
bannerView.selectItem(at: 0, animated: false) bannerView.selectItem(at: 0, animated: false)
if let index = dataArr.firstIndex(where: { // 开启定时器开始滚动
$0.skip_type == 100 bannerView.automaticSlidingInterval = bannerSildingInterval
}) { // if let index = dataArr.firstIndex(where: {
// 开启定时器开始滚动 // $0.skip_type == 100
bannerView.automaticSlidingInterval = 0 // }) {
bannerView.scrollToItem(at: index, animated: false) // // 开启定时器开始滚动
indicatorView.curIndicatorIndex = index // bannerView.automaticSlidingInterval = 0
} else { // bannerView.scrollToItem(at: index, animated: false)
// 开启定时器开始滚动 // indicatorView.curIndicatorIndex = index
bannerView.automaticSlidingInterval = bannerSildingInterval // } else {
} // // 开启定时器开始滚动
// bannerView.automaticSlidingInterval = bannerSildingInterval
// }
bannerView.removesInfiniteLoopForSingleItem = true bannerView.removesInfiniteLoopForSingleItem = true
bannerView.alwaysBounceHorizontal = true bannerView.alwaysBounceHorizontal = true
} }
...@@ -244,10 +246,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -244,10 +246,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
return return
} }
let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell
if let player = YHPlayerManager.shared.getPlayer(.secondary) { // if let player = YHPlayerManager.shared.getPlayer(.secondary) {
YHPlayerManager.shared.leaveChannel(for: player) // YHPlayerManager.shared.leaveChannel(for: player)
player.clearPlayerView() // player.clearPlayerView()
} // }
let playbackInfo = YHPlayerManager.PlaybackInfo(id: model.live_id, url: nil, title: nil, roomId: nil, token: model.token, channelId: model.rtmp_channel, uid: model.user_id != 0 ? UInt(model.user_id) : nil, isLive: true, scene: .fullscreen) let playbackInfo = YHPlayerManager.PlaybackInfo(id: model.live_id, url: nil, title: nil, roomId: nil, token: model.token, channelId: model.rtmp_channel, uid: model.user_id != 0 ? UInt(model.user_id) : nil, isLive: true, scene: .fullscreen)
YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo) YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo)
printLog("跳转直播") printLog("跳转直播")
...@@ -268,10 +270,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -268,10 +270,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if !checkLogin() { if !checkLogin() {
return return
} }
if let player = YHPlayerManager.shared.getPlayer(.secondary) { // if let player = YHPlayerManager.shared.getPlayer(.secondary) {
YHPlayerManager.shared.leaveChannel(for: player) // YHPlayerManager.shared.leaveChannel(for: player)
player.clearPlayerView() // player.clearPlayerView()
} // }
let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell 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.user_id), isLive: true, scene: .fullscreen) 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.user_id), isLive: true, scene: .fullscreen)
YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo) YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo)
...@@ -291,7 +293,7 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -291,7 +293,7 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) { func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
self.indicatorView.curIndicatorIndex = pagerView.currentIndex self.indicatorView.curIndicatorIndex = pagerView.currentIndex
} }
/*
func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) { func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) {
if index >= dataArr.count { if index >= dataArr.count {
...@@ -333,4 +335,5 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -333,4 +335,5 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
} }
} }
} }
*/
} }
...@@ -630,10 +630,10 @@ extension YHJsApi { ...@@ -630,10 +630,10 @@ extension YHJsApi {
return return
} }
if type == 1 { if type == 1 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: true) let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: true, isFromSaleDetail: true)
YHPlayerManager.shared.enterLive(from: nil, playbackInfo: playbackInfo) YHPlayerManager.shared.enterLive(from: nil, playbackInfo: playbackInfo)
} else if type == 2 { } else if type == 2 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: false, needHideZoomButton: true) let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: false, isFromSaleDetail: true)
YHPlayerManager.shared.enterVOD(from: nil, playbackInfo: playbackInfo) YHPlayerManager.shared.enterVOD(from: nil, playbackInfo: playbackInfo)
} }
......
...@@ -27,6 +27,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -27,6 +27,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
private var isFirstAppear = true private var isFirstAppear = true
private var timer: DispatchSourceTimer? private var timer: DispatchSourceTimer?
private var isDisappearFromZoom = false private var isDisappearFromZoom = false
private let timeCount: Int = 120
// MARK: - UI Components // MARK: - UI Components
...@@ -182,9 +183,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -182,9 +183,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
} }
topBarView.zoomButtonClickEvent = { [weak self] in topBarView.zoomButtonClickEvent = { [weak self] in
self?.isDisappearFromZoom = true if let playbackInfo = self?.playbackInfo, playbackInfo.isFromSaleDetail {
self?.leaveLiveRoom() self?.clearInfo()
self?.enterFloating() if let nav = self?.navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
self?.dismiss(animated: true)
}
} else {
self?.isDisappearFromZoom = true
self?.quitChatRoom()
self?.leaveLiveRoom()
// self?.clearInfo()
self?.enterFloating()
}
} }
topBarView.shareButtonClickEvent = { [weak self] in topBarView.shareButtonClickEvent = { [weak self] in
...@@ -315,11 +327,11 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -315,11 +327,11 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
// MARK: - Public Methods // MARK: - Public Methods
func play(url: String, title: String? = nil) { // func play(url: String, title: String? = nil) {
currentPlayingURL = url // currentPlayingURL = url
currentVideoTitle = title // currentVideoTitle = title
YHPlayerManager.shared.play(url: url, inView: playerView, title: title) // YHPlayerManager.shared.play(url: url, inView: playerView, title: title)
} // }
func enterFloating() { func enterFloating() {
guard let playbackInfo = playbackInfo else { guard let playbackInfo = playbackInfo else {
...@@ -377,15 +389,23 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -377,15 +389,23 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
} }
} }
} }
private func closeLive() { private func clearInfo() {
quitChatRoom() quitChatRoom()
leaveLiveRoom() leaveLiveRoom()
// YHPlayerManager.shared.stop(type: .main) // YHPlayerManager.shared.stop(type: .main)
if let player = player { if let player = player {
YHPlayerManager.shared.leaveChannel(for: player) YHPlayerManager.shared.leaveChannel(for: player)
} }
dismiss(animated: true) }
private func closeLive() {
clearInfo()
if let nav = navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
dismiss(animated: true)
}
} }
private func shareLive() { private func shareLive() {
...@@ -618,7 +638,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -618,7 +638,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
/// 设置定时器 /// 设置定时器
private func setupTimer() { private func setupTimer() {
timer = DispatchSource.makeTimerSource(queue: .main) timer = DispatchSource.makeTimerSource(queue: .main)
timer?.schedule(deadline: .now(), repeating: .seconds(120)) timer?.schedule(deadline: .now(), repeating: .seconds(timeCount))
timer?.setEventHandler(handler: { [weak self] in timer?.setEventHandler(handler: { [weak self] in
guard let self = self else { guard let self = self else {
return return
......
...@@ -31,7 +31,7 @@ class YHPlayerManager: NSObject { ...@@ -31,7 +31,7 @@ class YHPlayerManager: NSObject {
let isLive: Bool let isLive: Bool
var scene: PlaybackScene var scene: PlaybackScene
var playerType: YHPlayerType var playerType: YHPlayerType
var needHideZoomButton: Bool = false var isFromSaleDetail: Bool = false
init(id: Int, init(id: Int,
url: String? = nil, url: String? = nil,
...@@ -43,7 +43,7 @@ class YHPlayerManager: NSObject { ...@@ -43,7 +43,7 @@ class YHPlayerManager: NSObject {
isLive: Bool, isLive: Bool,
scene: PlaybackScene = .fullscreen, scene: PlaybackScene = .fullscreen,
playerType: YHPlayerType = .main, playerType: YHPlayerType = .main,
needHideZoomButton: Bool = false) { isFromSaleDetail: Bool = false) {
self.id = id self.id = id
self.url = url self.url = url
self.title = title self.title = title
...@@ -54,7 +54,7 @@ class YHPlayerManager: NSObject { ...@@ -54,7 +54,7 @@ class YHPlayerManager: NSObject {
self.isLive = isLive self.isLive = isLive
self.scene = scene self.scene = scene
self.playerType = playerType self.playerType = playerType
self.needHideZoomButton = needHideZoomButton self.isFromSaleDetail = isFromSaleDetail
} }
static func == (lhs: Self, rhs: Self) -> Bool { static func == (lhs: Self, rhs: Self) -> Bool {
...@@ -71,7 +71,7 @@ class YHPlayerManager: NSObject { ...@@ -71,7 +71,7 @@ class YHPlayerManager: NSObject {
private var secondaryChannelDelegate: YHSecondaryChannelDelegate? private var secondaryChannelDelegate: YHSecondaryChannelDelegate?
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(set) var floatingWindow: YHFloatingWindow?
private(set) var isInRecommendPage: Bool = false private(set) var isInRecommendPage: Bool = false
private(set) var isConfigFloating: Bool? = nil private(set) var isConfigFloating: Bool? = nil
private var bannerAutoPlayEnabled: Bool = true private var bannerAutoPlayEnabled: Bool = true
...@@ -145,7 +145,7 @@ class YHPlayerManager: NSObject { ...@@ -145,7 +145,7 @@ class YHPlayerManager: NSObject {
activePlayers.forEach { $0.value.stop() } activePlayers.forEach { $0.value.stop() }
// 释放副播放器 // 释放副播放器
releasePlayer(.secondary) //releasePlayer(.secondary)
// 清理播放信息 // 清理播放信息
currentPlaybackInfo.removeAll() currentPlaybackInfo.removeAll()
...@@ -302,14 +302,14 @@ class YHPlayerManager: NSObject { ...@@ -302,14 +302,14 @@ class YHPlayerManager: NSObject {
// 如果是从banner跳转,需要转移播放进度 // 如果是从banner跳转,需要转移播放进度
var startPosition: Int = 0 var startPosition: Int = 0
if let bannerPlayer = activePlayers[.secondary] { // if let bannerPlayer = activePlayers[.secondary] {
startPosition = bannerPlayer.getPosition() // startPosition = bannerPlayer.getPosition()
if bannerPlayer.playMode == .live { // if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer) // leaveChannel(for: bannerPlayer)
} else { // } else {
bannerPlayer.pause() // bannerPlayer.pause()
} // }
} // }
var lastVodVC: YHVODPlayerViewController? var lastVodVC: YHVODPlayerViewController?
var lastNav: UINavigationController? var lastNav: UINavigationController?
var lastLiveVC: YHLivePlayerViewController? var lastLiveVC: YHLivePlayerViewController?
...@@ -372,13 +372,13 @@ class YHPlayerManager: NSObject { ...@@ -372,13 +372,13 @@ class YHPlayerManager: NSObject {
updatedInfo.playerType = playerType updatedInfo.playerType = playerType
// 如果是从banner跳转,需要转移播放进度 // 如果是从banner跳转,需要转移播放进度
if let bannerPlayer = activePlayers[.secondary] { // if let bannerPlayer = activePlayers[.secondary] {
if bannerPlayer.playMode == .live { // if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer) // leaveChannel(for: bannerPlayer)
} else { // } else {
bannerPlayer.pause() // bannerPlayer.pause()
} // }
} // }
var lastVodVC: YHVODPlayerViewController? var lastVodVC: YHVODPlayerViewController?
var lastNav: UINavigationController? var lastNav: UINavigationController?
var lastLiveVC: YHLivePlayerViewController? var lastLiveVC: YHLivePlayerViewController?
...@@ -471,13 +471,13 @@ class YHPlayerManager: NSObject { ...@@ -471,13 +471,13 @@ class YHPlayerManager: NSObject {
} }
// 如果是从banner跳转,需要转移播放进度 // 如果是从banner跳转,需要转移播放进度
if let bannerPlayer = activePlayers[.secondary] { // if let bannerPlayer = activePlayers[.secondary] {
if bannerPlayer.playMode == .live { // if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer) // leaveChannel(for: bannerPlayer)
} else { // } else {
bannerPlayer.pause() // bannerPlayer.pause()
} // }
} // }
let playerType = determinePlayerType(for: .floating) let playerType = determinePlayerType(for: .floating)
let player: YHPlayer = player(for: playerType) let player: YHPlayer = player(for: playerType)
...@@ -781,20 +781,20 @@ extension YHPlayerManager { ...@@ -781,20 +781,20 @@ extension YHPlayerManager {
if isRecommendPage { if isRecommendPage {
if isConfigFloating == true { if isConfigFloating == true {
if let window = floatingWindow, let player = window.player, window.source == .configured { if let window = floatingWindow, let player = window.player, window.source == .configured {
stopBannerPlayback() //stopBannerPlayback()
resumeConfiguredFloatingWindow(window, player) resumeConfiguredFloatingWindow(window, player)
} }
} else { } else {
if let window = floatingWindow, window.source == .configured { if let window = floatingWindow, window.source == .configured {
exitFloating() exitFloating()
} }
enableBannerAutoPlay() //enableBannerAutoPlay()
} }
} else { } else {
if let window = floatingWindow, window.source == .configured { if let window = floatingWindow, window.source == .configured {
exitFloating() exitFloating()
} }
stopBannerPlayback() //stopBannerPlayback()
} }
} }
...@@ -828,45 +828,45 @@ extension YHPlayerManager { ...@@ -828,45 +828,45 @@ extension YHPlayerManager {
} }
} }
private func stopBannerPlayback() { // private func stopBannerPlayback() {
bannerAutoPlayEnabled = false // bannerAutoPlayEnabled = false
if let player = getPlayer(.secondary) { // if let player = getPlayer(.secondary) {
if player.playMode == .live { // if player.playMode == .live {
leaveChannel(for: player) // leaveChannel(for: player)
} else { // } else {
player.stop() // player.stop()
} // }
} // }
} // }
private func resumeBannerPlayback() { // private func resumeBannerPlayback() {
guard bannerAutoPlayEnabled, let bannerPlayerView = bannerPlayerView else { // guard bannerAutoPlayEnabled, let bannerPlayerView = bannerPlayerView else {
return // return
} // }
if let player = getPlayer(.secondary) { // if let player = getPlayer(.secondary) {
if let playbackInfo = currentPlaybackInfo[.secondary] { // if let playbackInfo = currentPlaybackInfo[.secondary] {
if playbackInfo.isLive { // if playbackInfo.isLive {
if let token = playbackInfo.token, // if let token = playbackInfo.token,
let channelId = playbackInfo.channelId, // let channelId = playbackInfo.channelId,
let uid = playbackInfo.uid { // let uid = playbackInfo.uid {
joinChannel(for: player, // joinChannel(for: player,
token: token, // token: token,
channelId: channelId, // channelId: channelId,
uid: uid, // uid: uid,
view: bannerPlayerView, defaultMuted: true) // view: bannerPlayerView, defaultMuted: true)
} // }
} else { // } else {
if let url = playbackInfo.url { // if let url = playbackInfo.url {
player.play(url: url, // player.play(url: url,
title: playbackInfo.title, // title: playbackInfo.title,
view: bannerPlayerView) // view: bannerPlayerView)
player.isMuted = true // player.isMuted = true
} // }
} // }
} // }
//
} // }
} // }
private func enableBannerAutoPlay() { private func enableBannerAutoPlay() {
bannerAutoPlayEnabled = true bannerAutoPlayEnabled = true
......
...@@ -22,6 +22,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController { ...@@ -22,6 +22,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
return view return view
}() }()
private lazy var bottomImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "live_player_bg"))
return imageView
}()
private var isFirstAppear = true private var isFirstAppear = true
// MARK: - Initialization // MARK: - Initialization
...@@ -58,16 +63,27 @@ class YHVODPlayerViewController: YHBasePlayerViewController { ...@@ -58,16 +63,27 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
// if !isFirstAppear { if !isFirstAppear {
// player?.resume() if player?.getPlayState() != .paused {
// } if let url = playbackInfo?.url {
if player?.currentURL != nil { play(url: url, title: playbackInfo?.title)
player?.resume() player?.seek(to: startPosition)
player?.resume()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
self.progressControl.setPlaying(self.player?.getPlayState() == .playing)
})
}
} else {
player?.resume()
}
} }
} }
override func viewWillDisappear(_ animated: Bool) { override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated) super.viewWillDisappear(animated)
if let player = player {
startPosition = player.getPosition()
}
player?.pause() player?.pause()
} }
...@@ -81,6 +97,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController { ...@@ -81,6 +97,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
// MARK: - SetupView // MARK: - SetupView
private func setupUI() { private func setupUI() {
playerView.addSubview(bottomImageView)
bottomImageView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
containerView.addSubview(progressControl) containerView.addSubview(progressControl)
progressControl.snp.makeConstraints { make in progressControl.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview() make.left.right.bottom.equalToSuperview()
...@@ -127,7 +148,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController { ...@@ -127,7 +148,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
private func closeLive() { private func closeLive() {
YHPlayerManager.shared.stop(type: .main) YHPlayerManager.shared.stop(type: .main)
dismiss(animated: true) if let nav = navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
dismiss(animated: true)
}
} }
private func shareLive() { private func shareLive() {
......
...@@ -118,6 +118,11 @@ class YHFloatingWindow: NSObject { ...@@ -118,6 +118,11 @@ class YHFloatingWindow: NSObject {
view.frame = CGRect(x: 0, y: 0, width: Size.defaultWidth, height: 20) view.frame = CGRect(x: 0, y: 0, width: Size.defaultWidth, height: 20)
return view return view
}() }()
private lazy var bottomImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "live_player_bg"))
return imageView
}()
// MARK: - Initialization // MARK: - Initialization
...@@ -143,7 +148,7 @@ class YHFloatingWindow: NSObject { ...@@ -143,7 +148,7 @@ class YHFloatingWindow: NSObject {
containerView.layer.shadowOffset = CGSize(width: 0, height: 2) containerView.layer.shadowOffset = CGSize(width: 0, height: 2)
containerView.layer.shadowRadius = 4 containerView.layer.shadowRadius = 4
containerView.layer.shadowOpacity = 0.3 containerView.layer.shadowOpacity = 0.3
containerView.addSubview(contentView) containerView.addSubview(contentView)
contentView.translatesAutoresizingMaskIntoConstraints = false contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
...@@ -152,6 +157,15 @@ class YHFloatingWindow: NSObject { ...@@ -152,6 +157,15 @@ class YHFloatingWindow: NSObject {
contentView.topAnchor.constraint(equalTo: containerView.topAnchor), contentView.topAnchor.constraint(equalTo: containerView.topAnchor),
contentView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor), contentView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
]) ])
contentView.addSubview(bottomImageView)
bottomImageView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
bottomImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
bottomImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
bottomImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
bottomImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
containerView.addSubview(closeButtonContainer) containerView.addSubview(closeButtonContainer)
closeButtonContainer.translatesAutoresizingMaskIntoConstraints = false closeButtonContainer.translatesAutoresizingMaskIntoConstraints = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment