Commit 77b5b7a95565ba33f13a559b0d272b12ae677c55

Authored by “张旭”
1 parent e1763f45

高清 清晰度

metaCode.xcodeproj/project.pbxproj
@@ -197,6 +197,8 @@ @@ -197,6 +197,8 @@
197 1969E1AD2C92E98700E4185E /* CNHomeWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1969E1AC2C92E98700E4185E /* CNHomeWebViewController.swift */; }; 197 1969E1AD2C92E98700E4185E /* CNHomeWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1969E1AC2C92E98700E4185E /* CNHomeWebViewController.swift */; };
198 1969E1AF2C942F4400E4185E /* CNLivePhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1969E1AE2C942F4400E4185E /* CNLivePhotoManager.swift */; }; 198 1969E1AF2C942F4400E4185E /* CNLivePhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1969E1AE2C942F4400E4185E /* CNLivePhotoManager.swift */; };
199 196A55F52D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */; }; 199 196A55F52D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */; };
  200 + 196A55F72D963ACE00B06DB7 /* CNLiveVodLandscapeXuanjiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196A55F62D963ACE00B06DB7 /* CNLiveVodLandscapeXuanjiView.swift */; };
  201 + 196A55F92D963AE700B06DB7 /* CNLiveVodLandscapeGaoqingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196A55F82D963AE600B06DB7 /* CNLiveVodLandscapeGaoqingView.swift */; };
200 197325D22BB11C18002E41A3 /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197325D12BB11C18002E41A3 /* DatabaseManager.swift */; }; 202 197325D22BB11C18002E41A3 /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197325D12BB11C18002E41A3 /* DatabaseManager.swift */; };
201 1975636E2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1975636D2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift */; }; 203 1975636E2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1975636D2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift */; };
202 197563712C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197563702C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift */; }; 204 197563712C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197563702C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift */; };
@@ -597,6 +599,8 @@ @@ -597,6 +599,8 @@
597 1969E1AC2C92E98700E4185E /* CNHomeWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomeWebViewController.swift; sourceTree = "<group>"; }; 599 1969E1AC2C92E98700E4185E /* CNHomeWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomeWebViewController.swift; sourceTree = "<group>"; };
598 1969E1AE2C942F4400E4185E /* CNLivePhotoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePhotoManager.swift; sourceTree = "<group>"; }; 600 1969E1AE2C942F4400E4185E /* CNLivePhotoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePhotoManager.swift; sourceTree = "<group>"; };
599 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodLandscapeBeiSuView.swift; sourceTree = "<group>"; }; 601 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodLandscapeBeiSuView.swift; sourceTree = "<group>"; };
  602 + 196A55F62D963ACE00B06DB7 /* CNLiveVodLandscapeXuanjiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodLandscapeXuanjiView.swift; sourceTree = "<group>"; };
  603 + 196A55F82D963AE600B06DB7 /* CNLiveVodLandscapeGaoqingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodLandscapeGaoqingView.swift; sourceTree = "<group>"; };
600 197325D12BB11C18002E41A3 /* DatabaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseManager.swift; sourceTree = "<group>"; }; 604 197325D12BB11C18002E41A3 /* DatabaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseManager.swift; sourceTree = "<group>"; };
601 1975636D2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeWorkDetailController.swift; sourceTree = "<group>"; }; 605 1975636D2C5A2EB2004E0F42 /* CNLiveVitaeWorkDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeWorkDetailController.swift; sourceTree = "<group>"; };
602 197563702C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeWorkCell.swift; sourceTree = "<group>"; }; 606 197563702C5A3151004E0F42 /* CNLiveVitaeWorkCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeWorkCell.swift; sourceTree = "<group>"; };
@@ -1484,6 +1488,8 @@ @@ -1484,6 +1488,8 @@
1484 isa = PBXGroup; 1488 isa = PBXGroup;
1485 children = ( 1489 children = (
1486 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */, 1490 196A55F42D95432B00B06DB7 /* CNLiveVodLandscapeBeiSuView.swift */,
  1491 + 196A55F82D963AE600B06DB7 /* CNLiveVodLandscapeGaoqingView.swift */,
  1492 + 196A55F62D963ACE00B06DB7 /* CNLiveVodLandscapeXuanjiView.swift */,
