Commit b38285baaf2fe00980799830646ee8635269b3e5

Authored by liushiyu
2 parents fad828e0 3ec37552
Showing 100 changed files with 1979 additions and 443 deletions

Too many changes to show.

To preserve performance only 100 of 199 files are displayed.

metaCode.xcodeproj/project.pbxproj
... ... @@ -90,6 +90,9 @@
90 90 1938BD3D2B4BDD4B00390A34 /* CNLiveAlbumCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD3C2B4BDD4B00390A34 /* CNLiveAlbumCell.swift */; };
91 91 1938BD3F2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD3E2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift */; };
92 92 1938BD412B4BEC6900390A34 /* CNLiveAlbumListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD402B4BEC6900390A34 /* CNLiveAlbumListModel.swift */; };
  93 + 1938BD432B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD422B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift */; };
  94 + 1938BD452B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD442B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift */; };
  95 + 1938BD472B4FD5A500390A34 /* CNLiveIntegralAlertTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD462B4FD5A500390A34 /* CNLiveIntegralAlertTool.swift */; };
93 96 19565EC02AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */; };
94 97 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */; };
95 98 19565EC52AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */; };
... ... @@ -352,6 +355,9 @@
352 355 1938BD3C2B4BDD4B00390A34 /* CNLiveAlbumCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumCell.swift; sourceTree = "<group>"; };
353 356 1938BD3E2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumMsgModel.swift; sourceTree = "<group>"; };
354 357 1938BD402B4BEC6900390A34 /* CNLiveAlbumListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumListModel.swift; sourceTree = "<group>"; };
  358 + 1938BD422B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomepageDuanJuDetailViewController.swift; sourceTree = "<group>"; };
  359 + 1938BD442B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDuanjuTitleCell.swift; sourceTree = "<group>"; };
  360 + 1938BD462B4FD5A500390A34 /* CNLiveIntegralAlertTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveIntegralAlertTool.swift; sourceTree = "<group>"; };
355 361 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailBtnsCell.swift; sourceTree = "<group>"; };
356 362 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailOrderAssetCell.swift; sourceTree = "<group>"; };
357 363 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopProductManagerController.swift; sourceTree = "<group>"; };
... ... @@ -759,6 +765,7 @@
759 765 isa = PBXGroup;
760 766 children = (
761 767 1938BD292B48014E00390A34 /* CNHomepageDetailViewController.swift */,
  768 + 1938BD422B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift */,
762 769 1938BD2B2B4801A700390A34 /* CNHomePageAnimationTransition.swift */,
763 770 1938BD2D2B48021E00390A34 /* CNHomePageBaseNavigationController.swift */,
764 771 );
... ... @@ -768,6 +775,7 @@
768 775 1938BD392B4BDC2900390A34 /* HomepageDetail */ = {
769 776 isa = PBXGroup;
770 777 children = (
  778 + 1938BD442B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift */,
771 779 1938BD372B4BDC2500390A34 /* CNLiveAlbumImageCell.swift */,
772 780 1938BD3C2B4BDD4B00390A34 /* CNLiveAlbumCell.swift */,
773 781 );
... ... @@ -791,6 +799,80 @@
791 799 path = PlayletHomePage;
792 800 sourceTree = "<group>";
793 801 };
  802 + 1938BD482B512C5800390A34 /* DownSlide */ = {
  803 + isa = PBXGroup;
  804 + children = (
  805 + 7CD6753B2A2740B0008354C1 /* CNDownSlideView.swift */,
  806 + 7CD6753A2A2740B0008354C1 /* CNDownSlideViewRemindView.swift */,
  807 + 19FA20162AE22D3C001F7186 /* CNLiveDownSlideRecommendCell.swift */,
  808 + 19FA20182AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift */,
  809 + 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */,
  810 + 19CC4D4E2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift */,
  811 + );
  812 + path = DownSlide;
  813 + sourceTree = "<group>";
  814 + };
  815 + 1938BD492B512CA300390A34 /* UpSlide */ = {
  816 + isa = PBXGroup;
  817 + children = (
  818 + 7CD675392A2740B0008354C1 /* CNUpSlideView.swift */,
  819 + 7CD675372A2740B0008354C1 /* CNUpSlideViewRemindView.swift */,
  820 + );
  821 + path = UpSlide;
  822 + sourceTree = "<group>";
  823 + };
  824 + 1938BD4A2B512CCE00390A34 /* MainView */ = {
  825 + isa = PBXGroup;
  826 + children = (
  827 + 7CD675382A2740B0008354C1 /* CNMainView.swift */,
  828 + 7C4931372A307BDB000E44B4 /* CNHomePageGuideView.swift */,
  829 + 19F1C2322AB5728B0083D06C /* CNIDCardView.swift */,
  830 + 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */,
  831 + 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */,
  832 + );
  833 + path = MainView;
  834 + sourceTree = "<group>";
  835 + };
  836 + 1938BD4B2B512D3000390A34 /* Shop */ = {
  837 + isa = PBXGroup;
  838 + children = (
  839 + 1938BD4C2B512EBF00390A34 /* ShopConsole */,
  840 + 191733402B284D4A007BCC04 /* ShopCoupon */,
  841 + 19565ED02AF8D904007D6727 /* GoodsManager */,
  842 + 1938BD4D2B512F4600390A34 /* ShopDetail */,
  843 + );
  844 + path = Shop;
  845 + sourceTree = "<group>";
  846 + };
  847 + 1938BD4C2B512EBF00390A34 /* ShopConsole */ = {
  848 + isa = PBXGroup;
  849 + children = (
  850 + 19BB1FE92AEF7B4A0094D962 /* CNLiveShopConsoleCell.swift */,
  851 + );
  852 + path = ShopConsole;
  853 + sourceTree = "<group>";
  854 + };
  855 + 1938BD4D2B512F4600390A34 /* ShopDetail */ = {
  856 + isa = PBXGroup;
  857 + children = (
  858 + 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */,
  859 + 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */,
  860 + 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */,
  861 + );
  862 + path = ShopDetail;
  863 + sourceTree = "<group>";
  864 + };
  865 + 1938BD4E2B51316200390A34 /* VerticalViews */ = {
  866 + isa = PBXGroup;
  867 + children = (
  868 + 7CD675412A2740F8008354C1 /* CNCustomIndexView.swift */,
  869 + 1938BD482B512C5800390A34 /* DownSlide */,
  870 + 1938BD4A2B512CCE00390A34 /* MainView */,
  871 + 1938BD492B512CA300390A34 /* UpSlide */,
  872 + );
  873 + path = VerticalViews;
  874 + sourceTree = "<group>";
  875 + };