1487 ); 1493 );
1488 path = HengPing; 1494 path = HengPing;
1489 sourceTree = "<group>"; 1495 sourceTree = "<group>";
@@ -2470,6 +2476,7 @@ @@ -2470,6 +2476,7 @@
2470 19BB1FEA2AEF7B4A0094D962 /* CNLiveShopConsoleCell.swift in Sources */, 2476 19BB1FEA2AEF7B4A0094D962 /* CNLiveShopConsoleCell.swift in Sources */,
2471 191733132B109F7B007BCC04 /* CNLivePlayerGestureView.swift in Sources */, 2477 191733132B109F7B007BCC04 /* CNLivePlayerGestureView.swift in Sources */,
2472 1938BD202B46799A00390A34 /* CNLivePlayletHomePageController.swift in Sources */, 2478 1938BD202B46799A00390A34 /* CNLivePlayletHomePageController.swift in Sources */,
  2479 + 196A55F72D963ACE00B06DB7 /* CNLiveVodLandscapeXuanjiView.swift in Sources */,
2473 790D019D2A2DCBD000C5978D /* UIView+CNLiveExtensions.swift in Sources */, 2480 790D019D2A2DCBD000C5978D /* UIView+CNLiveExtensions.swift in Sources */,
2474 790B1FB62A41938F0074CF00 /* UIImage+CNLiveExtensions.swift in Sources */, 2481 790B1FB62A41938F0074CF00 /* UIImage+CNLiveExtensions.swift in Sources */,
2475 196211E52D66F5E6001925EC /* CNLiveHomeADCell.swift in Sources */, 2482 196211E52D66F5E6001925EC /* CNLiveHomeADCell.swift in Sources */,
@@ -2574,6 +2581,7 @@ @@ -2574,6 +2581,7 @@
2574 1958B41C2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift in Sources */, 2581 1958B41C2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift in Sources */,
2575 19BB1FE62AEB93B80094D962 /* CNLiveShopUserInfoModel.swift in Sources */, 2582 19BB1FE62AEB93B80094D962 /* CNLiveShopUserInfoModel.swift in Sources */,
2576 19023DBB2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift in Sources */, 2583 19023DBB2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift in Sources */,
  2584 + 196A55F92D963AE700B06DB7 /* CNLiveVodLandscapeGaoqingView.swift in Sources */,