794 876 19565EC32AF8ACC2007D6727 /* GoodsManager */ = {
795 877 isa = PBXGroup;
796 878 children = (
... ... @@ -996,6 +1078,7 @@
996 1078 children = (
997 1079 792E57D82A3AA2F2005834DB /* CNLiveCommonBaseModel.swift */,
998 1080 792E57DA2A3AE9F4005834DB /* CNLiveCommonQiniuTool.swift */,
  1081 + 1938BD462B4FD5A500390A34 /* CNLiveIntegralAlertTool.swift */,
999 1082 );
1000 1083 path = Util;
1001 1084 sourceTree = "<group>";
... ... @@ -1321,26 +1404,8 @@
1321 1404 7CD675232A26F8F8008354C1 /* View */ = {
1322 1405 isa = PBXGroup;
1323 1406 children = (
1324   - 191733402B284D4A007BCC04 /* ShopCoupon */,
1325   - 19565ED02AF8D904007D6727 /* GoodsManager */,
1326   - 7CD675372A2740B0008354C1 /* CNUpSlideViewRemindView.swift */,
1327   - 7CD6753B2A2740B0008354C1 /* CNDownSlideView.swift */,
1328   - 7CD675382A2740B0008354C1 /* CNMainView.swift */,
1329   - 7CD6753A2A2740B0008354C1 /* CNDownSlideViewRemindView.swift */,
1330   - 7CD675392A2740B0008354C1 /* CNUpSlideView.swift */,
1331   - 7CD675412A2740F8008354C1 /* CNCustomIndexView.swift */,
1332   - 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */,
1333   - 7C4931372A307BDB000E44B4 /* CNHomePageGuideView.swift */,
1334   - 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */,
1335   - 19F1C2322AB5728B0083D06C /* CNIDCardView.swift */,
1336   - 19FA20162AE22D3C001F7186 /* CNLiveDownSlideRecommendCell.swift */,
1337   - 19FA20182AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift */,
1338   - 19CC4D4E2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift */,
1339   - 19BB1FE92AEF7B4A0094D962 /* CNLiveShopConsoleCell.swift */,
1340   - 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */,
1341   - 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */,
1342   - 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */,
1343   - 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */,
  1407 + 1938BD4E2B51316200390A34 /* VerticalViews */,
  1408 + 1938BD4B2B512D3000390A34 /* Shop */,
1344 1409 );
1345 1410 name = View;
1346 1411 path = HomePage/View;
... ... @@ -1762,6 +1827,7 @@
1762 1827 191733562B2FE855007BCC04 /* CNLivePickerReusingModel.swift in Sources */,
1763 1828 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */,
1764 1829 1926C2912AE0FD4500C71DC3 /* CNLiveDownSlideModel.swift in Sources */,
  1830 + 1938BD452B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift in Sources */,
1765 1831 7C7C62F62A4D72E9007A912E /* CNLiveIdentityDB.swift in Sources */,
1766 1832 19CC4D4F2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift in Sources */,
1767 1833 191733642B392011007BCC04 /* CNLiveShopGoodsSearchViewController.swift in Sources */,
... ... @@ -1796,6 +1862,7 @@
1796 1862 191732FE2B0B3EBF007BCC04 /* CNLiveShopGoodsDetailsViewController.swift in Sources */,
1797 1863 79E496E32AB9357000127BF8 /* UITableViewCell+CNLiveExtension.swift in Sources */,
1798 1864 7C83B4422A541EBF004BF4A4 /* CALayer+CNLiveExtensions.swift in Sources */,
  1865 + 1938BD472B4FD5A500390A34 /* CNLiveIntegralAlertTool.swift in Sources */,
1799 1866 19565EC72AF8AD38007D6727 /* CNLiveShopNewProductController.swift in Sources */,
1800 1867 798A44F72A3077ED00815935 /* CNLiveHotButton.swift in Sources */,
1801 1868 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */,
... ... @@ -1882,6 +1949,7 @@
1882 1949 19FA201B2AE60423001F7186 /* CNLiveDownSlideModelLayout.swift in Sources */,
1883 1950 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */,
1884 1951 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */,
  1952 + 1938BD432B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift in Sources */,
1885 1953 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
1886 1954 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */,
1887 1955 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */,
... ...
metaCode/Classes/Common/Base/CNLiveBaseTabBarViewController.swift
... ... @@ -64,7 +64,7 @@ class CNLiveBaseTabBarViewController: UITabBarController
64 64  
65 65 creatTabbarView(viewController: homeVC, image: "tabbar_hoem_icon_default", selectImage: "tabbar_hoem_icon_selected", title: "首页")
66 66  
67   - creatTabbarView(viewController: authVC, image: "tabbar_hoem_icon_default", selectImage: "tabbar_hoem_icon_selected", title: "认证")
  67 + creatTabbarView(viewController: authVC, image: "tabbar_authentication_unSelect", selectImage: "tabbar_authentication", title: "认证")
68 68  
69 69 creatTabbarView(viewController: mineVC, image: "tabbar_mine_icon_default", selectImage: "tabbar_mine_icon_selected", title: "我的")
70 70  
... ...
metaCode/Classes/Common/Util/CNLiveIntegralAlertTool.swift 0 → 100644
  1 +//
  2 +// CNLiveIntegralAlertTool.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/1/11.
  6 +// 积分支付弹窗
  7 +
  8 +import Foundation
  9 +import QMUIKit
  10 +import SnapKit
  11 +
  12 +///积分支付状态类型
  13 +enum CNLiveIntegralPayStatus {
  14 + ///积分充足
  15 + case integralEnough
  16 + ///积分不足
  17 + case integralNotEnough
  18 + ///支付中
  19 + case paying
  20 + ///支付成功
  21 + case paySuccess
  22 + ///支付失败
  23 + case payFailed
  24 +
  25 +}
  26 +
  27 +class CNLiveIntegralAlertTool:NSObject{
  28 + static let shared = CNLiveIntegralAlertTool()
  29 +
  30 + var homePageNeedReloadActionBlock:homePageNeedReloadBlockActionBlock?
  31 +
  32 + ///当前积分支付状态
  33 + var currentIntegralPayStatus: CNLiveIntegralPayStatus = .integralEnough
  34 +
  35 + let delegate = UIApplication.shared.delegate as! AppDelegate
  36 + /// 专辑名称
  37 + var title:String = ""
  38 +
  39 + /// 专辑积分值
  40 + var integralCount:String = "0"
  41 + /// 支付的商品id
  42 + var productId:String = ""
  43 + /// 用户积分值
  44 + var point:Int = 0
  45 + /// 用户积分model
  46 + var checkInModel:MinePointCheckInModel?
  47 +
  48 + lazy var bgBtnView: UIButton = {
  49 + let bgBtnView = UIButton(frame: self.delegate.window!.bounds)
  50 + bgBtnView.backgroundColor = HexColor("#000000")
  51 + bgBtnView.alpha = 0.6
  52 + bgBtnView.addTarget(self, action: #selector(bgBtnViewAction), for: .touchUpInside)
  53 + return bgBtnView
  54 + }()
  55 +
  56 + lazy var bottomBgView :UIView = {
  57 + let bottomBgView = UIView(frame: CGRect(x: 0, y: KSreenHeight-267, width: KSreenWidth, height: 267))
  58 + bottomBgView.backgroundColor = HexColor("#FFFFFF")
  59 + bottomBgView.layer.cornerRadius = 9
  60 + bottomBgView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
  61 + bottomBgView.tag = 10000
  62 + return bottomBgView
  63 + }()
  64 +
  65 + ///专辑标题
  66 + lazy var albumTitleLabel: UILabel = {
  67 + let titleLabel = UILabel.init(frame: CGRectMake(15, 15, KSreenWidth-15-60, 20))
  68 + titleLabel.textColor = HexColor("#333333")
  69 + titleLabel.textAlignment = .left
  70 + titleLabel.font = Font_16
  71 + titleLabel.text = "剧集名称45集"
  72 + return titleLabel
  73 + }()
  74 +
  75 + lazy var closeBtn: UIButton = {
  76 + let closeBtn = UIButton(type: .custom)
  77 + closeBtn.frame = CGRect(x: self.albumTitleLabel.right, y: 0, width: 50, height: 50)
  78 + closeBtn.setImage(UIImage(named: "point_alert_close"), for: .normal)
  79 + closeBtn.addTarget(self, action: #selector(closeBtnAction), for: .touchUpInside)
  80 + return closeBtn
  81 + }()
  82 +
  83 + lazy var bottomLineView :UIView = {
  84 + let bottomLineView = UIView(frame: CGRect(x: 0, y: self.closeBtn.bottom+2, width: KSreenWidth, height: 1))
  85 + bottomLineView.backgroundColor = HexColor("#E4E4E4")
  86 + return bottomLineView
  87 + }()
  88 +
  89 + ///积分数量
  90 + lazy var integralCountLabel: UILabel = {
  91 + let titleLabel = UILabel.init(frame: CGRectMake(0, self.bottomLineView.bottom+30, 100, 66))
  92 + titleLabel.textColor = HexColor("#333333")
  93 + titleLabel.textAlignment = .left
  94 + titleLabel.font = UIFont.boldSystemFont(ofSize: 55)
  95 + titleLabel.text = "8000"
  96 + return titleLabel
  97 + }()
  98 + ///余额XXX积分
  99 + lazy var balanceIntegralLabel: UILabel = {
  100 + let titleLabel = UILabel.init(frame: CGRectMake(0, 0, 100, 20))
  101 + titleLabel.textColor = HexColor("#696969")
  102 + titleLabel.textAlignment = .left
  103 + titleLabel.font = Font_14
  104 + return titleLabel
  105 + }()
  106 +
  107 + lazy var payBtn: UIButton = {
  108 + let payBtn = UIButton(type: .custom)
  109 + payBtn.frame = CGRect(x: 15, y: self.bottomBgView.height-15-44, width: KSreenWidth-30, height: 44)
  110 + payBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  111 + // fillCode
  112 + let bgLayer1 = CAGradientLayer()
  113 + bgLayer1.colors = [UIColor(red: 0.4, green: 0.77, blue: 1, alpha: 1).cgColor, UIColor(red: 0.38, green: 0.6, blue: 1, alpha: 1).cgColor]
  114 + bgLayer1.locations = [0, 1]
  115 + bgLayer1.frame = payBtn.bounds
  116 + bgLayer1.startPoint = CGPoint(x: 0, y: 0.5)
  117 + bgLayer1.endPoint = CGPoint(x: 0.5, y: 0.5)
  118 + payBtn.layer.addSublayer(bgLayer1)
  119 + payBtn.addTarget(self, action: #selector(payBtnAction), for: .touchUpInside)
  120 + return payBtn
  121 + }()
  122 +
  123 + ///支付中img
  124 + lazy var payingImgView :UIImageView = {
  125 + let payingImgView = UIImageView(frame: CGRect(x: (KSreenWidth-45)/2.0, y: self.bottomLineView.bottom+65, width: 45, height: 43))
  126 + payingImgView.image = UIImage(named: "jifen_paying")
  127 + return payingImgView
  128 + }()
  129 + ///支付成功img
  130 + lazy var paySuccessImgView :UIImageView = {
  131 + let paySuccessImgView = UIImageView(frame: CGRect(x: (KSreenWidth-78)/2.0, y: 60, width: 78, height: 78))
  132 + paySuccessImgView.image = UIImage(named: "jifen_paySuccess")
  133 + return paySuccessImgView
  134 + }()
  135 +
  136 + ///支付中
  137 + lazy var payingLabel: UILabel = {
  138 + let titleLabel = UILabel.init(frame: CGRectMake(0, self.payingImgView.bottom+15, KSreenWidth-40, 20))
  139 + titleLabel.centerX = self.payingImgView.centerX
  140 + titleLabel.textColor = HexColor("#333333")
  141 + titleLabel.textAlignment = .center
  142 + titleLabel.font = Font_14
  143 + return titleLabel
  144 + }()
  145 +
  146 + // MARK: - show
  147 + ///弹出积分购买弹窗
  148 + func showIntegralAlert(title:String,integralCount:String,productId:String){
  149 + self.title = title
  150 + self.integralCount = integralCount
  151 + self.productId = productId
  152 +
  153 + delegate.window?.addSubview(self.bgBtnView)
  154 + delegate.window?.addSubview(self.bottomBgView)
  155 +
  156 + //专辑所需积分值
  157 + let intIntegralCount = Int(integralCount)!
  158 + //用户积分值
  159 + self.getCheckIn { result, status in
  160 + let checkInModel = result as! MinePointCheckInModel
  161 + self.checkInModel = checkInModel
  162 + let pointStr = checkInModel.integral ?? "0"
  163 + let intPoint = Int(pointStr)!
  164 + self.point = intPoint
  165 + if intPoint > intIntegralCount{
  166 + //可以支付积分
  167 + self.currentIntegralPayStatus = .integralEnough
  168 +
  169 + }else{
  170 + //积分不足
  171 + self.currentIntegralPayStatus = .integralNotEnough
  172 + }
  173 + self.initUI()
  174 +
  175 + }
  176 + }
  177 +
  178 + //隐藏积分购买弹窗
  179 + func hiddenIntegralAlert(){
  180 + delegate.window?.subviews.forEach({ view in
  181 + if view.tag == 10000{
  182 + UIView.animate(withDuration: 0.25) {
  183 + view.removeFromSuperview()
  184 + self.bgBtnView.removeFromSuperview()
  185 + }
  186 + }
  187 + })
  188 + }
  189 +
  190 + func initUI(){
  191 + self.bottomBgView.subviews.forEach { view in
  192 + view.removeFromSuperview()
  193 + }
  194 +
  195 + if self.currentIntegralPayStatus == .integralEnough{
  196 + //积分充足
  197 + self.bottomBgView.addSubview(self.albumTitleLabel)
  198 + self.albumTitleLabel.text = self.title
  199 + self.bottomBgView.addSubview(self.closeBtn)
  200 + self.bottomBgView.addSubview(self.bottomLineView)
  201 + self.bottomBgView.addSubview(self.integralCountLabel)
  202 + let integralCountStr = "\(self.integralCount)积分"
  203 + let priceAttri = NSMutableAttributedString.init(string: integralCountStr)
  204 + priceAttri.addAttribute(.font, value: regular_adapt_font(pointSize: 55), range: NSMakeRange(0, integralCountStr.count-2))
  205 + priceAttri.addAttribute(.foregroundColor, value: HexColor("#333333")!, range: NSMakeRange(0, integralCountStr.count-2))
  206 + priceAttri.addAttribute(.font, value: regular_adapt_font(pointSize: 16), range: NSMakeRange(integralCountStr.count-2, 2))
  207 + priceAttri.addAttribute(.foregroundColor, value: HexColor("#333333")!, range: NSMakeRange(integralCountStr.count-2, 2))
  208 + self.integralCountLabel.attributedText = priceAttri
  209 +
  210 + self.bottomBgView.addSubview(self.balanceIntegralLabel)
  211 +
  212 + self.balanceIntegralLabel.text = String(format: "余额%d积分", self.point)
  213 +
  214 + self.bottomBgView.addSubview(self.payBtn)
  215 + self.payBtn.setTitle("确认支付", for: .normal)
  216 +
  217 + self.integralCountLabel.snp.makeConstraints { make in
  218 + make.centerX.equalTo(self.bottomBgView.snp.centerX)
  219 + make.top.equalTo(self.bottomLineView.snp.bottom).offset(30)
  220 + make.width.lessThanOrEqualToSuperview().offset(-10)
  221 + }
  222 + self.balanceIntegralLabel.snp.makeConstraints { make in
  223 + make.centerX.equalTo(self.bottomBgView.snp.centerX)
  224 + make.top.equalTo(self.integralCountLabel.snp.bottom).offset(5)
  225 + make.width.lessThanOrEqualToSuperview()
  226 + }
  227 +
  228 + }else if self.currentIntegralPayStatus == .integralNotEnough{
  229 + //积分不足
  230 + self.bottomBgView.addSubview(self.albumTitleLabel)
  231 + self.albumTitleLabel.text = self.title
  232 + self.bottomBgView.addSubview(self.closeBtn)
  233 + self.bottomBgView.addSubview(self.bottomLineView)
  234 + self.bottomBgView.addSubview(self.integralCountLabel)
  235 + let integralCountStr = "\(self.integralCount)积分"
  236 + let priceAttri = NSMutableAttributedString.init(string: integralCountStr)
  237 + priceAttri.addAttribute(.font, value: regular_adapt_font(pointSize: 55), range: NSMakeRange(0, integralCountStr.count-2))
  238 + priceAttri.addAttribute(.foregroundColor, value: HexColor("#333333")!, range: NSMakeRange(0, integralCountStr.count-2))
  239 + priceAttri.addAttribute(.font, value: regular_adapt_font(pointSize: 16), range: NSMakeRange(integralCountStr.count-2, 2))
  240 + priceAttri.addAttribute(.foregroundColor, value: HexColor("#333333")!, range: NSMakeRange(integralCountStr.count-2, 2))
  241 + self.integralCountLabel.attributedText = priceAttri
  242 +
  243 + self.bottomBgView.addSubview(self.balanceIntegralLabel)
  244 + self.balanceIntegralLabel.text = String(format: "余额%d积分 积分不足", self.point)
  245 +
  246 + self.bottomBgView.addSubview(self.payBtn)
  247 + self.payBtn.setTitle("去赚积分", for: .normal)
  248 +
  249 + self.integralCountLabel.snp.makeConstraints { make in
  250 + make.centerX.equalTo(self.bottomBgView.snp.centerX)
  251 + make.top.equalTo(self.bottomLineView.snp.bottom).offset(30)
  252 + make.width.lessThanOrEqualToSuperview().offset(-10)
  253 + }
  254 + self.balanceIntegralLabel.snp.makeConstraints { make in
  255 + make.centerX.equalTo(self.bottomBgView.snp.centerX)
  256 + make.top.equalTo(self.integralCountLabel.snp.bottom).offset(5)
  257 + make.width.lessThanOrEqualToSuperview()
  258 + }
  259 + }else if self.currentIntegralPayStatus == .paying{
  260 + //支付中
  261 + self.bottomBgView.addSubview(self.albumTitleLabel)
  262 + self.albumTitleLabel.text = self.title
  263 + self.bottomBgView.addSubview(self.closeBtn)
  264 + self.bottomBgView.addSubview(self.bottomLineView)
  265 + self.bottomBgView.addSubview(self.payingImgView)
  266 + self.payingImgView = UIImageView(frame: CGRect(x: (KSreenWidth-45)/2.0, y: self.bottomLineView.bottom+65, width: 45, height: 43))
  267 + self.payingImgView.image = UIImage(named: "jifen_paying")
  268 +
  269 + self.bottomBgView.addSubview(self.payingLabel)
  270 + self.payingLabel.text = "支付中..."
  271 +
  272 + }else if self.currentIntegralPayStatus == .paySuccess{
  273 + //支付成功
  274 + self.bottomBgView.addSubview(self.paySuccessImgView)
  275 + self.paySuccessImgView = UIImageView(frame: CGRect(x: (KSreenWidth-78)/2.0, y: 60, width: 78, height: 78))
  276 + self.paySuccessImgView.image = UIImage(named: "jifen_paySuccess")
  277 +
  278 + self.bottomBgView.addSubview(self.payingLabel)
  279 + self.payingLabel.text = "支付成功\(self.integralCount)积分"
  280 +
  281 + self.bottomBgView.addSubview(self.payBtn)
  282 + self.payBtn.setTitle("完成", for: .normal)
  283 +
  284 + }else if self.currentIntegralPayStatus == .payFailed{
  285 + //支付失败
  286 + }else{
  287 + //其他
  288 + }
  289 + }
  290 +
  291 + //获取用户积分
  292 + func getCheckIn(resultBlock: @escaping downSlideResultBlock){
  293 + CNLiveMineViewModel.requestWithCheckIn { result, respStatue in
  294 + if respStatue == .success {
  295 + let checkModel = result as! MinePointCheckInModel
  296 + resultBlock(checkModel, .success)
  297 + } else {
  298 + resultBlock(NSNull(), .failed)
  299 + }
  300 + }
  301 + }
  302 +
  303 + // MARK: - BtnAction
  304 + @objc func bgBtnViewAction(){
  305 + self.hiddenIntegralAlert()
  306 + }
  307 + @objc func closeBtnAction(){
  308 + self.hiddenIntegralAlert()
  309 + }
  310 + @objc func payBtnAction(){
  311 + if self.currentIntegralPayStatus == .integralEnough{
  312 + self.postOrderVideoByPoint()
  313 + }else if self.currentIntegralPayStatus == .integralNotEnough{
  314 + self.hiddenIntegralAlert()
  315 + //跳转任务中心
  316 + navigationViewController().pushViewController(CNLiveMineQuestViewController(checkModel: self.checkInModel!), animated: pushAnimated)
  317 +
  318 + }else if self.currentIntegralPayStatus == .paying{
  319 +
  320 + }else if self.currentIntegralPayStatus == .paySuccess{
  321 + self.hiddenIntegralAlert()
  322 + }else if self.currentIntegralPayStatus == .payFailed{
  323 + self.currentIntegralPayStatus = .integralEnough
  324 + self.initUI()
  325 + }else{
  326 +
  327 + }
  328 + }
  329 + // MARK: - 积分付费接口
  330 + func postOrderVideoByPoint(){
  331 + self.currentIntegralPayStatus = .paying
  332 + self.initUI()
  333 + //付费接口
  334 + CNLiveHomePageViewModel.orderVideoByPoint(prdId: self.productId) { result, status in
  335 + if status == .success{
  336 + //购买成功
  337 + self.currentIntegralPayStatus = .paySuccess
  338 + self.initUI()
  339 + //刷新短剧首页数据
  340 + self.homePageNeedReloadActionBlock!()
  341 + }else{
  342 + //购买失败
  343 + if self.point > Int(self.integralCount)!{
  344 + //可以支付积分
  345 + self.currentIntegralPayStatus = .integralEnough
  346 + }else{
  347 + //积分不足
  348 + self.currentIntegralPayStatus = .integralNotEnough
  349 + }
  350 + self.initUI()
  351 + let errMsg = result as! String
  352 + showMessage(message: errMsg)
  353 + }
  354 + }
  355 +
  356 + }
  357 +
  358 +
  359 +}
... ...
metaCode/Classes/Extensions/NSObject+CNLiveExtensions.swift
... ... @@ -166,7 +166,6 @@ func hiddenLoading() {
166 166 MBProgressHUD.hide(for: delegate.window!, animated: true)
167 167 }
168 168  
169   -
170 169 ///####模型转换#########
171 170 /**
172 171 * Json转对象
... ...
metaCode/Classes/Main/HomePage/Controller/AuthMainController/CNMetaCodeHomePageController.swift
... ... @@ -370,8 +370,7 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
370 370 return true
371 371 }
372 372  
373   - // MARK: - NewPagedFlowView代理
374   -
  373 + // MARK: - NewPagedFlowView代理 水平方向滑动
375 374 func numberOfPages(in flowView: NewPagedFlowView!) -> Int {
376 375 self.dataArray.count
377 376 }
... ... @@ -411,39 +410,37 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
411 410 return CGSize(width: MainViewW, height: Height)
412 411 }
413 412  
414   - ///NewPagedFlowView 开始滑动
  413 + ///NewPagedFlowView 水平方向开始滑动
415 414 func willBeginScroll(_ scrollView: UIScrollView!) {
416 415 beginOffset = scrollView.contentOffset.x
417 416 }
418 417 ///NewPagedFlowView 滑动中
419 418 func didScroll(_ scrollView: UIScrollView!) {
420   -
421 419 let currentOffset:CGFloat = scrollView.contentOffset.x
422 420  
423 421 if(currentOffset > beginOffset){
424 422  
425 423 if let rightView = self.backgroupView.getRightView(){
426   -
427 424 if let currentApearView = self.backgroupView.currentApearView{
428 425 self.backgroupView.insertSubview(rightView, belowSubview: currentApearView)
429 426 }
430 427  
431 428 self.backgroupView.currentApearView?.maskLayer.right = KSreenWidth - (currentOffset-beginOffset)*2.5
432 429 }else{
433   -
  430 +
434 431 }
435 432 }
436 433  
437 434 if(currentOffset < beginOffset){
438 435 if let leftView = self.backgroupView.getLeftView(){
439   -
  436 +
440 437 if let currentApearView = self.backgroupView.currentApearView{
441 438 self.backgroupView.insertSubview(leftView, belowSubview: currentApearView)
442 439 }
443 440  
444 441 self.backgroupView.currentApearView?.maskLayer.left = (beginOffset-currentOffset)*2.5
445 442 }else{
446   -
  443 +
447 444 }
448 445 }
449 446 }
... ...
metaCode/Classes/Main/HomePage/View/CNCertificationView.swift deleted 100644 → 0
1   -//
2   -// CNCertificationView.swift
3   -// metaCode
4   -//
5   -// Created by daojian on 2023/6/12.
6   -//
7   -
8   -import Foundation
9   -
10   -///身份认证View
11   -class CNCertificationView : UIView{
12   - ///添加身份点击事件回调
13   - var addCertificationAction: closeBlock?
14   -
15   - lazy var contentView: UIView = {
16   - let W = self.width-50
17   - let H = W*1.5
18   - let contentView = UIView.init(frame: CGRect(x: 25, y: KSreenHeight*0.16, width: W, height: H ))
19   - contentView.backgroundColor = UIColor.white
20   - contentView.clipsToBounds = true
21   - contentView.layer.cornerRadius = 20
22   -
23   - return contentView
24   -
25   - }()
26   -
27   -// ///添加身份认证按钮
28   -// lazy var addCerBtn: UIButton = {
29   -// let addCerBtn = UIButton(type: .custom)
30   -// addCerBtn.frame = CGRect(x: 0, y: 0, width: 145, height: 141)
31   -// addCerBtn.centerX = self.contentView.width/2
32   -// addCerBtn.centerY = self.contentView.height/2
33   -// addCerBtn.setImage(UIImage(named: "homePage_addCertification_icon"), for: .normal)
34   -// addCerBtn.addTarget(self, action: #selector(addCerBtnAction), for: .touchUpInside)
35   -// return addCerBtn
36   -// }()
37   -//
38   -// ///添加身份按钮底部标题
39   -// lazy var addCerBtnBottomTitle: UILabel = {
40   -// let addCerBtnBottomTitle = UILabel(frame: CGRect(x: 0, y: self.addCerBtn.bottom - 10, width: 100, height: 22))
41   -// addCerBtnBottomTitle.centerX = self.addCerBtn.centerX
42   -// addCerBtnBottomTitle.textColor = UIColor("#0066FE")
43   -// addCerBtnBottomTitle.textAlignment = .center
44   -// addCerBtnBottomTitle.font = UIFont.systemFont(ofSize: 15, weight: .regular)
45   -// addCerBtnBottomTitle.text = "身份认证"
46   -// return addCerBtnBottomTitle
47   -//
48   -// }()
49   -
50   - override init(frame: CGRect) {
51   - super.init(frame: frame)
52   - self.initUI()
53   -
54   - }
55   -
56   - required init?(coder: NSCoder) {
57   - fatalError("init(coder:) has not been implemented")
58   - }
59   -
60   - func initUI()
61   - {
62   - self.addSubview(self.contentView)
63   -// self.contentView.addSubview(self.addCerBtn)
64   -// self.contentView.addSubview(self.addCerBtnBottomTitle)
65   -// }
66   -
67   -// @objc func addCerBtnAction(){
68   -//
69   -// if(self.addCertificationAction != nil){
70   -// self.addCertificationAction!()
71   -// }
72   -//
73   - }
74   -}
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveAddGoodsSelectUploadImageView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveAddGoodsSelectUploadImageView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveRoundedRectView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveRoundedRectView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveSelUplSingleImageView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveSelUplSingleImageView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopAddGoodsSingleView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopAddGoodsSingleView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopAssociatedGoodsTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopAssociatedGoodsTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassifyCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassifyCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassifyInputTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassifyInputTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassifySectionHeaderView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassifySectionHeaderView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassifySwitchTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassifySwitchTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassilyIconTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassilyIconTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassilyManageHeaderView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassilyManageHeaderView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopClassilyManageTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassilyManageTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopGoodsListCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopGoodsListCell.swift
... ... @@ -50,7 +50,7 @@ class CNLiveShopGoodsListCell: UITableViewCell {
50 50 titleLabel.textAlignment = .left
51 51 titleLabel.font = Font_15
52 52 titleLabel.adjustsFontSizeToFitWidth=true
53   - titleLabel.text = "啊啊啊啊啊"
  53 + titleLabel.text = "标题"
54 54 return titleLabel
55 55 }()
56 56 ///副标题
... ... @@ -60,7 +60,7 @@ class CNLiveShopGoodsListCell: UITableViewCell {
60 60 subTitleLabel.textAlignment = .left
61 61 subTitleLabel.font = Font_13
62 62 subTitleLabel.adjustsFontSizeToFitWidth=true
63   - subTitleLabel.text = "啊啊啊啊"
  63 + subTitleLabel.text = "副标题"
64 64 return subTitleLabel
65 65 }()
66 66 ///价格
... ...
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopGoodsListClassifyView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopGoodsListClassifyView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopGoodsManageDetailsInputManager.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopGoodsManageDetailsInputManager.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopGoodsManageListTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopGoodsManageListTableViewCell.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveShopTextView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopTextView.swift
metaCode/Classes/Main/HomePage/View/GoodsManager/CNLiveSwitchView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveSwitchView.swift
metaCode/Classes/Main/HomePage/View/CNLiveShopConsoleCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopConsole/CNLiveShopConsoleCell.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/10/30.
6   -//
  6 +// 电商控制台cell
7 7  
8 8 import Foundation
9 9  
... ...
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCouponGoodsListSearchView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCouponGoodsListSearchView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCouponGoodsListTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCouponGoodsListTableViewCell.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCouponGoodsListView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCouponGoodsListView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCouponGoodsSearchView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCouponGoodsSearchView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCouponListTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCouponListTableViewCell.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCreateCouponTableViewCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCreateCouponTableViewCell.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveCreateCouponTypeMoneyView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveCreateCouponTypeMoneyView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLivePickerSelectDateTools.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLivePickerSelectDateTools.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLivePickerToolsView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLivePickerToolsView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLivePickerView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLivePickerView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveSelectCouponTapView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveSelectCouponTapView.swift
metaCode/Classes/Main/HomePage/View/ShopCoupon/CNLiveShopCouponCreateBottomView.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopCoupon/CNLiveShopCouponCreateBottomView.swift
metaCode/Classes/Main/HomePage/View/CNLiveShopDetailBtnsCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopDetail/CNLiveShopDetailBtnsCell.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/11/3.
6   -//
  6 +// 电商上滑详情页(下面的页) banner下的按钮cell
7 7  
8 8 import Foundation
9 9  
... ...
metaCode/Classes/Main/HomePage/View/CNLiveShopDetailOrderAssetCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopDetail/CNLiveShopDetailOrderAssetCell.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/11/4.
6   -// 我的订单,我的资产
  6 +// 电商上滑详情页(下面的页) banner下的 我的订单,我的资产cell
7 7  
8 8 import Foundation
9 9 enum CNLiveShopDetailDisplayType {
... ...
metaCode/Classes/Main/HomePage/View/CNLliveShopDetailBannerCell.swift renamed to metaCode/Classes/Main/HomePage/View/Shop/ShopDetail/CNLliveShopDetailBannerCell.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/11/1.
6   -//
  6 +// 电商上滑详情页(下面的页) bannercell
7 7  
8 8 import Foundation
9 9 import FSPagerView
... ...
metaCode/Classes/Main/HomePage/View/CNCustomIndexView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/CNCustomIndexView.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by daojian on 2023/5/31.
6   -//
  6 +// 认证-上下滑的容器View
7 7  
8 8 import Foundation
9 9  
... ...
metaCode/Classes/Main/HomePage/View/CNDownSlideSingleCourseCell.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideSingleCourseCell.swift
metaCode/Classes/Main/HomePage/View/CNDownSlideView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideView.swift
metaCode/Classes/Main/HomePage/View/CNDownSlideViewRemindView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideViewRemindView.swift
metaCode/Classes/Main/HomePage/View/CNLiveDownSlideRecommendCell.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNLiveDownSlideRecommendCell.swift
metaCode/Classes/Main/HomePage/View/CNLiveDownSlideTodayRecommendCell.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNLiveDownSlideTodayRecommendCell.swift
metaCode/Classes/Main/HomePage/View/CNUpSlideDetailScrollView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNUpSlideDetailScrollView.swift
metaCode/Classes/Main/HomePage/View/VerticalViews/MainView/CNCertificationView.swift 0 → 100644
  1 +////
  2 +//// CNCertificationView.swift
  3 +//// metaCode
  4 +////
  5 +//// Created by daojian on 2023/6/12.
  6 +//// 旧卡片(废弃)
  7 +//
  8 +//import Foundation
  9 +//
  10 +/////身份认证View
  11 +//class CNCertificationView : UIView{
  12 +// ///添加身份点击事件回调
  13 +// var addCertificationAction: closeBlock?
  14 +//
  15 +// lazy var contentView: UIView = {
  16 +// let W = self.width-50
  17 +// let H = W*1.5
  18 +// let contentView = UIView.init(frame: CGRect(x: 25, y: KSreenHeight*0.16, width: W, height: H ))
  19 +// contentView.backgroundColor = UIColor.white
  20 +// contentView.clipsToBounds = true
  21 +// contentView.layer.cornerRadius = 20
  22 +//
  23 +// return contentView
  24 +//
  25 +// }()
  26 +//
  27 +//// ///添加身份认证按钮
  28 +//// lazy var addCerBtn: UIButton = {
  29 +//// let addCerBtn = UIButton(type: .custom)
  30 +//// addCerBtn.frame = CGRect(x: 0, y: 0, width: 145, height: 141)
  31 +//// addCerBtn.centerX = self.contentView.width/2
  32 +//// addCerBtn.centerY = self.contentView.height/2
  33 +//// addCerBtn.setImage(UIImage(named: "homePage_addCertification_icon"), for: .normal)
  34 +//// addCerBtn.addTarget(self, action: #selector(addCerBtnAction), for: .touchUpInside)
  35 +//// return addCerBtn
  36 +//// }()
  37 +////
  38 +//// ///添加身份按钮底部标题
  39 +//// lazy var addCerBtnBottomTitle: UILabel = {
  40 +//// let addCerBtnBottomTitle = UILabel(frame: CGRect(x: 0, y: self.addCerBtn.bottom - 10, width: 100, height: 22))
  41 +//// addCerBtnBottomTitle.centerX = self.addCerBtn.centerX
  42 +//// addCerBtnBottomTitle.textColor = UIColor("#0066FE")
  43 +//// addCerBtnBottomTitle.textAlignment = .center
  44 +//// addCerBtnBottomTitle.font = UIFont.systemFont(ofSize: 15, weight: .regular)
  45 +//// addCerBtnBottomTitle.text = "身份认证"
  46 +//// return addCerBtnBottomTitle
  47 +////
  48 +//// }()
  49 +//
  50 +// override init(frame: CGRect) {
  51 +// super.init(frame: frame)
  52 +// self.initUI()
  53 +//
  54 +// }
  55 +//
  56 +// required init?(coder: NSCoder) {
  57 +// fatalError("init(coder:) has not been implemented")
  58 +// }
  59 +//
  60 +// func initUI()
  61 +// {
  62 +// self.addSubview(self.contentView)
  63 +//// self.contentView.addSubview(self.addCerBtn)
  64 +//// self.contentView.addSubview(self.addCerBtnBottomTitle)
  65 +//// }
  66 +//
  67 +//// @objc func addCerBtnAction(){
  68 +////
  69 +//// if(self.addCertificationAction != nil){
  70 +//// self.addCertificationAction!()
  71 +//// }
  72 +////
  73 +// }
  74 +//}
... ...
metaCode/Classes/Main/HomePage/View/CNHomePageBackgroupView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/MainView/CNHomePageBackgroupView.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by daojian on 2023/6/6.
6   -//
  6 +// 认证-添加身份背景视图
7 7  
8 8 import Foundation
9 9 import UIKit
... ...
metaCode/Classes/Main/HomePage/View/CNHomePageGuideView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/MainView/CNHomePageGuideView.swift
metaCode/Classes/Main/HomePage/View/CNIDCardView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/MainView/CNIDCardView.swift
... ... @@ -3,7 +3,7 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/9/16.
6   -//
  6 +// 身份认证卡片
7 7  
8 8 import Foundation
9 9  
... ...
metaCode/Classes/Main/HomePage/View/CNMainView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/MainView/CNMainView.swift
metaCode/Classes/Main/HomePage/View/CNUpSlideView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/UpSlide/CNUpSlideView.swift
metaCode/Classes/Main/HomePage/View/CNUpSlideViewRemindView.swift renamed to metaCode/Classes/Main/HomePage/View/VerticalViews/UpSlide/CNUpSlideViewRemindView.swift
metaCode/Classes/Main/HomePages/Controller/AuthController/CNLiveAuthViewController.swift
... ... @@ -28,7 +28,8 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
28 28 var totolNum = 0//一共显示多少行cell
29 29  
30 30 var selectedCell: CNDownSlideSingleCourseCell?
31   -
  31 + var selectedDuanjuCell: CNLiveHomePageDuanJuCell?
  32 +
32 33 var statusBarShouldBeHidden = false
33 34 //we need to set `View controller-based status bar appearance = YES` in info.plist.
34 35 //so we can be able to hide statusBar.
... ... @@ -40,16 +41,6 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
40 41 return .slide
41 42 }
42 43  
43   - var _downPath:String?
44   - var downPath:String? {
45   - get{
46   - return _downPath
47   - }
48   - set{
49   - _downPath = newValue!
50   - }
51   - }
52   -
53 44 // MARK: - 懒加载
54 45 ///数据源
55 46 lazy var dataArray: NSMutableArray = {
... ... @@ -57,9 +48,16 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
57 48 return dataArray
58 49 }()
59 50  
  51 + //短剧的数据源
  52 + lazy var duanjuDataArray: NSMutableArray = {
  53 + var dataArray = NSMutableArray()
  54 + return dataArray
  55 + }()
  56 +
60 57 override func viewWillAppear(_ animated: Bool) {
61 58 super.viewWillAppear(animated)
62 59 self.updateStatusBarAndTabbarFrame(visible: true)
  60 + self.getMyAlbumCollection(page: 1)
63 61 }
64 62 override func viewDidLoad() {
65 63 super.viewDidLoad()
... ... @@ -115,6 +113,20 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
115 113 else {
116 114 return CNLiveHomePageDuanJuCell()
117 115 }
  116 + cell.setModelArr(modelArr: self.duanjuDataArray)
  117 + cell.DuanJUCellSelectedCallBack = {
  118 + duanJuCell in
  119 + self.selectedDuanjuCell = duanJuCell
  120 +
  121 + let detailVC = CNHomePageBaseNavigationController(rootViewController:CNHomepageDuanJuDetailViewController(cell: duanJuCell))
  122 +
  123 + detailVC.dismissClosure = { [weak self] in
  124 + guard let StrongSelf = self else { return }
  125 + StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
  126 + }
  127 + self.updateStatusBarAndTabbarFrame(visible: false)
  128 + self.present(detailVC, animated: true, completion: nil)
  129 + }
118 130 return cell
119 131 }else{
120 132 let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
... ... @@ -189,6 +201,18 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
189 201  
190 202 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
191 203 if self.isHaveDuanJU && indexPath.section == 0{
  204 + //点击在追短剧
  205 + guard let cell = tableView.cellForRow(at: indexPath) as? CNLiveHomePageDuanJuCell else { return }
  206 + selectedDuanjuCell = cell
  207 +
  208 + let detailVC = CNHomePageBaseNavigationController(rootViewController:CNHomepageDuanJuDetailViewController(cell: selectedDuanjuCell!))
  209 +
  210 + detailVC.dismissClosure = { [weak self] in
  211 + guard let StrongSelf = self else { return }
  212 + StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
  213 + }
  214 + updateStatusBarAndTabbarFrame(visible: false)
  215 + present(detailVC, animated: true, completion: nil)
192 216  
193 217 }else{
194 218  
... ... @@ -201,7 +225,7 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
201 225 }else if slideModel.type == SlideModelTypeAllCourse12{
202 226 guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
203 227 selectedCell = cell
204   - let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel))
  228 + let detailVC = CNHomePageBaseNavigationController(rootViewController: CNHomepageDetailViewController(cell: cell,slideModel: slideModel))
205 229 detailVC.dismissClosure = { [weak self] in
206 230 guard let StrongSelf = self else { return }
207 231 StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
... ... @@ -227,7 +251,8 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
227 251  
228 252 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
229 253 if self.isHaveDuanJU && indexPath.section == 0{
230   - return 300
  254 + //标题55+n个cell*(45+15*2)+首尾15
  255 + return CGFloat(self.duanjuDataArray.count)*(45+15*2)+CGFloat(55)+15+15
231 256 }else{
232 257 let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
233 258 return CGFloat(slideModel.cellH)
... ... @@ -250,23 +275,33 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
250 275 for listModel in homePageListMdls {
251 276 if listModel.type == 3{
252 277 //在追短剧
253   - self.isHaveDuanJU = true
  278 + self.getMyAlbumCollection(page: 1)
254 279 }else if listModel.type == 1{
255 280 //页面
256 281 self.getPageApi(pageID: listModel.content)
257 282 }
258 283 }
259 284 }else{
260   -
  285 + self.getHomePageConfigListApi()
261 286 }
262 287 }
263 288 }
264 289  
265 290 //我的专辑收藏--在追短剧
266   - func getMyAlbumCollection(){
267   - CNLiveHomePageViewModel.requestGetHomePage { result, status in
  291 + func getMyAlbumCollection(page:NSInteger){
  292 + CNLiveHomePageViewModel.requestGetHomePageMyAlbum(page: page){ result, status in
268 293 if status == .success{
269   -
  294 + let arr = result as! Array<CNLiveAlbumMsgModel>
  295 + if arr.count>0{
  296 + //显示在追短剧cell
  297 + self.isHaveDuanJU = true
  298 + self.duanjuDataArray = NSMutableArray(array: arr)
  299 + }else{
  300 + //隐藏在追短剧cell
  301 + self.isHaveDuanJU = false
  302 + }
  303 + self.tableView.reloadData()
  304 +
270 305 }else{
271 306  
272 307 }
... ...
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomePageAnimationTransition.swift
... ... @@ -39,26 +39,47 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning {
39 39 let fromNavi = fromVCtemp.viewControllers![0] as! CNLiveBaseNavigationController
40 40 let fromVC = fromNavi.viewControllers.first as! CNLiveAuthViewController
41 41 guard let toNaviVC = transitionContext.viewController(forKey: .to) as? CNHomePageBaseNavigationController else { return }
42   - guard let selectedCell = fromVC.selectedCell else { return }
43   - let toVC = toNaviVC.topViewController as! CNHomepageDetailViewController
44   - let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: fromVC.view)
45   - //2.Set presentation original size.
46   - toVC.view.frame = frame
47   - toVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width
48   - toVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height
49   -
50   - containerView.addSubview(toNaviVC.view)
51   -
52   - //3.Change original size to final size with animation.
53   - UIView.animate(withDuration: transitonDuration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {
54   - toVC.view.frame = UIScreen.main.bounds
55   - toVC.scrollView.imageView.frame.size.width = KSreenWidth
56   - toVC.scrollView.imageView.frame.size.height = KSreenWidth*DownSlideSingleCourseImgH/DownSlideSingleCourseW
57   - toVC.closeBtn.alpha = 1
  42 + if toNaviVC.topViewController is CNHomepageDetailViewController{
  43 + guard let selectedCell = fromVC.selectedCell else { return }
  44 + let toVC = toNaviVC.topViewController as! CNHomepageDetailViewController
  45 + let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: fromVC.view)
  46 + //2.Set presentation original size.
  47 + toVC.view.frame = frame
  48 + toVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width
  49 + toVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height
  50 +
  51 + containerView.addSubview(toNaviVC.view)
  52 +
  53 + //3.Change original size to final size with animation.
  54 + UIView.animate(withDuration: transitonDuration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {
  55 + toVC.view.frame = UIScreen.main.bounds
  56 + toVC.scrollView.imageView.frame.size.width = KSreenWidth
  57 + toVC.scrollView.imageView.frame.size.height = KSreenWidth*DownSlideSingleCourseImgH/DownSlideSingleCourseW
  58 + toVC.closeBtn.alpha = 1
  59 +
  60 + }) { (completed) in
  61 + transitionContext.completeTransition(completed)
  62 + }
  63 + }else if toNaviVC.topViewController is CNHomepageDuanJuDetailViewController{
  64 + guard let selectedCell = fromVC.selectedDuanjuCell else { return }
  65 + let toVC = toNaviVC.topViewController as! CNHomepageDuanJuDetailViewController
  66 + let frame = selectedCell.convert(selectedCell.totalView.frame, to: fromVC.view)
  67 + //2.Set presentation original size.
  68 + toVC.view.frame = frame
  69 + containerView.addSubview(toNaviVC.view)
58 70  
59   - }) { (completed) in
60   - transitionContext.completeTransition(completed)
  71 + //3.Change original size to final size with animation.
  72 + UIView.animate(withDuration: transitonDuration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {
  73 + toVC.view.frame = UIScreen.main.bounds
  74 + toVC.closeBtn.alpha = 1
  75 +
  76 + }) { (completed) in
  77 + transitionContext.completeTransition(completed)
  78 + }
  79 + }else{
  80 + return
61 81 }
  82 +
62 83 }
63 84  
64 85 func animationForDismiss(using transitionContext: UIViewControllerContextTransitioning) {
... ... @@ -66,19 +87,36 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning {
66 87 guard let toVCTabbar = transitionContext.viewController(forKey: .to) as? CNLiveBaseTabBarViewController else { return }
67 88 let toVCNav = toVCTabbar.viewControllers?.first as! CNLiveBaseNavigationController
68 89 let toVC = toVCNav.viewControllers.first as! CNLiveAuthViewController
69   - guard let selectedCell = toVC.selectedCell else { return }
70   - let fromVC = fromNaviVC.topViewController as! CNHomepageDetailViewController
71   -
72   - UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
73   - let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: toVC.view)
74   - fromVC.view.frame = frame
75   - fromVC.view.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius
76   - fromVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width
77   - fromVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height
78   - fromVC.closeBtn.alpha = 0
  90 + if fromNaviVC.topViewController is CNHomepageDetailViewController{
  91 + guard let selectedCell = toVC.selectedCell else { return }
  92 + let fromVC = fromNaviVC.topViewController as! CNHomepageDetailViewController
79 93  
80   - }) { (completed) in
81   - transitionContext.completeTransition(completed)
  94 + UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
  95 + let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: toVC.view)
  96 + fromVC.view.frame = frame
  97 + fromVC.view.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius
  98 + fromVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width
  99 + fromVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height
  100 + fromVC.closeBtn.alpha = 0
  101 +
  102 + }) { (completed) in
  103 + transitionContext.completeTransition(completed)
  104 + }
  105 + }else if fromNaviVC.topViewController is CNHomepageDuanJuDetailViewController{
  106 + guard let selectedCell = toVC.selectedDuanjuCell else { return }
  107 + let fromVC = fromNaviVC.topViewController as! CNHomepageDuanJuDetailViewController
  108 + UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
  109 + let frame = selectedCell.convert(selectedCell.totalView.frame, to: toVC.view)
  110 + fromVC.view.frame = frame
  111 + fromVC.view.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius
  112 + fromVC.closeBtn.alpha = 0
  113 +
  114 + }) { (completed) in
  115 + transitionContext.completeTransition(completed)
  116 + }
  117 +
  118 + }else{
  119 + return
82 120 }
83 121 }
84 122  
... ...
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomepageDetailViewController.swift
... ... @@ -6,12 +6,16 @@
6 6 // 首页短剧--大图点击详情页
7 7  
8 8 import Foundation
  9 +import MJRefresh
  10 +import EmptyDataSet_Swift
9 11  
10   -class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewDataSource, UITableViewDelegate{
  12 +class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewDataSource, UITableViewDelegate,EmptyDataSetSource, EmptyDataSetDelegate{
11 13  
12 14 let kCNLiveAlbumImageCellIdentifier = "kCNLiveAlbumImageCellIdentifier"
13 15 let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier"
14 16  
  17 + var pageNum: NSInteger
  18 + var network_type: CNLiveMineResponseType!
15 19 // MARK: - 懒加载
16 20 ///数据源
17 21 lazy var dataArray: NSMutableArray = {
... ... @@ -22,6 +26,8 @@ class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewData
22 26 let tableView = UITableView(frame: .zero, style: .plain)
23 27 tableView.dataSource = self
24 28 tableView.delegate = self
  29 + tableView.emptyDataSetSource = self
  30 + tableView.emptyDataSetDelegate = self
25 31 tableView.separatorStyle = .none
26 32 tableView.tableFooterView = UIView.init()
27 33 tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier)
... ... @@ -75,11 +81,13 @@ class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewData
75 81 }()
76 82  
77 83 init(cell: CNDownSlideSingleCourseCell,slideModel:CNLiveDownSlideModel) {
  84 + self.pageNum = 1
78 85 self.cell = cell
79 86 super.init(nibName: nil, bundle: nil)
80 87 self.slideModel = slideModel
81 88 self.setupTranstion()
82 89 setNeedsStatusBarAppearanceUpdate()
  90 +
83 91 }
84 92  
85 93 private func setupTranstion() {
... ... @@ -95,7 +103,7 @@ class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewData
95 103 super.viewDidLoad()
96 104 setupUI()
97 105 getImageFromCell()
98   - self.getBlockContents()
  106 + self.getBlockContents(page: 1)
99 107 }
100 108  
101 109 private func setupUI() {
... ... @@ -137,7 +145,6 @@ class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewData
137 145  
138 146 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
139 147  
140   -// let goodsModel = self.dataArray[indexPath.row] as! CNLiveShopGoodsListModel
141 148 if indexPath.section == 0{
142 149 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
143 150 else {
... ... @@ -167,17 +174,52 @@ class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewData
167 174 }
168 175  
169 176 // MARK: - 获取全部专辑列表
170   - func getBlockContents(){
171   - CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "") { result, status in
  177 + func getBlockContents(page:NSInteger){
  178 + showLoading(message: "")
  179 + CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "", page: page) {[weak self] result, status in
  180 + hiddenLoading()
172 181 if status == .success{
173   - let albumArr = result as! Array<CNLiveAlbumModel>
174   - self.dataArray = NSMutableArray(array: albumArr)
175   - self.tableView.reloadData()
176   - }else{
  182 + if self!.pageNum > 1 {
  183 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  184 + }
  185 + if self!.pageNum == 1 {
  186 + self!.dataArray.removeAllObjects()
  187 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  188 + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil {
  189 + self!.addRefreshView()
  190 + self!.pageNum = self!.pageNum + 1
  191 + self!.getBlockContents(page: self!.pageNum)
  192 + }
  193 + }
177 194  
  195 + self!.tableView.mj_header?.endRefreshing()
  196 + self!.tableView.mj_footer?.endRefreshing()
  197 + self!.tableView.reloadData()
  198 + if (result as! Array<Any>).count == 0 {
  199 + self!.tableView.mj_footer?.endRefreshingWithNoMoreData()
  200 + self!.tableView.reloadData()
  201 + }
  202 +
  203 + }else if (status == .noNetwork) {
  204 + self!.network_type = .noNetwork
  205 + self!.tableView.reloadEmptyDataSet()
  206 + } else {
  207 + self!.network_type = .failed
  208 + self!.tableView.reloadEmptyDataSet()
178 209 }
179 210 }
180 211 }
  212 + func addRefreshView() {
  213 + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
  214 + self!.pageNum = 1
  215 + self!.getBlockContents(page: 1)
  216 + })
  217 +
  218 + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
  219 + self!.pageNum = self!.pageNum + 1
  220 + self!.getBlockContents(page: self!.pageNum)
  221 + })
  222 + }
181 223  
182 224 @objc private func handleDismissPan(gesture: UIPanGestureRecognizer) {
183 225 if !draggingDownToDismiss {
... ... @@ -271,3 +313,48 @@ extension CNHomepageDetailViewController: UIGestureRecognizerDelegate {
271 313 return true
272 314 }
273 315 }
  316 +
  317 +extension CNHomepageDetailViewController {
  318 +
  319 + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
  320 + if network_type == .failed || network_type == .unkonw {
  321 + return UIImage(named: "mine_list_source_unusual_failed")
  322 + }
  323 + if dataArray.count == 0 {
  324 + return UIImage(named: "mine_list_source_unusual_empty")
  325 + }
  326 + if network_type == .noNetwork {
  327 + return UIImage(named: "mine_list_source_unusual_noNet")
  328 + }
  329 + return UIImage(named: "mine_list_source_unusual_empty")
  330 + }
  331 +
  332 + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? {
  333 + var defult_string = ""
  334 + if network_type == .failed || network_type == .unkonw {
  335 + defult_string = "接口请求错误,刷新试试~"
  336 + }
  337 + if network_type == .noNetwork {
  338 + defult_string = "网络开小差了,刷新试试~"
  339 + }
  340 + if dataArray.count == 0 {
  341 + defult_string = "暂时没有数据~"
  342 + }
  343 + return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!])
  344 + }
  345 +
  346 + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? {
  347 + if network_type == .failed || network_type == .noNetwork {
  348 + let attributes = [NSAttributedString.Key.font:Font_16_Fit,
  349 + NSAttributedString.Key.foregroundColor: HexColor("#609BFF")]
  350 + return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any])
  351 + }
  352 + return nil
  353 + }
  354 +
  355 + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) {
  356 + if network_type == .failed || network_type == .noNetwork {
  357 + getBlockContents(page: 1)
  358 + }
  359 + }
  360 +}
... ...
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomepageDuanJuDetailViewController.swift 0 → 100644
  1 +//
  2 +// CNHomepageDuanJuDetailViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/1/5.
  6 +// 首页短剧--在追短剧点击详情页
  7 +
  8 +import Foundation
  9 +import MJRefresh
  10 +import EmptyDataSet_Swift
  11 +
  12 +class CNHomepageDuanJuDetailViewController: CNLiveBaseViewController ,UITableViewDataSource, UITableViewDelegate,EmptyDataSetSource, EmptyDataSetDelegate{
  13 +
  14 + let kCNLiveDuanjuTitleCellIdentifier = "kCNLiveDuanjuTitleCellIdentifier"
  15 + let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier"
  16 +
  17 + var pageNum: NSInteger
  18 + var network_type: CNLiveMineResponseType!
  19 + // MARK: - 懒加载
  20 + ///数据源
  21 + lazy var dataArray: NSMutableArray = {
  22 + var dataArray = NSMutableArray()
  23 + return dataArray
  24 + }()
  25 + lazy var tableView : UITableView = {
  26 + let tableView = UITableView(frame: .zero, style: .plain)
  27 + tableView.dataSource = self
  28 + tableView.delegate = self
  29 + tableView.emptyDataSetSource = self
  30 + tableView.emptyDataSetDelegate = self
  31 + tableView.separatorStyle = .none
  32 + tableView.tableFooterView = UIView.init()
  33 + tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier)
  34 + tableView.register(CNLiveDuanjuTitleCell.self, forCellReuseIdentifier: kCNLiveDuanjuTitleCellIdentifier)
  35 + return tableView
  36 + }()
  37 +
  38 + var dismissClosure: (()->())?
  39 + //the point when start to interactive
  40 + var interactiveStartingPoint: CGPoint? = nil
  41 +
  42 + var draggingDownToDismiss = false
  43 +
  44 + let cell: CNLiveHomePageDuanJuCell!
  45 +
  46 + private lazy var dismissPanGesture: UIPanGestureRecognizer = {
  47 + let ges = UIPanGestureRecognizer()
  48 + ges.maximumNumberOfTouches = 1
  49 + ges.addTarget(self, action: #selector(handleDismissPan(gesture:)))
  50 + ges.delegate = self
  51 + return ges
  52 + }()
  53 +
  54 + lazy var closeBtn: UIButton = {
  55 + let btn = UIButton()
  56 + btn.frame = CGRect(x: KSreenWidth - 20 - 30, y: KStatusBarHeight+20, width: 30, height: 30)
  57 + btn.setImage(#imageLiteral(resourceName: "close_button"), for: .normal)
  58 + btn.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
  59 + return btn
  60 + }()
  61 +
  62 + init(cell:CNLiveHomePageDuanJuCell) {
  63 + self.pageNum = 1
  64 + self.cell = cell
  65 + super.init(nibName: nil, bundle: nil)
  66 + self.setupTranstion()
  67 + setNeedsStatusBarAppearanceUpdate()
  68 +
  69 + }
  70 +
  71 + private func setupTranstion() {
  72 + modalPresentationStyle = .custom
  73 + transitioningDelegate = self
  74 + }
  75 +
  76 + required init?(coder aDecoder: NSCoder) {
  77 + fatalError("init(coder:) has not been implemented")
  78 + }
  79 +
  80 + override func viewDidLoad() {
  81 + super.viewDidLoad()
  82 + setupUI()
  83 + self.getMyAlbum(page: 1)
  84 + self.view.backgroundColor = .white
  85 + }
  86 +
  87 + private func setupUI() {
  88 + self.view.layer.masksToBounds = true
  89 + self.view.addSubview(self.tableView)
  90 + self.tableView.frame = CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth, height: KSreenHeight-KStatusBarHeight)
  91 + view.addSubview(closeBtn)
  92 + view.addGestureRecognizer(dismissPanGesture)
  93 +
  94 + if #available(iOS 11.0, *) {
  95 + } else {
  96 + automaticallyAdjustsScrollViewInsets = false
  97 + }
  98 + }
  99 +
  100 + @objc private func closeAction() {
  101 + dismiss(animated: true, completion: nil)
  102 + let nav = self.navigationController as! CNHomePageBaseNavigationController
  103 + nav.dismissClosure?()
  104 + }
  105 +
  106 + func numberOfSections(in tableView: UITableView) -> Int {
  107 + 2
  108 + }
  109 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  110 + if section == 0{
  111 + return 1
  112 + }else{
  113 + return self.dataArray.count
  114 + }
  115 + }
  116 +
  117 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  118 + if indexPath.section == 0{
  119 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDuanjuTitleCellIdentifier) as? CNLiveDuanjuTitleCell
  120 + else {
  121 + let cell = CNLiveDuanjuTitleCell()
  122 + return cell
  123 + }
  124 + return cell
  125 + }else{
  126 + let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumMsgModel
  127 +
  128 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumCellIdentifier) as? CNLiveAlbumCell
  129 + else {
  130 + let cell = CNLiveAlbumCell()
  131 + return cell
  132 + }
  133 + cell.albumMsgModel = albumModel
  134 + return cell
  135 + }
  136 + }
  137 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  138 + if indexPath.section == 0{
  139 + return 45//10+30+5
  140 + }else{
  141 + return 75
  142 + }
  143 + }
  144 +
  145 + // MARK: - 获取我的在追短剧列表
  146 + func getMyAlbum(page:NSInteger){
  147 + CNLiveHomePageViewModel.requestGetHomePageMyAlbum(page: page){[weak self] result, status in
  148 + if status == .success{
  149 + if self!.pageNum > 1 {
  150 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumMsgModel])
  151 + }
  152 + if self!.pageNum == 1 {
  153 + self!.dataArray.removeAllObjects()
  154 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumMsgModel])
  155 + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil {
  156 + self!.addRefreshView()
  157 + self!.pageNum = self!.pageNum + 1
  158 + self!.getMyAlbum(page: self!.pageNum)
  159 +
  160 + }
  161 + }
  162 +
  163 + self!.tableView.mj_header?.endRefreshing()
  164 + self!.tableView.mj_footer?.endRefreshing()
  165 + self!.tableView.reloadData()
  166 + if (result as! Array<Any>).count == 0 {
  167 + self!.tableView.mj_footer?.endRefreshingWithNoMoreData()
  168 + self!.tableView.reloadData()
  169 + }
  170 +
  171 + }else if (status == .noNetwork) {
  172 + self!.network_type = .noNetwork
  173 + self!.tableView.reloadEmptyDataSet()
  174 + } else {
  175 + self!.network_type = .failed
  176 + self!.tableView.reloadEmptyDataSet()
  177 + }
  178 + }
  179 + }
  180 + func addRefreshView() {
  181 + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
  182 + self!.pageNum = 1
  183 + self!.getMyAlbum(page: 1)
  184 + })
  185 +
  186 + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
  187 + self!.pageNum = self!.pageNum + 1
  188 + self!.getMyAlbum(page: self!.pageNum)
  189 + })
  190 + }
  191 +
  192 + @objc private func handleDismissPan(gesture: UIPanGestureRecognizer) {
  193 + if !draggingDownToDismiss {
  194 + return
  195 + }
  196 +
  197 + let startingPoint: CGPoint
  198 +
  199 + if let p = interactiveStartingPoint {
  200 + startingPoint = p
  201 + } else {
  202 + startingPoint = gesture.location(in: nil)
  203 + interactiveStartingPoint = startingPoint
  204 + }
  205 +
  206 + let currentLocation = gesture.location(in: nil)
  207 +
  208 + var progress = (currentLocation.y - startingPoint.y) / 100
  209 +
  210 + //prevent viewController bigger when scrolling up
  211 + if currentLocation.y <= startingPoint.y {
  212 + progress = 0
  213 + }
  214 +
  215 + if progress >= 1.0 {
  216 + dismiss(animated: true, completion: nil)
  217 + let nav = self.navigationController as! CNHomePageBaseNavigationController
  218 + nav.dismissClosure?()
  219 +// dismissClosure?()
  220 + stopDismissPanGesture(gesture)
  221 + return
  222 + }
  223 +
  224 + let targetShrinkScale: CGFloat = 0.86
  225 + let currentScale: CGFloat = 1 - (1 - targetShrinkScale) * progress
  226 +
  227 + switch gesture.state {
  228 + case .began,.changed:
  229 + gesture.view?.transform = CGAffineTransform(scaleX: currentScale, y: currentScale)
  230 + gesture.view?.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius * (progress)
  231 + case .cancelled,.ended:
  232 + stopDismissPanGesture(gesture)
  233 + default:
  234 + break
  235 + }
  236 + }
  237 +
  238 + //当下拉Offset超过100或取消下拉手势时,执行此方法
  239 + private func stopDismissPanGesture(_ gesture: UIPanGestureRecognizer) {
  240 + draggingDownToDismiss = false
  241 + interactiveStartingPoint = nil
  242 + UIView.animate(withDuration: 0.2) {
  243 + gesture.view?.transform = CGAffineTransform.identity
  244 + }
  245 + }
  246 +
  247 +}
  248 +
  249 +extension CNHomepageDuanJuDetailViewController: UIViewControllerTransitioningDelegate {
  250 +
  251 + func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
  252 + return CNHomePageAnimationTransition(animationType: .present)
  253 + }
  254 +
  255 + func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
  256 + return CNHomePageAnimationTransition(animationType: .dismiss)
  257 + }
  258 +
  259 + func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
  260 + return CNUpSlideCardPresentationController(presentedViewController: presented, presenting: presenting)
  261 + }
  262 +}
  263 +
  264 +extension CNHomepageDuanJuDetailViewController: UIScrollViewDelegate {
  265 + func scrollViewDidScroll(_ scrollView: UIScrollView) {
  266 +
  267 + if scrollView.contentOffset.y < 0 {
  268 + scrollView.contentOffset = .zero
  269 + draggingDownToDismiss = true
  270 + }
  271 + }
  272 +}
  273 +
  274 +extension CNHomepageDuanJuDetailViewController: UIGestureRecognizerDelegate {
  275 + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  276 + return true
  277 + }
  278 +}
  279 +
  280 +extension CNHomepageDuanJuDetailViewController {
  281 +
  282 + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
  283 + if network_type == .failed || network_type == .unkonw {
  284 + return UIImage(named: "mine_list_source_unusual_failed")
  285 + }
  286 + if dataArray.count == 0 {
  287 + return UIImage(named: "mine_list_source_unusual_empty")
  288 + }
  289 + if network_type == .noNetwork {
  290 + return UIImage(named: "mine_list_source_unusual_noNet")
  291 + }
  292 + return UIImage(named: "mine_list_source_unusual_empty")
  293 + }
  294 +
  295 + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? {
  296 + var defult_string = ""
  297 + if network_type == .failed || network_type == .unkonw {
  298 + defult_string = "接口请求错误,刷新试试~"
  299 + }
  300 + if network_type == .noNetwork {
  301 + defult_string = "网络开小差了,刷新试试~"
  302 + }
  303 + if dataArray.count == 0 {
  304 + defult_string = "暂时没有数据~"
  305 + }
  306 + return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!])
  307 + }
  308 +
  309 + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? {
  310 + if network_type == .failed || network_type == .noNetwork {
  311 + let attributes = [NSAttributedString.Key.font:Font_16_Fit,
  312 + NSAttributedString.Key.foregroundColor: HexColor("#609BFF")]
  313 + return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any])
  314 + }
  315 + return nil
  316 + }
  317 +
  318 + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) {
  319 + if network_type == .failed || network_type == .noNetwork {
  320 + getMyAlbum(page: 1)
  321 + }
  322 + }
  323 +}
... ...
metaCode/Classes/Main/HomePages/Controller/PlayletHomePage/CNLivePlayletHomePageController.swift
... ... @@ -9,15 +9,15 @@ import Foundation
9 9  
10 10 class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{
11 11  
  12 + var jianjieLblHeight:CGFloat = 36
  13 +
12 14 let kCNLivePlayletCellIdentifier = "kCNLivePlayletCellIdentifier"
13 15 let kCNLivePlayletHeaderCellIdentifier = "kCNLivePlayletHeaderCellIdentifier"
14   -
15   - // MARK: - 懒加载
16 16 ///数据源
17   - lazy var dataArray: NSMutableArray = {
18   - var dataArray = NSMutableArray()
19   - return dataArray
20   - }()
  17 + var albumModelArr:Array<CNLiveAlbumListModel> = [CNLiveAlbumListModel]()
  18 + var albumId = ""
  19 + // MARK: - 懒加载
  20 +
21 21 lazy var tableView : UITableView = {
22 22 let tableView = UITableView(frame: .zero, style: .plain)
23 23 tableView.dataSource = self
... ... @@ -29,6 +29,20 @@ class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataS
29 29 return tableView
30 30 }()
31 31  
  32 + init(aid:String){
  33 + super.init(nibName: nil, bundle: nil)
  34 + self.albumId = aid
  35 + self.getAlbumList(aid: aid)// self.albumModel!.contentId 或 self.albumMsgModel!.albumId
  36 + }
  37 + init(albumModelArr:Array<CNLiveAlbumListModel>) {
  38 + self.albumModelArr = Array(albumModelArr)
  39 + super.init(nibName: nil, bundle: nil)
  40 + self.tableView.reloadData()
  41 + }
  42 +
  43 + required init?(coder: NSCoder) {
  44 + fatalError("init(coder:) has not been implemented")
  45 + }
32 46 override func viewDidLoad() {
33 47 super.viewDidLoad()
34 48 self.setUI()
... ... @@ -38,6 +52,39 @@ class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataS
38 52 self.view.addSubview(self.tableView)
39 53 self.tableView.frame = CGRect(x: 0, y: KNavigationHeight, width: KSreenWidth, height: KSreenHeight-KNavigationHeight)
40 54 }
  55 +
  56 + // MARK: - 获取短剧主页数据
  57 + //获取专辑视频列表详情(播放地址 ,点赞数等信息)
  58 + func getAlbumList(aid:String){
  59 + showLoading(message: "")
  60 + CNLiveHomePageViewModel.getAlbumList(aid: aid){ result, status in
  61 + hiddenLoading()
  62 + if status == .success{
  63 + let arr = result as! Array<CNLiveAlbumListModel>
  64 + self.albumModelArr = Array(arr)
  65 + self.getAlbumMsg(aid: aid)
  66 + }else{
  67 +
  68 + }
  69 + }
  70 + }
  71 + //获取专辑详情(简介等)
  72 + func getAlbumMsg(aid:String){
  73 + CNLiveHomePageViewModel.getAlbumMsg(aid: aid) { result, status in
  74 + hiddenLoading()
  75 + if status == .success{
  76 + let model = result as! CNLiveAlbumMsgModel
  77 + for listModel in self.albumModelArr {
  78 + listModel.albumMsgModel = model
  79 + }
  80 + self.tableView.reloadData()
  81 + }else{
  82 +
  83 + }
  84 + }
  85 + }
  86 +
  87 +
41 88 func numberOfSections(in tableView: UITableView) -> Int {
42 89 2
43 90 }
... ... @@ -45,19 +92,28 @@ class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataS
45 92 if section == 0{
46 93 return 1
47 94 }
48   - return 30 //self.dataArray.count
  95 + return self.albumModelArr.count
49 96 }
50 97  
51 98 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
52 99  
53   -// let goodsModel = self.dataArray[indexPath.row] as! CNLiveShopGoodsListModel
54 100 if indexPath.section == 0{
55 101 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLivePlayletHeaderCellIdentifier) as? CNLivePlayletHomePageHeaderCell
56 102 else {
57 103 let cell = CNLivePlayletHomePageHeaderCell()
58 104 return cell
59 105 }
60   -
  106 + cell.homePageHeaderCellChangedBlock = { headerCell,jianjieHeight in
  107 + self.jianjieLblHeight = jianjieHeight
  108 + self.tableView.reloadData()
  109 + }
  110 + cell.homePageNeedReloadActionBlock = {
  111 + self.getAlbumList(aid: self.albumId)
  112 + }
  113 + if self.albumModelArr.count > 0{
  114 + let albumListModel = self.albumModelArr[0]
  115 + cell.albumListModel = albumListModel
  116 + }
61 117 return cell
62 118 }else{
63 119 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLivePlayletCellIdentifier) as? CNLivePlayletHomePageCell
... ... @@ -65,15 +121,24 @@ class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataS
65 121 let cell = CNLivePlayletHomePageCell()
66 122 return cell
67 123 }
68   - cell.iconImgView.backgroundColor = .red
  124 + let albumListModel = self.albumModelArr[indexPath.row]
  125 + cell.albumListModel = albumListModel
69 126 return cell
70 127 }
71 128 }
72 129 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
73 130 if indexPath.section == 0{
74   - return 300
  131 + return 15+147+20+self.jianjieLblHeight+25+39+23.5+15.5
  132 + }else{
  133 + return 75+12*2
  134 + }
  135 + }
  136 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  137 + if indexPath.section == 0{
75 138 }else{
76   - return 100
  139 + let albumListModel = self.albumModelArr[indexPath.row]
  140 + let aid = albumListModel.albumMsgModel?.albumId ?? ""
  141 + navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
77 142 }
78 143 }
79 144 }
... ...
metaCode/Classes/Main/HomePages/Model/CNLiveAlbumModel.swift
... ... @@ -26,13 +26,13 @@ class CNLiveAlbumProductModel:BaseModel{
26 26 var productId = ""
27 27 var productTitle = ""
28 28 var productImg = ""
29   - var albumProductType = ""
30   - var productType = ""
  29 + var albumProductType = ""//专辑类型
  30 + var productType = ""//类型 0免费 1积分 2付费 3 4试听
31 31 var androidRmb = ""
32 32 var androidOriginalRmb = ""
33 33 var iosOriginalRmb = ""
34 34 var iosRmb = ""
35   - var point = ""
  35 + var point = ""//积分
36 36 var promCode = ""
37 37 var orderingGuide = ""
38 38 var activityDesc = ""
... ... @@ -40,7 +40,7 @@ class CNLiveAlbumProductModel:BaseModel{
40 40 var validPeriod = ""
41 41 var expiryDate = ""
42 42 var effectiveDate = ""
43   - var check = false
  43 + var check = false////false需要付费 true免费或者付过费
44 44 }
45 45  
46 46  
... ...
metaCode/Classes/Main/HomePages/Model/CNLiveAlbumMsgModel.swift
... ... @@ -10,7 +10,7 @@ import Foundation
10 10 class CNLiveAlbumMsgModel:BaseModel{
11 11 var albumId = ""
12 12 var albumImg = ""
13   - var albumName = ""
  13 + var albumName = ""//专辑名称
14 14 var product:CNLiveAlbumProductModel?
15 15 var desc = ""
16 16 var descImg = ""
... ...
metaCode/Classes/Main/HomePages/View/HomePage/CNLiveHomePageDuanJuCell.swift
... ... @@ -6,64 +6,83 @@
6 6 // 首页-在追短剧cell
7 7  
8 8 import Foundation
9   -//enum GlobalConstants {
10   -// static let leftMargin: CGFloat = 20
11   -//
12   -// static let toDayCardRowH: CGFloat = 440
13   -// static let toDayCardCornerRadius: CGFloat = 12.0
14   -// static let todayCardSize: CGSize = CGSize(width: KSreenWidth - 2 * 15, height: DownSlideSingleCourseImgH)
15   -// static let cardDetailTopImageH: CGFloat = 500
16   -//
17   -// static let iconBorderColor: CGColor = UIColor(red: 239/255.0, green: 240/255.0, blue: 241/255.0, alpha: 1).cgColor
18   -// static let iconBorderWidth: CGFloat = 0.8
19   -// static let iconCornerRadius: CGFloat = 17.5
20   -//
21   -// static let textBlueColor = UIColor(red: 0/255.0, green: 122/255.0, blue: 255/255.0, alpha: 1.0) //007AFF
22   -// static let speratorLineColor = UIColor(red: 224/255.0, green: 224/255.0, blue: 224/255.0, alpha: 1)
23   -//
24   -//}
25   -//
26   -/////全部课程 标题高度
27   -//let DownSlideAllCourseTitleH: CGFloat = 55
28   -////全部课程 每row_topY间距
29   -//let DownSlideAllCourseRowTopYGap: CGFloat = 10
30   -////全部课程 每row_topY间距
31   -//let DownSlideAllCourseRowBottomYGap: CGFloat = 20
32   -////全部课程 每row_img宽高
33   -//let DownSlideAllCourseRowImageWH: CGFloat = 45
34   -//
35   -/////全部课程 每row高度
36   -//let DownSlideAllCourseRowH: CGFloat = DownSlideAllCourseRowTopYGap+DownSlideAllCourseRowBottomYGap + DownSlideAllCourseRowImageWH
37   -/////全部课程 宽度
38   -//let DownSlideAllCourseW: CGFloat = KSreenWidth - DownSlideRecommendLeftGap*2
39   -//
40   -/////单节课程 大图高度
41   -//let DownSlideSingleCourseImgH: CGFloat = 345
42   -/////单节课程 更多课程高度
43   -//let DownSlideSingleCourseMoreH: CGFloat = 60
44   -/////单节课程 宽度
45   -//let DownSlideSingleCourseW: CGFloat = KSreenWidth - DownSlideRecommendLeftGap*2
  9 +import QMUIKit
  10 +
  11 +typealias DuanJUCellSelectedCallBackBlock = (_ cell: CNLiveHomePageDuanJuCell) -> Void
  12 +
  13 +class CNLiveHomePageDuanJuCell:UITableViewCell,UITableViewDelegate,UITableViewDataSource{
  14 + let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier"
  15 +// let bgBackView = UIView()
46 16  
47   -class CNLiveHomePageDuanJuCell:UITableViewCell{
  17 + var DuanJUCellSelectedCallBack:DuanJUCellSelectedCallBackBlock?
  18 + lazy var modelArr: NSMutableArray = {
  19 + var dataArray = NSMutableArray()
  20 + return dataArray
  21 + }()
  22 + func setModelArr(modelArr:NSMutableArray){
  23 + self.modelArr = NSMutableArray(array: modelArr)
48 24  
49   - let bgBackView = UIView()
50   - let bgImageView = UIImageView()
  25 + self.tableView.height = CGFloat(self.modelArr.count)*(45+15*2)
  26 + self.totalView.height = CGFloat(self.modelArr.count)*(45+15*2) + 55
  27 + self.tableView.reloadData()
  28 +
  29 +// //定义view的阴影颜色
  30 +// self.totalView.layer.shadowColor = UIColor.black.cgColor
  31 +// //阴影偏移量
  32 +// self.totalView.layer.shadowOffset=CGSize(width:1, height:1)
  33 +// //定义view的阴影宽度,模糊计算的半径
  34 +// self.totalView.layer.shadowRadius = 12
  35 +// //定义view的阴影透明度,注意:如果view没有设置背景色阴影也是不会显示的
  36 +// self.totalView.layer.shadowOpacity = 0.4
51 37  
52   - //slideModel
53   - var _slideModel : CNLiveDownSlideModel?
54   - var slideModel : CNLiveDownSlideModel? {
55   - get{
56   - _slideModel
57   - }
58   - set{
59   - _slideModel = newValue!
60   - self.setupNewUI(model: _slideModel!)
61   - }
62 38 }
  39 + //MARK: - 懒加载
  40 + ///区块标题
  41 + lazy var blockTitleLabl: UILabel = {
  42 + let titleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: DownSlideRecommendLeftGap+5, width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 30))
  43 + titleLbl.text = "在追短剧"
  44 + titleLbl.font = BoldFont_21
  45 + titleLbl.textColor = HexColor("#333333")
  46 + return titleLbl
  47 + }()
  48 + lazy var totalView : UIView = {
  49 + let totalView = UIView(frame: CGRect(x: 15, y: 15, width: KSreenWidth-30, height: 100))
  50 + return totalView
  51 + }()
  52 +
  53 + lazy var tableView : UITableView = {
  54 + let tableView = UITableView(frame: CGRect(x: 0, y: self.blockTitleLabl.bottom+5, width: KSreenWidth-30, height: 50), style: .plain)
  55 + tableView.dataSource = self
  56 + tableView.delegate = self
  57 + tableView.separatorStyle = .none
  58 + tableView.tableFooterView = UIView.init()
  59 + tableView.backgroundColor = .clear
  60 + tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier)
  61 + return tableView
  62 + }()
63 63  
64 64 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
65 65 super.init(style: style, reuseIdentifier: reuseIdentifier)
66 66 self.selectionStyle = .none
  67 +
  68 + self.contentView.addSubview(self.totalView)
  69 +
  70 + self.totalView.addSubview(self.blockTitleLabl)
  71 + self.totalView.addSubview(self.tableView)
  72 + self.tableView.backgroundColor = .white
  73 + self.totalView.layer.cornerRadius = 12
  74 + self.totalView.clipsToBounds = true
  75 + self.totalView.backgroundColor = .white
  76 +
  77 + //定义view的阴影颜色
  78 + self.totalView.layer.shadowColor = UIColor.black.cgColor
  79 + //阴影偏移量
  80 + self.totalView.layer.shadowOffset=CGSize(width:1, height:1)
  81 + //定义view的阴影宽度,模糊计算的半径
  82 + self.totalView.layer.shadowRadius = 12
  83 + //定义view的阴影透明度,注意:如果view没有设置背景色阴影也是不会显示的
  84 + self.totalView.layer.shadowOpacity = 0.4
  85 +
67 86 setupUI()
68 87 }
69 88  
... ... @@ -72,123 +91,33 @@ class CNLiveHomePageDuanJuCell:UITableViewCell{
72 91 }
73 92  
74 93 private func setupUI() {
75   - contentView.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
  94 + contentView.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
76 95 }
77 96  
78   - func setupNewUI(model:CNLiveDownSlideModel){
79   - if model.type == SlideModelTypeAllCourse12 {
80   - //全部课程列表
81   - contentView.addSubview(bgBackView)
82   -
83   - bgBackView.frame = CGRect(x: DownSlideRecommendLeftGap, y: 0,width:DownSlideSingleCourseW , height:model.cellH-DownSlideRecommendLeftGap)
84   - bgBackView.layer.shadowColor = HexColor("#000000")?.cgColor
85   - bgBackView.layer.shadowRadius = 12
86   - bgBackView.layer.shadowOpacity = 1
87   - bgBackView.layer.shadowOffset = CGSize(width: 0, height: 0)
88   - bgBackView.layer.cornerRadius = 12
89   - bgBackView.clipsToBounds = true
90   - bgBackView.backgroundColor = HexColor("#FFFFFF")
91   -
92   - let titleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: DownSlideRecommendLeftGap, width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 30))
93   - titleLbl.text = model.blockName ?? "全部课程"
94   - titleLbl.font = BoldFont_21
95   - titleLbl.textColor = HexColor("#333333")
96   - bgBackView.addSubview(titleLbl)
97   -
98   - //总块数
99   - let contentsNum = model.contents.count
100   - //model行数
101   - let row = model.rowNum
102   - //总显示块数
103   - var totalNum = (contentsNum >= row) ? row : contentsNum
104   - if row == 0{//row为0 , contents全部显示
105   - totalNum = contentsNum
106   - }
107   - for i in 0..<totalNum{//i是第几行
108   - let contentMdl = model.contents[i]
109   -
110   - //小icon
111   - let imageView = UIImageView(frame: CGRectMake(DownSlideRecommendLeftGap, titleLbl.bottom+DownSlideRecommendLeftGap+CGFloat(i)*(DownSlideAllCourseRowTopYGap+DownSlideAllCourseRowImageWH+DownSlideAllCourseRowBottomYGap), CGFloat(DownSlideAllCourseRowImageWH), CGFloat(DownSlideAllCourseRowImageWH)))
112   - imageView.kf.setImage(with: URL(string:contentMdl.poster!))
113   - bgBackView.addSubview(imageView)
114   -
115   - let titleLbl = UILabel(frame: CGRect(x: imageView.right+DownSlideRecommendLeftGap, y: imageView.top, width: DownSlideSingleCourseW-90-imageView.right, height: 21))
116   - titleLbl.text = contentMdl.title ?? "婴儿课程"
117   - titleLbl.font = Font_15
118   - titleLbl.textColor = HexColor("#333333")
119   - bgBackView.addSubview(titleLbl)
120   -
121   - let subTitleLbl = UILabel(frame: CGRect(x: titleLbl.left, y:titleLbl.bottom+3 , width: titleLbl.width, height: 17))
122   - subTitleLbl.text = contentMdl.subTitle ?? "适应3-6岁"
123   - subTitleLbl.font = Font_12
124   - subTitleLbl.textColor = HexColor("#999999")
125   - bgBackView.addSubview(subTitleLbl)
126   -
127   - let enterBtn = UIButton(type: .custom)
128   - enterBtn.frame = CGRect(x: bgBackView.right-25-65, y: 0, width: 65, height: 30)
129   - enterBtn.centerY = imageView.centerY
130   - enterBtn.setBackgroundImage(UIImage(named: "homepage_down_enter"), for: .normal)
131   - enterBtn.setTitle("进入", for: .normal)
132   - enterBtn.titleLabel?.font = BoldFont_13
133   - enterBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
134   - enterBtn.addTarget(self, action: #selector(enterBtnAction(_:)), for: .touchUpInside)
135   - enterBtn.tag = i
136   - bgBackView.addSubview(enterBtn)
137   - }
138   - }else if model.type == SlideModelTypeOneCourse75 {
139   - //单图课程
140   - contentView.addSubview(bgBackView)
141   - bgBackView.addSubview(bgImageView)
142   -
143   - bgBackView.frame = CGRect(x: DownSlideRecommendLeftGap, y: 0,width:DownSlideSingleCourseW , height:DownSlideSingleCourseMoreH+DownSlideSingleCourseImgH)
144   - bgBackView.layer.shadowColor = UIColor.black.cgColor
145   - bgBackView.layer.shadowOpacity = 0.4
146   - bgBackView.layer.shadowOffset = CGSize(width: 0, height: 1)
147   -
148   - bgImageView.frame = CGRect(x: 0, y: 0,width:DownSlideSingleCourseW , height:DownSlideSingleCourseImgH)
149   - bgImageView.contentMode = .scaleAspectFill
150   - bgImageView.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius
151   - bgImageView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
152   - bgImageView.layer.masksToBounds = true
153   - bgImageView.kf.setImage(with: URL(string: model.contents[0].poster ?? ""))
154   -
155   - let titleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: DownSlideRecommendLeftGap, width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 30))
156   - titleLbl.text = model.contents[0].title ?? "婴儿课程"
157   - titleLbl.font = BoldFont_21
158   - titleLbl.textColor = HexColor("#FFFFFF")
159   - bgImageView.addSubview(titleLbl)
160   -
161   - let subTitleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y:titleLbl.bottom , width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 30))
162   - subTitleLbl.text = model.contents[0].subTitle ?? "适应3-6岁"
163   - subTitleLbl.font = Font_12
164   - subTitleLbl.textColor = HexColor("#FFFFFF")
165   - bgImageView.addSubview(subTitleLbl)
166   -
167   - //单节底部视图
168   - let singleCourseBottomView = UIView(frame: CGRect(x: 0, y: DownSlideSingleCourseImgH, width: DownSlideSingleCourseW, height: DownSlideSingleCourseMoreH))
169   - singleCourseBottomView.layer.cornerRadius = 12
170   - singleCourseBottomView.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]
171   - singleCourseBottomView.backgroundColor = .white
172   - singleCourseBottomView.isUserInteractionEnabled = true
173   - bgBackView.addSubview(singleCourseBottomView)
174   -
175   - let moreLabel = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: 15, width: DownSlideSingleCourseW - 50 - DownSlideRecommendLeftGap , height: 30))
176   - moreLabel.text = model.blockName ?? "更多"
177   - moreLabel.font = Font_15
178   - moreLabel.textColor = HexColor("#333333")
179   - singleCourseBottomView.addSubview(moreLabel)
180   -
181   - let moreImgView = UIImageView(image: UIImage(named: "homepage_down_more"))
182   - moreImgView.left = moreLabel.right
183   - moreImgView.centerY = moreLabel.centerY
184   - singleCourseBottomView.addSubview(moreImgView)
185   - }
  97 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  98 + self.modelArr.count
186 99 }
187 100  
  101 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  102 + let model = self.modelArr[indexPath.row] as! CNLiveAlbumMsgModel
  103 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumCellIdentifier) as? CNLiveAlbumCell
  104 + else {
  105 + let cell = CNLiveAlbumCell()
  106 + return cell
  107 + }
  108 + cell.albumMsgModel = model
  109 +
  110 + return cell
  111 + }
  112 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  113 + self.DuanJUCellSelectedCallBack!(self)
  114 + }
  115 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  116 + return 45+15*2
  117 + }
188 118 //MARK: - 事件
189   - @objc func enterBtnAction(_ sender: UIButton){
190   - let tag = sender.tag
191   - let contentMdl = self.slideModel?.contents[tag]
192   - CNLiveDownSlideTool.pushWebVCWithContentsMdl(contentMdl: contentMdl!)
  119 + @objc func playBtnAction(){
  120 + showLoading(message: "")
  121 +// self.getAlbumList()
193 122 }
194 123 }
... ...
metaCode/Classes/Main/HomePages/View/HomepageDetail/CNLiveAlbumCell.swift
... ... @@ -10,6 +10,19 @@ import QMUIKit
10 10 class CNLiveAlbumCell:UITableViewCell{
11 11  
12 12 var albumModelArr:Array<CNLiveAlbumListModel>?
  13 +
  14 + var _albumMsgModel : CNLiveAlbumMsgModel?
  15 + var albumMsgModel : CNLiveAlbumMsgModel? {
  16 + get{
  17 + _albumMsgModel
  18 + }
  19 + set{
  20 + _albumMsgModel = newValue!
  21 +
  22 + self.setupNewUIMsgModel(model: _albumMsgModel!)
  23 + }
  24 + }
  25 +
13 26 //AlbumModel
14 27 var _albumModel : CNLiveAlbumModel?
15 28 var albumModel : CNLiveAlbumModel? {
... ... @@ -35,7 +48,7 @@ class CNLiveAlbumCell:UITableViewCell{
35 48 titleLabel.textColor = HexColor("#333333")
36 49 titleLabel.textAlignment = .left
37 50 titleLabel.font = Font_15
38   - titleLabel.text = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"
  51 + titleLabel.text = "标题"
39 52 return titleLabel
40 53 }()
41 54 ///副标题
... ... @@ -76,39 +89,76 @@ class CNLiveAlbumCell:UITableViewCell{
76 89 self.titleLabl.text = model.title
77 90 self.subTitleLabel.text = model.subTitle
78 91 self.iconImgView.kf.setImage(with: URL(string: model.poster))
  92 + self.titleLabl.width = KSreenWidth-(self.iconImgView.right+15)-80
  93 + self.playBtn.left = KSreenWidth-80
79 94 }
80   - @objc func playBtnAction(){
81   - showLoading(message: "")
82   - self.getAlbumList()
83   - }
84   -
85   - //获取专辑详情(简介等)
86   - func getAlbumMsg(){
87   - CNLiveHomePageViewModel.getAlbumMsg(aid: self.albumModel!.contentId) { result, status in
88   - hiddenLoading()
89   - if status == .success{
90   - let model = result as! CNLiveAlbumMsgModel
91   - for listModel in self.albumModelArr! {
92   - listModel.albumMsgModel = model
93   - }
94   - print("")
95   - }else{
96   -
97   - }
98   - }
  95 + func setupNewUIMsgModel(model:CNLiveAlbumMsgModel){
  96 + self.titleLabl.text = model.albumName
  97 + self.subTitleLabel.text = model.subTitle
  98 + self.iconImgView.kf.setImage(with: URL(string: model.albumImg))
  99 + self.titleLabl.width = KSreenWidth-(self.iconImgView.right+15)-80-30
  100 + self.playBtn.left = KSreenWidth-80-30
99 101 }
100   - //获取专辑视频列表详情(播放地址 ,点赞数等信息)
101   - func getAlbumList(){
  102 + @objc func playBtnAction(){
102 103 showLoading(message: "")
103   - CNLiveHomePageViewModel.getAlbumList(aid: self.albumModel!.contentId){ result, status in
104   - hiddenLoading()
105   - if status == .success{
106   - let arr = result as! Array<CNLiveAlbumListModel>
107   - self.albumModelArr = Array(arr)
108   - self.getAlbumMsg()
109   - }else{
110   -
111   - }
  104 + var aid = ""
  105 + if self.albumModel != nil{
  106 + aid = self.albumModel!.contentId
  107 + }else if self.albumMsgModel != nil{
  108 + aid = self.albumMsgModel!.albumId
  109 + }else{
  110 + aid = ""
112 111 }
  112 +
  113 + navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
  114 +
  115 +// self.getAlbumList()
113 116 }
  117 +
  118 +// //获取专辑详情(简介等)
  119 +// func getAlbumMsg(){
  120 +// var aid = ""
  121 +// if self.albumModel != nil{
  122 +// aid = self.albumModel!.contentId
  123 +// }else if self.albumMsgModel != nil{
  124 +// aid = self.albumMsgModel!.albumId
  125 +// }else{
  126 +// aid = ""
  127 +// }
  128 +// CNLiveHomePageViewModel.getAlbumMsg(aid: aid) { result, status in
  129 +// hiddenLoading()
  130 +// if status == .success{
  131 +// let model = result as! CNLiveAlbumMsgModel
  132 +// for listModel in self.albumModelArr! {
  133 +// listModel.albumMsgModel = model
  134 +// }
  135 +// navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
  136 +// }else{
  137 +//
  138 +// }
  139 +// }
  140 +// }
  141 +// //获取专辑视频列表详情(播放地址 ,点赞数等信息)
  142 +// func getAlbumList(){
  143 +// showLoading(message: "")
  144 +// var aid = ""
  145 +// if self.albumModel != nil{
  146 +// aid = self.albumModel!.contentId
  147 +// }else if self.albumMsgModel != nil{
  148 +// aid = self.albumMsgModel!.albumId
  149 +// }else{
  150 +// aid = ""
  151 +// }
  152 +//
  153 +// CNLiveHomePageViewModel.getAlbumList(aid: aid){ result, status in
  154 +// hiddenLoading()
  155 +// if status == .success{
  156 +// let arr = result as! Array<CNLiveAlbumListModel>
  157 +// self.albumModelArr = Array(arr)
  158 +// self.getAlbumMsg()
  159 +// }else{
  160 +//
  161 +// }
  162 +// }
  163 +// }
114 164 }
... ...
metaCode/Classes/Main/HomePages/View/HomepageDetail/CNLiveDuanjuTitleCell.swift 0 → 100644
  1 +//
  2 +// CNLiveDuanjuTitleCell.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/1/10.
  6 +// 在追短剧详情页-title cell
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveDuanjuTitleCell:UITableViewCell{
  11 +
  12 + //MARK: - 懒加载
  13 + ///区块标题
  14 + lazy var blockTitleLabl: UILabel = {
  15 + let titleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: 10, width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 30))
  16 + titleLbl.text = "在追短剧"
  17 + titleLbl.font = BoldFont_21
  18 + titleLbl.textColor = HexColor("#333333")
  19 + return titleLbl
  20 + }()
  21 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  22 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  23 + self.selectionStyle = .none
  24 +
  25 + setupUI()
  26 + }
  27 +
  28 + required init?(coder aDecoder: NSCoder) {
  29 + fatalError("init(coder:) has not been implemented")
  30 + }
  31 +
  32 + private func setupUI() {
  33 + contentView.backgroundColor = .white
  34 + self.contentView.addSubview(self.blockTitleLabl)
  35 + }
  36 +
  37 +
  38 +}
... ...
metaCode/Classes/Main/HomePages/View/PlayletHomePage/CNLivePlayletHomePageCell.swift
... ... @@ -7,56 +7,109 @@
7 7  
8 8 import Foundation
9 9 import QMUIKit
  10 +import Kingfisher
10 11 class CNLivePlayletHomePageCell:UITableViewCell{
  12 +
  13 + var _albumListModel : CNLiveAlbumListModel?
  14 + var albumListModel : CNLiveAlbumListModel? {
  15 + get{
  16 + _albumListModel
  17 + }
  18 + set{
  19 + _albumListModel = newValue!
  20 +
  21 + self.setupNewUI(model: _albumListModel!)
  22 + }
  23 + }
11 24 //MARK: - 懒加载
12 25 lazy var iconImgView :UIImageView = {
13   - let iconImgView = UIImageView(frame: CGRect(x: 20, y: 10, width: 60, height: 90))
  26 + let iconImgView = UIImageView(frame: CGRect(x: 15, y: 12, width: 57, height: 75))
  27 + iconImgView.layer.cornerRadius = 5
  28 + iconImgView.clipsToBounds = true
14 29 return iconImgView
15 30 }()
  31 + lazy var payIconImgView :UIImageView = {
  32 + let payIconImgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 14))
  33 + payIconImgView.image = UIImage(named: "homePage_payed")
  34 + return payIconImgView
  35 + }()
  36 +
16 37 ///标题
17 38 lazy var titleLabl: UILabel = {
18   - let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, 15, KSreenWidth-(self.iconImgView.right+15)-10, 21))
  39 + let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.iconImgView.top, KSreenWidth-(self.iconImgView.right+15)-10, 21))
19 40 titleLabel.textColor = HexColor("#333333")
20 41 titleLabel.textAlignment = .left
21   - titleLabel.font = Font_15
  42 + titleLabel.font = Font_13
22 43 titleLabel.numberOfLines = 2
23   - titleLabel.text = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"
  44 + titleLabel.text = "视频标题"
24 45 let height = titleLabel.qmui_lineHeight
25 46 titleLabel.height = height*2
26 47 return titleLabel
27 48 }()
28 49 ///时长
29 50 lazy var timeLabel: UILabel = {
30   - let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.titleLabl.bottom+10, 40, 21))
  51 + let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.iconImgView.bottom-21, 150, 21))
31 52 titleLabel.textColor = HexColor("#333333")
32 53 titleLabel.textAlignment = .left
33   - titleLabel.font = Font_15
  54 + titleLabel.font = Font_12
34 55 titleLabel.text = "04:31"
35 56 let height = titleLabel.qmui_lineHeight
36 57 titleLabel.height = height
37 58 return titleLabel
38 59 }()
39   - lazy var likeBtn: UIButton = {
40   - let likeBtn = UIButton.init(type: .custom)
41   - likeBtn.frame = CGRect(x: self.timeLabel.right+20, y: self.timeLabel.top, width: 60, height: 20)
42   - likeBtn.setTitle("24.0w", for: .normal)
43   - likeBtn.setTitleColor(HexColor("#333333"), for: .normal)
44   - likeBtn.setImage(UIImage(named: "DS_coupon_unSelect"), for: .normal)
45   - likeBtn.titleLabel?.font = Font_14
46   - likeBtn.setupButtonImageAndTitlePossitionWith(padding: 5, style: .left)
47   - return likeBtn
48   - }()
49   -
  60 +
50 61 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
51 62 super.init(style: style, reuseIdentifier: reuseIdentifier)
52 63 self.selectionStyle = .none
53 64 self.addSubview(self.iconImgView)
  65 + self.iconImgView.addSubview(self.payIconImgView)
54 66 self.addSubview(self.titleLabl)
55 67 self.addSubview(self.timeLabel)
56   - self.addSubview(self.likeBtn)
57 68 }
58 69  
59 70 required init?(coder: NSCoder) {
60 71 fatalError("init(coder:) has not been implemented")
61 72 }
  73 + func setupNewUI(model:CNLiveAlbumListModel){
  74 + self.titleLabl.text = model.title
  75 + self.timeLabel.text = model.duration
  76 + self.iconImgView.kf.setImage(with: URL(string: model.poster))
  77 + if model.product?.check == true{
  78 + //付过费 或 免费
  79 + self.payIconImgView.isHidden = true
  80 + //显示已购买 或者 不显示
  81 + if model.product?.productType == "0"{
  82 + //免费
  83 + self.payIconImgView.isHidden = true
  84 + }else if model.product?.productType == "1"{
  85 + //积分
  86 + self.payIconImgView.isHidden = false
  87 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  88 + }else if model.product?.productType == "2"{
  89 + //付费
  90 + self.payIconImgView.isHidden = false
  91 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  92 + }else{
  93 + self.payIconImgView.isHidden = false
  94 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  95 + }
  96 + }else{
  97 + //需要付费
  98 + if model.product?.productType == "0"{
  99 + //免费
  100 + self.payIconImgView.isHidden = true
  101 + }else if model.product?.productType == "1"{
  102 + //积分
  103 + self.payIconImgView.isHidden = false
  104 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  105 + }else if model.product?.productType == "2"{
  106 + //付费
  107 + self.payIconImgView.isHidden = false
  108 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  109 + }else{
  110 + self.payIconImgView.isHidden = false
  111 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  112 + }
  113 + }
  114 + }
62 115 }
... ...
metaCode/Classes/Main/HomePages/View/PlayletHomePage/CNLivePlayletHomePageHeaderCell.swift
... ... @@ -9,30 +9,66 @@ import Foundation
9 9 import QMUIKit
10 10 import SwiftUI
11 11 import SnapKit
  12 +import Kingfisher
  13 +
  14 +//cell高度变化
  15 +typealias homePageHeaderCellChangedBlockActionBlock = (_ cell: CNLivePlayletHomePageHeaderCell ,_ jianjieHeight:CGFloat) -> Void
  16 +//刷新短剧首页
  17 +typealias homePageNeedReloadBlockActionBlock = () -> Void
  18 +
  19 +
12 20 class CNLivePlayletHomePageHeaderCell:UITableViewCell{
  21 + var homePageHeaderCellChangedBlock:homePageHeaderCellChangedBlockActionBlock?
  22 + var homePageNeedReloadActionBlock:homePageNeedReloadBlockActionBlock?
  23 +
  24 +
  25 + let followBtnSubLayer = "followBtnSubLayer"
  26 + let payBtnSubLayer = "payBtnSubLayer"
  27 +
  28 + var _albumListModel : CNLiveAlbumListModel?
  29 + var albumListModel : CNLiveAlbumListModel? {
  30 + get{
  31 + _albumListModel
  32 + }
  33 + set{
  34 + _albumListModel = newValue!
  35 +
  36 + self.setupNewUI(model: _albumListModel!)
  37 + }
  38 + }
  39 +
13 40 //MARK: - 懒加载
14 41 lazy var iconImgView :UIImageView = {
15   - let iconImgView = UIImageView(frame: CGRect(x: 20, y: 20, width: 100, height: 100))
  42 + let iconImgView = UIImageView(frame: CGRect(x: 15, y: 20, width: 112, height: 147))
  43 + iconImgView.layer.cornerRadius = 5
  44 + iconImgView.clipsToBounds = true
16 45 return iconImgView
17 46 }()
  47 +
  48 + lazy var payIconImgView :UIImageView = {
  49 + let payIconImgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 14))
  50 + payIconImgView.image = UIImage(named: "homePage_payment")
  51 + return payIconImgView
  52 + }()
  53 +
18 54 ///标题
19 55 lazy var titleLabl: UILabel = {
20   - let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+10, self.iconImgView.top+20, KSreenWidth-(self.iconImgView.right+15)-10, 21))
  56 + let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.iconImgView.top, KSreenWidth-(self.iconImgView.right+15)-10, 21))
21 57 titleLabel.textColor = HexColor("#333333")
22 58 titleLabel.textAlignment = .left
23   - titleLabel.font = Font_20
24   - titleLabel.text = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"
  59 + titleLabel.font = BoldFont_15
  60 + titleLabel.text = "短剧标题"
25 61 let height = titleLabel.qmui_lineHeight
26 62 titleLabel.height = height
27 63 return titleLabel
28 64 }()
29 65 ///集数
30 66 lazy var jishuLabel: UILabel = {
31   - let titleLabel = UILabel.init(frame: CGRectMake(self.titleLabl.left, self.titleLabl.bottom+20, 40, 21))
32   - titleLabel.textColor = HexColor("#333333")
  67 + let titleLabel = UILabel.init(frame: CGRectMake(self.titleLabl.left, self.titleLabl.bottom+20, KSreenWidth-(self.iconImgView.right+15)-10, 21))
  68 + titleLabel.textColor = HexColor("#999999")
33 69 titleLabel.textAlignment = .left
34   - titleLabel.font = Font_15
35   - titleLabel.text = "45集"
  70 + titleLabel.font = Font_12
  71 + titleLabel.text = "1集"
36 72 let height = titleLabel.qmui_lineHeight
37 73 titleLabel.height = height
38 74 return titleLabel
... ... @@ -42,8 +78,9 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
42 78 let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.left, self.iconImgView.bottom+10, KSreenWidth-2*self.iconImgView.left, 21))
43 79 titleLabel.textColor = HexColor("#333333")
44 80 titleLabel.textAlignment = .left
45   - titleLabel.font = Font_14
46   - titleLabel.text = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"
  81 + titleLabel.font = Font_12
  82 + titleLabel.backgroundColor = UIColor(red:0.98, green:0.98, blue:0.98, alpha:1.00)
  83 + titleLabel.text = "简介"
47 84 titleLabel.numberOfLines = 0
48 85 var lines = titleLabel.getRealLabelTextLines()
49 86 let height = titleLabel.qmui_lineHeight
... ... @@ -62,10 +99,10 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
62 99 expandBtn.setTitle("展开", for: .normal)
63 100 expandBtn.setTitle("收起", for: .selected)
64 101  
65   - expandBtn.setTitleColor(HexColor("#333333"), for: .normal)
66   - expandBtn.setImage(UIImage(named: "DS_coupon_unSelect"), for: .normal)
67   - expandBtn.setImage(UIImage(named: "DS_coupon_unSelect"), for: .selected)
68   - expandBtn.titleLabel?.font = Font_16
  102 + expandBtn.setTitleColor(HexColor("#666666"), for: .normal)
  103 + expandBtn.setImage(UIImage(named: "homepage_unfold"), for: .normal)
  104 + expandBtn.setImage(UIImage(named: "homepage_fold"), for: .selected)
  105 + expandBtn.titleLabel?.font = Font_12
69 106 expandBtn.setupButtonImageAndTitlePossitionWith(padding: 5, style: .right)
70 107 expandBtn.addTarget(self, action: #selector(expandBtnAction), for: .touchUpInside)
71 108 return expandBtn
... ... @@ -74,31 +111,51 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
74 111 lazy var followBtn: UIButton = {
75 112 let followBtn = UIButton(type: .custom)
76 113 followBtn.setTitle("追剧", for: .normal)
77   - followBtn.setTitleColor(.black, for: .normal)
78   - followBtn.setTitleColor(.black, for: .selected)
79   - followBtn.setTitle("已追剧", for: .selected)
80   - followBtn.layer.borderColor = UIColor.black.cgColor
81   - followBtn.layer.borderWidth = 1
82   - followBtn.layer.cornerRadius = 3
  114 + followBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  115 + followBtn.titleLabel?.font = Font_15
  116 + followBtn.layer.cornerRadius = 20
83 117 followBtn.clipsToBounds = true
84 118 followBtn.addTarget(self, action: #selector(followBtnAction), for: .touchUpInside)
  119 +
  120 + let gradient = CAGradientLayer()
  121 + gradient.frame = self.bounds
  122 + gradient.colors = [HexColor("#FFD20B")!.cgColor, HexColor("#FFA81A")!.cgColor]
  123 + gradient.locations = [0, 1]
  124 + gradient.startPoint = CGPoint(x: 0.96, y: 0.42)
  125 + gradient.endPoint = CGPoint(x: 0.42, y: 0.42)
  126 + gradient.name = followBtnSubLayer
  127 + followBtn.layer.insertSublayer(gradient, at: 0)
85 128 return followBtn
86 129 }()
87 130 //付费解锁全集|已购买
88 131 lazy var paymentBtn: UIButton = {
89 132 let paymentBtn = UIButton(type: .custom)
90 133 paymentBtn.setTitle("付费解锁全集", for: .normal)
91   - paymentBtn.setTitleColor(.white, for: .normal)
92   - paymentBtn.setTitle("已购买", for: .selected)
93   - paymentBtn.setTitleColor(.black, for: .selected)
94   - paymentBtn.backgroundColor = .blue
95   - paymentBtn.layer.borderColor = UIColor.black.cgColor
96   - paymentBtn.layer.borderWidth = 1
97   - paymentBtn.layer.cornerRadius = 3
  134 + paymentBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  135 + paymentBtn.titleLabel?.font = Font_15
  136 + paymentBtn.layer.cornerRadius = 20
98 137 paymentBtn.clipsToBounds = true
99 138 paymentBtn.addTarget(self, action: #selector(paymentBtnAction), for: .touchUpInside)
  139 +
  140 + let gradient = CAGradientLayer()
  141 + gradient.frame = self.bounds
  142 + gradient.colors = [HexColor("#67C5FF")!.cgColor, HexColor("#609AFF")!.cgColor]
  143 + gradient.locations = [0, 1]
  144 + gradient.startPoint = CGPoint(x: 0, y: 0.5)
  145 + gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
  146 + gradient.name = payBtnSubLayer
  147 + paymentBtn.layer.insertSublayer(gradient, at: 0)
100 148 return paymentBtn
101 149 }()
  150 + ///全部剧集
  151 + lazy var allJuJiLabl: UILabel = {
  152 + let allJuJiLabl = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.followBtn.bottom+20, 100, 16))
  153 + allJuJiLabl.textColor = HexColor("#333333")
  154 + allJuJiLabl.textAlignment = .left
  155 + allJuJiLabl.font = BoldFont_16
  156 + allJuJiLabl.text = "全部剧集"
  157 + return allJuJiLabl
  158 + }()
102 159  
103 160 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
104 161 super.init(style: style, reuseIdentifier: reuseIdentifier)
... ... @@ -108,12 +165,14 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
108 165  
109 166 func setUI(){
110 167 self.contentView.addSubview(self.iconImgView)
  168 + self.iconImgView.addSubview(self.payIconImgView)
111 169 self.contentView.addSubview(self.titleLabl)
112 170 self.contentView.addSubview(self.jishuLabel)
113 171 self.contentView.addSubview(self.jianjieLabel)
114 172 self.contentView.addSubview(self.expandBtn)
115 173 self.contentView.addSubview(self.followBtn)
116 174 self.contentView.addSubview(self.paymentBtn)
  175 + self.contentView.addSubview(self.allJuJiLabl)
117 176  
118 177 let lines = jianjieLabel.getRealLabelTextLines()
119 178 if lines <= 2{
... ... @@ -123,25 +182,100 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
123 182 }
124 183  
125 184 self.followBtn.snp.makeConstraints { make in
126   - make.top.equalTo(self.jianjieLabel.snp.bottom).offset(40)
127   - make.left.equalTo(self.jianjieLabel.snp.left).offset(30)
128   - make.width.equalTo(120)
129   - make.height.equalTo(30)
  185 + make.top.equalTo(self.jianjieLabel.snp.bottom).offset(25)
  186 + make.left.equalTo(self.iconImgView.snp.left)
  187 + make.width.equalTo(140)
  188 + make.height.equalTo(40)
130 189 }
131 190 self.paymentBtn.snp.makeConstraints { make in
132 191 make.top.equalTo(self.followBtn)
133   - make.left.equalTo(self.followBtn.snp.left).offset(KSreenWidth/2)
134   - make.width.equalTo(120)
135   - make.height.equalTo(30)
  192 + make.left.equalTo(self.followBtn.snp.right).offset(15)
  193 + make.right.equalTo(self.contentView.snp.right).offset(-15)
  194 + make.height.equalTo(40)
  195 + }
  196 + self.allJuJiLabl.snp.makeConstraints { make in
  197 + make.top.equalTo(self.followBtn.snp.bottom).offset(20)
  198 + make.left.equalTo(self.iconImgView.snp.left)
  199 + make.width.equalTo(100)
  200 + make.height.equalTo(16)
136 201 }
137   -
138   - self.iconImgView.backgroundColor = .red
139 202 }
140 203  
141 204 required init?(coder: NSCoder) {
142 205 fatalError("init(coder:) has not been implemented")
143 206 }
144 207  
  208 + func setupNewUI(model:CNLiveAlbumListModel){
  209 +
  210 + self.titleLabl.text = model.albumMsgModel?.albumName ?? "专辑名称"
  211 + self.jishuLabel.text = String(format: "共%@集",model.albumMsgModel?.episodeNow ?? "1")
  212 + self.iconImgView.kf.setImage(with: URL(string: model.albumMsgModel?.albumImg ?? ""))
  213 + if model.product?.check == true{
  214 + //付过费 或 免费
  215 + self.paymentBtn.isUserInteractionEnabled = false
  216 + self.paymentChangeStatus(isPayed: true)
  217 + self.payIconImgView.isHidden = true
  218 + //显示已购买 或者 不显示
  219 + if model.albumMsgModel?.product?.albumProductType == "0"{
  220 + //免费
  221 + self.payIconImgView.isHidden = true
  222 + }else if model.product?.albumProductType == "1"{
  223 + //积分
  224 + self.payIconImgView.isHidden = false
  225 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  226 + }else if model.product?.albumProductType == "2"{
  227 + //付费
  228 + self.payIconImgView.isHidden = false
  229 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  230 + }else{
  231 + self.payIconImgView.isHidden = false
  232 + self.payIconImgView.image = UIImage(named: "homePage_payed")
  233 + }
  234 + }else{
  235 + //需要付费
  236 + self.paymentBtn.isUserInteractionEnabled = true
  237 + self.paymentChangeStatus(isPayed: false)
  238 + if model.product?.albumProductType == "0"{
  239 + //免费
  240 + self.payIconImgView.isHidden = true
  241 + }else if model.product?.albumProductType == "1"{
  242 + //积分
  243 + self.payIconImgView.isHidden = false
  244 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  245 + }else if model.product?.albumProductType == "2"{
  246 + //付费
  247 + self.payIconImgView.isHidden = false
  248 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  249 + }else{
  250 + self.payIconImgView.isHidden = false
  251 + self.payIconImgView.image = UIImage(named: "homePage_payment")
  252 + }
  253 + }
  254 +
  255 + self.jianjieLabel.text = (model.albumMsgModel?.desc != "") ? model.albumMsgModel?.desc : "短剧简介"
  256 + let lines = jianjieLabel.getRealLabelTextLines()
  257 + let height = jianjieLabel.qmui_lineHeight
  258 + if lines <= 2{
  259 + self.expandBtn.isHidden = true
  260 + }else{
  261 + self.expandBtn.isHidden = false
  262 + }
  263 +
  264 + if self.expandBtn.isSelected{
  265 + //展开状态
  266 + self.jianjieLabel.height = height*CGFloat(lines)
  267 +
  268 + }else{
  269 + //收起状态
  270 + self.jianjieLabel.height = 2*height
  271 + }
  272 + if model.albumMsgModel!.collection{
  273 + self.followChangeStatus(isFollowed: true)
  274 + }else{
  275 + self.followChangeStatus(isFollowed: false)
  276 + }
  277 + }
  278 +
145 279 // MARK: - Action
146 280 @objc func expandBtnAction(button:UIButton){
147 281 button.isSelected = !button.isSelected
... ... @@ -155,16 +289,127 @@ class CNLivePlayletHomePageHeaderCell:UITableViewCell{
155 289 //文本展开状态,点击收起
156 290 self.jianjieLabel.height = 2*height
157 291 }
  292 + self.homePageHeaderCellChangedBlock!(self, self.jianjieLabel.height)
158 293 self.expandBtn.top = self.jianjieLabel.bottom
159 294  
160 295 }
161 296 @objc func followBtnAction(button:UIButton){
162 297 button.isSelected = !button.isSelected
163   -
  298 + if button.isSelected{
  299 + //已追剧->取消追剧
  300 + if self.albumListModel?.albumMsgModel?.product?.check == true{
  301 + //已购买,不能取消追剧
  302 + }else{
  303 + self.postAlbumCollect(type: 2)
  304 + }
  305 + }else{
  306 + //未追剧->追剧
  307 + self.postAlbumCollect(type: 1)
  308 + }
164 309 }
165 310 @objc func paymentBtnAction(button:UIButton){
166 311 button.isSelected = !button.isSelected
  312 + if self.albumListModel?.product?.check == false{
  313 + //未购买->购买
  314 + CNLiveIntegralAlertTool.shared.showIntegralAlert(title: "\(self.albumListModel?.albumMsgModel?.albumName ?? "")共\(self.albumListModel?.albumMsgModel?.episodeNow ?? "1")集", integralCount: self.albumListModel?.albumMsgModel?.product?.point ?? "0", productId: self.albumListModel?.product?.productId ?? "")
  315 + CNLiveIntegralAlertTool.shared.homePageNeedReloadActionBlock = {
  316 + self.homePageNeedReloadActionBlock!()
  317 + DispatchQueue.main.asyncAfter(deadline: .now()+1.5) { [self] in
  318 + self.followChangeStatus(isFollowed: true)
  319 + }
  320 + }
  321 + }
  322 + }
  323 + func paymentChangeStatus(isPayed:Bool){
  324 + if isPayed{
  325 + //已购买
  326 + self.paymentBtn.setTitle("已购买", for: .normal)
  327 + self.paymentBtn.setTitleColor(HexColor("#619CFF"), for: .normal)
  328 +
  329 + let payLayer = self.subLayer(name: payBtnSubLayer, viewLayer: self.paymentBtn.layer)
167 330  
  331 + payLayer?.removeFromSuperlayer()
  332 + self.paymentBtn.backgroundColor = HexColor("#ECF3FF")
  333 + }else{
  334 + //未购买
  335 + self.paymentBtn.setTitle("付费解锁全集", for: .normal)
  336 + self.paymentBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  337 +
  338 + let payLayer = self.subLayer(name: payBtnSubLayer, viewLayer: self.paymentBtn.layer)
  339 +
  340 + if (payLayer != nil){
  341 + //已添加layer
  342 + }else{
  343 + //未添加layer
  344 + let gradient = CAGradientLayer()
  345 + gradient.frame = self.bounds
  346 + gradient.colors = [HexColor("#67C5FF")!.cgColor, HexColor("#609AFF")!.cgColor]
  347 + gradient.locations = [0, 1]
  348 + gradient.startPoint = CGPoint(x: 0, y: 0.5)
  349 + gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
  350 + gradient.name = followBtnSubLayer
  351 + self.paymentBtn.layer.insertSublayer(gradient, at: 0)
  352 + self.paymentBtn.backgroundColor = .clear
  353 + }
  354 + }
  355 +
  356 + }
  357 + func followChangeStatus(isFollowed:Bool){
  358 + if isFollowed{
  359 + //已追剧
  360 + self.followBtn.setTitleColor(HexColor("#F5A623"), for: .normal)
  361 + self.followBtn.setTitle("已追剧", for: .normal)
  362 + let follLayer = self.subLayer(name: followBtnSubLayer, viewLayer: self.followBtn.layer)
  363 + follLayer?.removeFromSuperlayer()
  364 + self.followBtn.backgroundColor = HexColor("#FDF4E4")
  365 + }else{
  366 + //未追剧
  367 + self.followBtn.setTitle("追剧", for: .normal)
  368 + self.followBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
  369 + let follLayer = self.subLayer(name: followBtnSubLayer, viewLayer: self.followBtn.layer)
  370 + if (follLayer != nil){
  371 + //已添加layer
  372 + }else{
  373 + //未添加layer
  374 + let gradient = CAGradientLayer()
  375 + gradient.frame = self.bounds
  376 + gradient.colors = [HexColor("#FFD20B")!.cgColor, HexColor("#FFA81A")!.cgColor]
  377 + gradient.locations = [0, 1]
  378 + gradient.startPoint = CGPoint(x: 0.96, y: 0.42)
  379 + gradient.endPoint = CGPoint(x: 0.42, y: 0.42)
  380 + gradient.name = followBtnSubLayer
  381 + followBtn.layer.insertSublayer(gradient, at: 0)
  382 + self.followBtn.backgroundColor = .clear
  383 + }
  384 +
  385 + }
  386 + }
  387 +
  388 + func subLayer(name:String,viewLayer:CALayer) -> CALayer?{
  389 + if let subLayer = viewLayer.sublayers?.first(where: { $0.name == name }) {
  390 + // 这里可以对获取到的子图层进行操作或者访问其属性等
  391 + return subLayer
  392 + } else {
  393 + print("未找到指定名称的图层")
  394 + return nil
  395 + }
  396 + }
  397 +
  398 + // MARK: - 网络请求 追剧1/取消追剧2
  399 + func postAlbumCollect(type:NSInteger){
  400 + CNLiveHomePageViewModel.postAlbumCollect(aid: self.albumListModel?.albumMsgModel?.albumId ?? "", type: type) { result, status in
  401 + if status == .success{
  402 + if type == 1{
  403 + self.followChangeStatus(isFollowed: true)
  404 + }else if type == 0{
  405 + self.followChangeStatus(isFollowed: false)
  406 + }else{
  407 + self.followChangeStatus(isFollowed: false)
  408 + }
  409 + }else{
  410 + showMessage(message: "网络请求失败")
  411 + }
  412 + }
168 413 }
169 414  
170 415 }
... ...
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
... ... @@ -32,12 +32,35 @@ class CNLiveHomePageViewModel:NSObject{
32 32 }
33 33 }
34 34 }
  35 + /// 短剧主页-专辑收藏(追剧)
  36 + static func postAlbumCollect(aid:String,type:NSInteger,resultBlock: @escaping downSlideResultBlock) {
  37 + let param = NSMutableDictionary()
  38 + param.setValue(aid, forKey: "aid")
  39 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  40 + param.setValue("\(type)", forKey: "type")
  41 +
  42 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  43 + CNLiveNetworking.setupShowDataResult(false)
  44 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseCMSUrl+"/contentApi/albumCollect", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  45 + hiddenLoading()
  46 + if (error == nil) {
  47 + let resp = result as! NSDictionary
  48 + let errorCode = "\(resp["errorCode"] ?? "0")"
  49 + if (errorCode == "0") {
  50 +
  51 + resultBlock(NSNull(),.success)
  52 + }
  53 + else{
  54 + resultBlock(NSNull(),.failed)
  55 + }
  56 + }
  57 + }
  58 + }
35 59 /// 获取首页我的专辑收藏数据
36   - static func requestGetHomePage(resultBlock: @escaping downSlideResultBlock) {
  60 + static func requestGetHomePageMyAlbum(page:NSInteger,resultBlock: @escaping downSlideResultBlock) {
37 61 let param = NSMutableDictionary()
38 62 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
39   - param.setValue("1", forKey: "page")
40   - param.setValue("50", forKey: "pageSize")
  63 + param.setValue("\(page)", forKey: "page")
41 64  
42 65 CNLiveNetworking.setAllowRequestDefaultArgument(true)
43 66 CNLiveNetworking.setupShowDataResult(false)
... ... @@ -47,10 +70,19 @@ class CNLiveHomePageViewModel:NSObject{
47 70 let resp = result as! NSDictionary
48 71 let errorCode = "\(resp["errorCode"] ?? "0")"
49 72 if (errorCode == "0") {
50   - let dataDic = resp["data"] as! Dictionary<String, Any>
51   - let dataMdl = newDictionaryToModel(dataDic, CNLiveHomePageModel.self)
  73 + let dataArr = resp["data"] as! Array<Any>
  74 + var resArr = []
  75 + if dataArr.count > 0{
  76 + //有在追短剧
  77 + for dataDic in dataArr {
  78 + let dataMdl = newDictionaryToModel(dataDic as! [String : Any], CNLiveAlbumMsgModel.self)
  79 + resArr.append(dataMdl)
  80 + }
  81 + }else{
  82 + //没有在追短剧
  83 + }
52 84  
53   - resultBlock(dataMdl,.success)
  85 + resultBlock(resArr,.success)
54 86 }
55 87 else{
56 88 resultBlock(NSNull(),.failed)
... ... @@ -59,9 +91,11 @@ class CNLiveHomePageViewModel:NSObject{
59 91 }
60 92 }
61 93 /// 获取首页-全部专辑列表
62   - static func getBlockContents(blockId:String,resultBlock: @escaping downSlideResultBlock) {
  94 + static func getBlockContents(blockId:String,page:NSInteger,resultBlock: @escaping downSlideResultBlock) {
63 95 let param = NSMutableDictionary()
64 96 param.setValue(blockId, forKey: "blockId")
  97 + param.setValue("\(page)", forKey: "page")
  98 +// param.setValue("10", forKey: "pageSize")
65 99 CNLiveNetworking.setAllowRequestDefaultArgument(true)
66 100 CNLiveNetworking.setupShowDataResult(false)
67 101 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getBlockContents", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
... ... @@ -140,4 +174,65 @@ class CNLiveHomePageViewModel:NSObject{
140 174 }
141 175 }
142 176 }
  177 +
  178 + /// 积分支付
  179 + static func orderVideoByPoint(prdId:String,resultBlock: @escaping downSlideResultBlock) {
  180 + let param = NSMutableDictionary()
  181 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  182 + param.setValue(APPId_wjj, forKey: "sp_id")
  183 + param.setValue(prdId, forKey: "prdId")
  184 + param.setValue("apple", forKey: "frmId")
  185 + param.setValue(CNLiveHomePageViewModel.getRandomOrderId(), forKey: "srvOrderId")
  186 + let customParam = NSMutableDictionary()
  187 + customParam.setValue(APPId, forKey: "appId")
  188 + customParam.setValue(APPKey, forKey: "appKey")
  189 +
  190 + CNLiveNetworking.setupShowResult(true)
  191 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  192 + CNLiveNetworking.setupShowDataResult(false)
  193 + CNLiveNetworking.setupCustomParam(customParam as? [String : String])
  194 + CNLiveNetworking.requestNetwork(with: .POST, urlString: "\(CNLiveEnvironmentManager.shared.img_token_url)/pom/orderVideoByPoint", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  195 + hiddenLoading()
  196 + if (error == nil) {
  197 + let resp = result as! NSDictionary
  198 + let errorCode = "\(resp["errorCode"] ?? "0")"
  199 + if (errorCode == "0") {
  200 + //兑换成功
  201 + resultBlock(NSNull(),.success)
  202 + }else if (errorCode == "4002") {
  203 + //积分不足
  204 + resultBlock("积分不足",.failed)
  205 + }else
  206 + {
  207 + resultBlock("兑换失败,请稍候再试!",.failed)
  208 + }
  209 + }
  210 + }
  211 + }
  212 + static func getRandomOrderId() -> String {
  213 + // appId+渠道+年月日+毫秒数后10位+2位数的随机数
  214 + var randomOrderId = ""
  215 + //年月日
  216 + let formatter = DateFormatter()
  217 + formatter.dateFormat = "yyyyMMdd"
  218 + let currentDate = Date()
  219 + let currentDateString = formatter.string(from: currentDate)
  220 +
  221 + //取毫秒时间戳
  222 + let timestamp13 = String(format: "%ld",self.getNow13Timestamp())//timeStamp)
  223 + //拼接
  224 + randomOrderId = String(format: "%@%@%@%d", APPId_wjj, currentDateString, timestamp13, Int.random(in: 0..<10))
  225 +
  226 + return randomOrderId
  227 + }
  228 + static func getNow13Timestamp() -> Int {
  229 + let formatter = DateFormatter()
  230 + formatter.dateStyle = .medium
  231 + formatter.timeStyle = .short
  232 + formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  233 + formatter.timeZone = TimeZone(identifier: "Asia/Beijing")
  234 + let dateNow = Date()
  235 + let timeStamp = Int(dateNow.timeIntervalSince1970)
  236 + return timeStamp*1000
  237 + }
143 238 }
... ...
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderListViewController.swift
... ... @@ -49,6 +49,7 @@ class CNLiveShopOrderListViewController: CNLiveBaseViewController, UITableViewDe
49 49  
50 50 var pageNum: NSInteger
51 51 var network_type: CNLiveMineResponseType!
  52 +
52 53 var _show_type:CNLiveShopOrderListShowType!
53 54 init(show_type:CNLiveShopOrderListShowType) {
54 55 self.pageNum = 1
... ...
metaCode/Supporting Files/Assets.xcassets/Home/Console/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/HomePage/Contents.json
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payed.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "homePage_payed@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "homePage_payed@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payed.imageset/homePage_payed@2x.png 0 → 100644

2.86 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payed.imageset/homePage_payed@3x.png 0 → 100644

5.77 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payment.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "homePage_payment@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "homePage_payment@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payment.imageset/homePage_payment@2x.png 0 → 100644

2.2 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payment.imageset/homePage_payment@3x.png 0 → 100644

4.44 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_fold.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "homepage_fold@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "homepage_fold@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_fold.imageset/homepage_fold@2x.png 0 → 100644

209 Bytes

metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_fold.imageset/homepage_fold@3x.png 0 → 100644

414 Bytes

metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_unfold.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "homepage_unfold@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "homepage_unfold@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_unfold.imageset/homepage_unfold@2x.png 0 → 100644

206 Bytes

metaCode/Supporting Files/Assets.xcassets/HomePage/homepage_unfold.imageset/homepage_unfold@3x.png 0 → 100644

419 Bytes

metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paySuccess.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "jifen_paySuccess@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "jifen_paySuccess@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paySuccess.imageset/jifen_paySuccess@2x.png 0 → 100644

12.4 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paySuccess.imageset/jifen_paySuccess@3x.png 0 → 100644

27.2 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paying.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "jifen_paying@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "jifen_paying@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paying.imageset/jifen_paying@2x.png 0 → 100644

3.01 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/jifen_paying.imageset/jifen_paying@3x.png 0 → 100644

5.57 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/point_alert_close.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "point_alert_close@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "point_alert_close@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/point_alert_close.imageset/point_alert_close@2x.png 0 → 100644

977 Bytes

metaCode/Supporting Files/Assets.xcassets/HomePage/point_alert_close.imageset/point_alert_close@3x.png 0 → 100644

1.73 KB

metaCode/Supporting Files/Assets.xcassets/Home/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/Contents.json
metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DDGL.imageset/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DDGL.imageset/Contents.json
metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DDGL.imageset/订单管理@2x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DDGL.imageset/订单管理@2x.png

2.1 KB

metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DDGL.imageset/订单管理@3x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DDGL.imageset/订单管理@3x.png

4.82 KB

metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DPFL.imageset/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DPFL.imageset/Contents.json
metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DPFL.imageset/店铺分类管理@2x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DPFL.imageset/店铺分类管理@2x.png

2.35 KB

metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DPFL.imageset/店铺分类管理@3x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DPFL.imageset/店铺分类管理@3x.png

4.86 KB

metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DTGL.imageset/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DTGL.imageset/Contents.json
metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DTGL.imageset/动态管理@2x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DTGL.imageset/动态管理@2x.png

2.5 KB

metaCode/Supporting Files/Assets.xcassets/Home/Console/DS_WB_DTGL.imageset/动态管理@3x.png renamed to metaCode/Supporting Files/Assets.xcassets/RenzhenPage/Console/DS_WB_DTGL.imageset/动态管理@3x.png

5.08 KB