2577 1909DCAB2C649C10001E7986 /* CNLiveDigitalResumePreViewSecCollectionCell.swift in Sources */, 2585 1909DCAB2C649C10001E7986 /* CNLiveDigitalResumePreViewSecCollectionCell.swift in Sources */,
2578 195650C32D7543A500818FC8 /* CNLiveVodIntroductionCell.swift in Sources */, 2586 195650C32D7543A500818FC8 /* CNLiveVodIntroductionCell.swift in Sources */,
2579 195650BD2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift in Sources */, 2587 195650BD2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift in Sources */,
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
@@ -13,7 +13,11 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{ @@ -13,7 +13,11 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{
13 13
14 ///id获取播放地址url 14 ///id获取播放地址url
15 func getVodVideoURL(contentId:String,resultBlock: @escaping downSlideResultBlock){ 15 func getVodVideoURL(contentId:String,resultBlock: @escaping downSlideResultBlock){
16 - 16 + self.getVodVideoURL(contentId: contentId, rate: 2, resultBlock: resultBlock)
  17 + }
  18 + ///id获取播放地址url, rate
  19 + func getVodVideoURL(contentId:String,rate:Int,resultBlock: @escaping downSlideResultBlock){
  20 +
17 // 获取当前时间戳(自1970年以来的秒数) 21 // 获取当前时间戳(自1970年以来的秒数)
18 let timeInterval = Date().timeIntervalSince1970 22 let timeInterval = Date().timeIntervalSince1970
19 // 将时间戳转换为字符串 23 // 将时间戳转换为字符串
@@ -49,7 +53,7 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{ @@ -49,7 +53,7 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{
49 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "uid") 53 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "uid")
50 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "loginSid") 54 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "loginSid")
51 param.setValue("release", forKey: "app_channel_id") 55 param.setValue("release", forKey: "app_channel_id")
52 - param.setValue("2", forKey: "rate") 56 + param.setValue("\(rate)", forKey: "rate")
53 param.setValue("release", forKey: "app_channel_id") 57 param.setValue("release", forKey: "app_channel_id")
54 param.setValue("0", forKey: "retry") 58 param.setValue("0", forKey: "retry")
55 59
@@ -81,6 +85,7 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{ @@ -81,6 +85,7 @@ class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{
81 85
82 task.resume() 86 task.resume()
83 } 87 }
  88 +
84 89
85 func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { 90 func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
86 print("\(response.statusCode)") // 302 91 print("\(response.statusCode)") // 302
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveTVPlayerViewController.swift
@@ -15,6 +15,8 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa @@ -15,6 +15,8 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa
15 15
16 //当前内容id 16 //当前内容id
17 var contentId = "" 17 var contentId = ""
  18 + var playTitle = ""
  19 + var isSeek = false
18 20
19 //CNLiveVodPlayModel 单集model 21 //CNLiveVodPlayModel 单集model
20 var _vodPlayModel : CNLiveVodPlayModel? 22 var _vodPlayModel : CNLiveVodPlayModel?
@@ -280,6 +282,7 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa @@ -280,6 +282,7 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa
280 // [self.player stop]; 282 // [self.player stop];
281 // } 283 // }
282 } 284 }
  285 +
283 var urls = [URL]() 286 var urls = [URL]()
284 urls.append(self.url!) 287 urls.append(self.url!)
285 self.player.assetURLs = urls 288 self.player.assetURLs = urls
@@ -296,7 +299,19 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa @@ -296,7 +299,19 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa
296 } 299 }
297 } 300 }
298 self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape) 301 self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape)
299 - 302 + self.playTitle = title
  303 + self.controlView.controlGaoqingUpdateBlock = { [weak self] gaoqing in
  304 + guard let self = self else { return }
  305 + //
  306 +
  307 + CNLiveHomePageViewModel.shared.getVodVideoURL(contentId: self.vodPlayModel?.contentId ?? "", rate: gaoqing) { result, status in
  308 + if status == .success{
  309 + if let url = result as? String{
  310 + self.seekPlayerWithUrlAndTitle(url: url, title: self.playTitle, seekTime: self.player.currentTime)
  311 + }
  312 + }
  313 + }
  314 + }
300 } 315 }
301 316
302 // MARK: - UITableViewDelegate 317 // MARK: - UITableViewDelegate
@@ -492,7 +507,13 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa @@ -492,7 +507,13 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa
492 507
493 //播放url更换title 508 //播放url更换title
494 func playWithUrlAndTitle(url:String,title:String){ 509 func playWithUrlAndTitle(url:String,title:String){
  510 + if self.isSeek{
  511 + }else{
  512 + self.controlView.gaoqingBgView.resetGaoqing()
  513 + }
  514 + self.isSeek = false
495 self.player.currentPlayerManager.rate = 1.0 515 self.player.currentPlayerManager.rate = 1.0
  516 + self.playTitle = title
496 self.url = URL(string: url) 517 self.url = URL(string: url)
497 var urls = [URL]() 518 var urls = [URL]()
498 urls.append(self.url!) 519 urls.append(self.url!)
@@ -500,6 +521,12 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa @@ -500,6 +521,12 @@ class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITa
500 self.player.playTheIndex(0) 521 self.player.playTheIndex(0)
501 self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape) 522 self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape)
502 } 523 }
  524 + func seekPlayerWithUrlAndTitle(url:String,title:String,seekTime:TimeInterval){
  525 + self.isSeek = true
  526 + self.playWithUrlAndTitle(url: url, title: title)
  527 + self.player.seek(toTime: seekTime)
  528 +
  529 + }
503 530
504 override var preferredStatusBarStyle: UIStatusBarStyle{ 531 override var preferredStatusBarStyle: UIStatusBarStyle{
505 return .lightContent 532 return .lightContent
metaCode/Classes/Main/HuBiLieHomePage/View/VodDetail/CNLiveZFPlayerControlView.swift
@@ -7,8 +7,13 @@ @@ -7,8 +7,13 @@
7 7
8 import Foundation 8 import Foundation
9 import ZFPlayer 9 import ZFPlayer
  10 +
  11 +//标清 2 ,高清 3 ,超清 4
  12 +typealias CNLiveVodPlayerControlLandscapeGaoqingUpdateBlock = (_ gaoqing:Int)->Void
  13 +
10 class CNLiveZFPlayerControlView:ZFPlayerControlView{ 14 class CNLiveZFPlayerControlView:ZFPlayerControlView{
11 15
  16 + var controlGaoqingUpdateBlock:CNLiveVodPlayerControlLandscapeGaoqingUpdateBlock?
12 lazy var beiSuBtn: UIButton = { 17 lazy var beiSuBtn: UIButton = {
13 let closeBtn = UIButton(type: .custom) 18 let closeBtn = UIButton(type: .custom)
14 closeBtn.setTitle("倍速", for: .normal) 19 closeBtn.setTitle("倍速", for: .normal)
@@ -42,7 +47,10 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{ @@ -42,7 +47,10 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{
42 let bottomNavView = CNLiveVodLandscapeBeiSuView() 47 let bottomNavView = CNLiveVodLandscapeBeiSuView()
43 return bottomNavView 48 return bottomNavView
44 }() 49 }()
45 - 50 + lazy var gaoqingBgView :CNLiveVodLandscapeGaoqingView = {
  51 + let bottomNavView = CNLiveVodLandscapeGaoqingView()
  52 + return bottomNavView
  53 + }()
46 54
47 override init(frame: CGRect) { 55 override init(frame: CGRect) {
48 super.init(frame: frame) 56 super.init(frame: frame)
@@ -88,6 +96,17 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{ @@ -88,6 +96,17 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{
88 self.player?.currentPlayerManager.rate = rate 96 self.player?.currentPlayerManager.rate = rate
89 self.beiSuBgView.isHidden = true 97 self.beiSuBgView.isHidden = true
90 } 98 }
  99 +
  100 + self.addSubview(self.gaoqingBgView)
  101 + gaoqingBgView.snp.makeConstraints { make in
  102 + make.left.right.top.bottom.equalToSuperview()
  103 + }
  104 + self.gaoqingBgView.isHidden = true
  105 + self.gaoqingBgView.gaoqingUpdateBlock = {[weak self] gaoqing in
  106 + guard let self = self else { return }
  107 + self.gaoqingBgView.isHidden = true
  108 + self.controlGaoqingUpdateBlock?(gaoqing)
  109 + }
91 } 110 }
92 111
93 override func layoutSubviews() { 112 override func layoutSubviews() {
@@ -116,11 +135,10 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{ @@ -116,11 +135,10 @@ class CNLiveZFPlayerControlView:ZFPlayerControlView{
116 135
117 @objc func beiSuBtnAction(){ 136 @objc func beiSuBtnAction(){
118 self.beiSuBgView.isHidden = false 137 self.beiSuBgView.isHidden = false
119 -  
120 } 138 }
121 139
122 @objc func gaoqingBtnAction(){ 140 @objc func gaoqingBtnAction(){
123 - print("gaoqing") 141 + self.gaoqingBgView.isHidden = false
124 } 142 }
125 143
126 @objc func xuanjiBtnAction(){ 144 @objc func xuanjiBtnAction(){
metaCode/Classes/Main/HuBiLieHomePage/View/VodDetail/HengPing/CNLiveVodLandscapeGaoqingView.swift 0 → 100644
  1 +//
  2 +// CNLiveVodLandscapeGaoqingView.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2025/3/28.
  6 +// 横屏高清
  7 +
  8 +import Foundation
  9 +
  10 +//标清 2 ,高清 3 ,超清 4
  11 +typealias CNLiveVodLandscapeGaoqingUpdateBlock = (_ gaoqing:Int)->Void
  12 +
  13 +class CNLiveVodLandscapeGaoqingView:UIView{
  14 +
  15 + var gaoqingUpdateBlock:CNLiveVodLandscapeGaoqingUpdateBlock?
  16 + var currSeleIdx = 1//720
  17 + //MARK: - 懒加载
  18 + lazy var titleLabel: UILabel = {
  19 + let titleLbl = UILabel()
  20 + titleLbl.font = Font_14
  21 + titleLbl.textColor = HexColor("#FFFFFF")
  22 + titleLbl.text = "画质"
  23 + return titleLbl
  24 + }()
  25 +
  26 + override init(frame: CGRect) {
  27 + super.init(frame: frame)
  28 + self.backgroundColor = HexColor("#000000", alpha: 0.7)
  29 + self.isUserInteractionEnabled = true
  30 + self.initUI()
  31 + self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapAction)))
  32 + }
  33 +
  34 + required init?(coder: NSCoder) {
  35 + fatalError("init(coder:) has not been implemented")
  36 + }
  37 +
  38 + func initUI(){
  39 +
  40 + self.addSubview(self.titleLabel)
  41 + titleLabel.snp.makeConstraints { make in
  42 + make.top.equalToSuperview().offset(31)
  43 + make.centerX.equalToSuperview()
  44 + }
  45 +
  46 + var WH:CGFloat = 90.0
  47 + let padding:CGFloat = 20.0
  48 + let count:Int = 3
  49 + let leftPadding:CGFloat = (KSreenHeight-WH*CGFloat(count)-padding*CGFloat(count-1))*0.5
  50 + var title = "高清"
  51 + var subTitle = "720P"
  52 +
  53 + for i in 0..<count{
  54 + let expandBtn = UIButton.init(type: .custom)
  55 + expandBtn.frame = CGRect(x: leftPadding+CGFloat(i)*(WH+padding), y: 0, width: WH, height: WH)
  56 + expandBtn.centerY = KSreenWidth*0.5
  57 + if i == 0{
  58 + //标清480
  59 + title = "标清"
  60 + subTitle = "480P"
  61 + }else if i == 1{
  62 + //高清720
  63 + title = "高清"
  64 + subTitle = "720P"
  65 + }else if i == 2{
  66 + //超清1080
  67 + title = "超清"
  68 + subTitle = "1080P"
  69 + }
  70 + expandBtn.setTitle("", for: .normal)
  71 + expandBtn.setTitle("", for: .selected)
  72 + expandBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  73 + expandBtn.setTitleColor(HexColor("#478BFF"), for: .selected)
  74 + expandBtn.titleLabel?.font = Font_18
  75 + expandBtn.layer.cornerRadius = 12
  76 + expandBtn.clipsToBounds = true
  77 + expandBtn.tag = 100+i
  78 + expandBtn.addTarget(self, action: #selector(gaoqingBtnAction), for: .touchUpInside)
  79 + self.addSubview(expandBtn)
  80 +
  81 + let titleLbl = UILabel()
  82 + titleLbl.font = Font_14
  83 + titleLbl.text = title
  84 + expandBtn.addSubview(titleLbl)
  85 + titleLbl.snp.makeConstraints { make in
  86 + make.centerX.equalToSuperview().offset(10)
  87 + make.top.equalToSuperview().offset(30)
  88 + }
  89 +
  90 + let subTitleLbl = UILabel()
  91 + subTitleLbl.font = Font_10
  92 + subTitleLbl.text = subTitle
  93 + expandBtn.addSubview(subTitleLbl)
  94 + subTitleLbl.snp.makeConstraints { make in
  95 + make.centerX.equalToSuperview().offset(10)
  96 + make.top.equalTo(titleLbl.snp.bottom).offset(3)
  97 + }
  98 +
  99 + if i == self.currSeleIdx{
  100 + expandBtn.backgroundColor = HexColor("#D3E4FF")
  101 + expandBtn.layer.borderWidth = 0.65
  102 + expandBtn.layer.borderColor = HexColor("#478BFF")?.cgColor
  103 + expandBtn.isSelected = true
  104 + titleLbl.textColor = HexColor("#0668E7")
  105 + subTitleLbl.textColor = HexColor("#0668E7")
  106 + }else{
  107 + expandBtn.backgroundColor = HexColor("#000000")
  108 + expandBtn.layer.borderWidth = 0
  109 + expandBtn.layer.borderColor = HexColor("#000000")?.cgColor
  110 + expandBtn.isSelected = false
  111 + titleLbl.textColor = HexColor("#FFFFFF")
  112 + subTitleLbl.textColor = HexColor("#FFFFFF")
  113 + }
  114 +
  115 + }
  116 + }
  117 + func resetGaoqing(){
  118 + let btnTag:Int = 101
  119 + for obj in self.subviews{
  120 + if obj.tag >= 100{
  121 + if obj.tag == btnTag{
  122 + if let tmpBtn = obj as? UIButton{
  123 + tmpBtn.backgroundColor = HexColor("#D3E4FF")
  124 + tmpBtn.layer.borderWidth = 0.65
  125 + tmpBtn.layer.borderColor = HexColor("#478BFF")?.cgColor
  126 + tmpBtn.isSelected = true
  127 + for lbl in tmpBtn.subviews{
  128 + if let tmpLbl = lbl as? UILabel{
  129 + tmpLbl.textColor = HexColor("#0668E7")
  130 + }
  131 + }
  132 + }
  133 + }else{
  134 + if let tmpBtn = obj as? UIButton{
  135 + tmpBtn.backgroundColor = HexColor("#000000")
  136 + tmpBtn.layer.borderWidth = 0
  137 + tmpBtn.layer.borderColor = HexColor("#000000")?.cgColor
  138 + tmpBtn.isSelected = false
  139 + for lbl in tmpBtn.subviews{
  140 + if let tmpLbl = lbl as? UILabel{
  141 + tmpLbl.textColor = HexColor("#FFFFFF")
  142 + }
  143 + }
  144 + }
  145 + }
  146 + }
  147 + }
  148 +
  149 + }
  150 + @objc func gaoqingBtnAction(btn:UIButton){
  151 + let btnTag = btn.tag
  152 + for obj in self.subviews{
  153 + if obj.tag >= 100{
  154 + if obj.tag == btnTag{
  155 + if let tmpBtn = obj as? UIButton{
  156 + tmpBtn.backgroundColor = HexColor("#D3E4FF")
  157 + tmpBtn.layer.borderWidth = 0.65
  158 + tmpBtn.layer.borderColor = HexColor("#478BFF")?.cgColor
  159 + tmpBtn.isSelected = true
  160 + for lbl in tmpBtn.subviews{
  161 + if let tmpLbl = lbl as? UILabel{
  162 + tmpLbl.textColor = HexColor("#0668E7")
  163 + }
  164 + }
  165 + }
  166 + }else{
  167 + if let tmpBtn = obj as? UIButton{
  168 + tmpBtn.backgroundColor = HexColor("#000000")
  169 + tmpBtn.layer.borderWidth = 0
  170 + tmpBtn.layer.borderColor = HexColor("#000000")?.cgColor
  171 + tmpBtn.isSelected = false
  172 + for lbl in tmpBtn.subviews{
  173 + if let tmpLbl = lbl as? UILabel{
  174 + tmpLbl.textColor = HexColor("#FFFFFF")
  175 + }
  176 + }
  177 + }
  178 + }
  179 + }
  180 + }
  181 +
  182 + let i = btn.tag-100
  183 + var gaoqing:Int = 3
  184 + if i == 0{
  185 + gaoqing = 2
  186 + }else if i == 1{
  187 + gaoqing = 3
  188 + }else if i == 2{
  189 + gaoqing = 4
  190 + }
  191 + self.gaoqingUpdateBlock?(gaoqing)
  192 + }
  193 +
  194 + @objc func tapAction(){
  195 + self.isHidden = true
  196 + }
  197 +
  198 +}
  199 +
metaCode/Classes/Main/HuBiLieHomePage/View/VodDetail/HengPing/CNLiveVodLandscapeXuanjiView.swift 0 → 100644
  1 +//
  2 +// CNLiveVodLandscapeXuanjiView.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2025/3/28.
  6 +//
  7 +
  8 +import Foundation