Commit 2e0c48e60008acc5d7a90b028df01f01741e92f4

Authored by 张旭
1 parent 9a46072b

首页-在追短剧+全部短剧及详情页的UI调整

Showing 19 changed files with 781 additions and 234 deletions
metaCode.xcodeproj/project.pbxproj
... ... @@ -90,6 +90,8 @@
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 */; };
93 95 19565EC02AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */; };
94 96 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */; };
95 97 19565EC52AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */; };
... ... @@ -342,6 +344,8 @@
342 344 1938BD3C2B4BDD4B00390A34 /* CNLiveAlbumCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumCell.swift; sourceTree = "<group>"; };
343 345 1938BD3E2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumMsgModel.swift; sourceTree = "<group>"; };
344 346 1938BD402B4BEC6900390A34 /* CNLiveAlbumListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlbumListModel.swift; sourceTree = "<group>"; };
  347 + 1938BD422B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomepageDuanJuDetailViewController.swift; sourceTree = "<group>"; };
  348 + 1938BD442B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDuanjuTitleCell.swift; sourceTree = "<group>"; };
345 349 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailBtnsCell.swift; sourceTree = "<group>"; };
346 350 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailOrderAssetCell.swift; sourceTree = "<group>"; };
347 351 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopProductManagerController.swift; sourceTree = "<group>"; };
... ... @@ -739,6 +743,7 @@
739 743 isa = PBXGroup;
740 744 children = (
741 745 1938BD292B48014E00390A34 /* CNHomepageDetailViewController.swift */,
  746 + 1938BD422B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift */,
742 747 1938BD2B2B4801A700390A34 /* CNHomePageAnimationTransition.swift */,
743 748 1938BD2D2B48021E00390A34 /* CNHomePageBaseNavigationController.swift */,
744 749 );
... ... @@ -748,6 +753,7 @@
748 753 1938BD392B4BDC2900390A34 /* HomepageDetail */ = {
749 754 isa = PBXGroup;
750 755 children = (
  756 + 1938BD442B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift */,
751 757 1938BD372B4BDC2500390A34 /* CNLiveAlbumImageCell.swift */,
752 758 1938BD3C2B4BDD4B00390A34 /* CNLiveAlbumCell.swift */,
753 759 );
... ... @@ -1648,6 +1654,7 @@
1648 1654 191733562B2FE855007BCC04 /* CNLivePickerReusingModel.swift in Sources */,
1649 1655 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */,
1650 1656 1926C2912AE0FD4500C71DC3 /* CNLiveDownSlideModel.swift in Sources */,
  1657 + 1938BD452B4E49CA00390A34 /* CNLiveDuanjuTitleCell.swift in Sources */,
1651 1658 7C7C62F62A4D72E9007A912E /* CNLiveIdentityDB.swift in Sources */,
1652 1659 19CC4D4F2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift in Sources */,
1653 1660 191733642B392011007BCC04 /* CNLiveShopGoodsSearchViewController.swift in Sources */,
... ... @@ -1762,6 +1769,7 @@
1762 1769 19FA201B2AE60423001F7186 /* CNLiveDownSlideModelLayout.swift in Sources */,
1763 1770 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */,
1764 1771 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */,
  1772 + 1938BD432B4E34B200390A34 /* CNHomepageDuanJuDetailViewController.swift in Sources */,
1765 1773 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
1766 1774 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */,
1767 1775 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.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/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,6 +48,12 @@ 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)
... ... @@ -115,6 +112,20 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
115 112 else {
116 113 return CNLiveHomePageDuanJuCell()
117 114 }
  115 + cell.setModelArr(modelArr: self.duanjuDataArray)
  116 + cell.DuanJUCellSelectedCallBack = {
  117 + duanJuCell in
  118 + self.selectedDuanjuCell = duanJuCell
  119 +
  120 + let detailVC = CNHomePageBaseNavigationController(rootViewController:CNHomepageDuanJuDetailViewController(cell: duanJuCell))
  121 +
  122 + detailVC.dismissClosure = { [weak self] in
  123 + guard let StrongSelf = self else { return }
  124 + StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
  125 + }
  126 + self.updateStatusBarAndTabbarFrame(visible: false)
  127 + self.present(detailVC, animated: true, completion: nil)
  128 + }
118 129 return cell
119 130 }else{
120 131 let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
... ... @@ -189,6 +200,18 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
189 200  
190 201 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
191 202 if self.isHaveDuanJU && indexPath.section == 0{
  203 + //点击在追短剧
  204 + guard let cell = tableView.cellForRow(at: indexPath) as? CNLiveHomePageDuanJuCell else { return }
  205 + selectedDuanjuCell = cell
  206 +
  207 + let detailVC = CNHomePageBaseNavigationController(rootViewController:CNHomepageDuanJuDetailViewController(cell: selectedDuanjuCell!))
  208 +
  209 + detailVC.dismissClosure = { [weak self] in
  210 + guard let StrongSelf = self else { return }
  211 + StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
  212 + }
  213 + updateStatusBarAndTabbarFrame(visible: false)
  214 + present(detailVC, animated: true, completion: nil)
192 215  
193 216 }else{
194 217  
... ... @@ -201,7 +224,7 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
201 224 }else if slideModel.type == SlideModelTypeAllCourse12{
202 225 guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
203 226 selectedCell = cell
204   - let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel))
  227 + let detailVC = CNHomePageBaseNavigationController(rootViewController: CNHomepageDetailViewController(cell: cell,slideModel: slideModel))
205 228 detailVC.dismissClosure = { [weak self] in
206 229 guard let StrongSelf = self else { return }
207 230 StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
... ... @@ -227,7 +250,8 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
227 250  
228 251 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
229 252 if self.isHaveDuanJU && indexPath.section == 0{
230   - return 300
  253 + //标题55+n个cell*(45+15*2)+首尾15
  254 + return CGFloat(self.duanjuDataArray.count)*(45+15*2)+CGFloat(55)+15+15
231 255 }else{
232 256 let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
233 257 return CGFloat(slideModel.cellH)
... ... @@ -250,23 +274,33 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
250 274 for listModel in homePageListMdls {
251 275 if listModel.type == 3{
252 276 //在追短剧
253   - self.isHaveDuanJU = true
  277 + self.getMyAlbumCollection(page: 1)
254 278 }else if listModel.type == 1{
255 279 //页面
256 280 self.getPageApi(pageID: listModel.content)
257 281 }
258 282 }
259 283 }else{
260   -
  284 + self.getHomePageConfigListApi()
261 285 }
262 286 }
263 287 }
264 288  
265 289 //我的专辑收藏--在追短剧
266   - func getMyAlbumCollection(){
267   - CNLiveHomePageViewModel.requestGetHomePage { result, status in
  290 + func getMyAlbumCollection(page:NSInteger){
  291 + CNLiveHomePageViewModel.requestGetHomePageMyAlbum(page: page){ result, status in
268 292 if status == .success{
269   -
  293 + let arr = result as! Array<CNLiveAlbumMsgModel>
  294 + if arr.count>0{
  295 + //显示在追短剧cell
  296 + self.isHaveDuanJU = true
  297 + self.duanjuDataArray = NSMutableArray(array: arr)
  298 + }else{
  299 + //隐藏在追短剧cell
  300 + self.isHaveDuanJU = false
  301 + }
  302 + self.tableView.reloadData()
  303 +
270 304 }else{
271 305  
272 306 }
... ...
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,50 @@ 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 + CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "", page: page) {[weak self] result, status in
172 179 if status == .success{
173   - let albumArr = result as! Array<CNLiveAlbumModel>
174   - self.dataArray = NSMutableArray(array: albumArr)
175   - self.tableView.reloadData()
176   - }else{
  180 + if self!.pageNum > 1 {
  181 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  182 + }
  183 + if self!.pageNum == 1 {
  184 + self!.dataArray.removeAllObjects()
  185 + self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  186 + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil {
  187 + self!.addRefreshView()
  188 + self!.pageNum = self!.pageNum + 1
  189 + self!.getBlockContents(page: self!.pageNum)
  190 + }
  191 + }
177 192  
  193 + self!.tableView.mj_header?.endRefreshing()
  194 + self!.tableView.mj_footer?.endRefreshing()
  195 + self!.tableView.reloadData()
  196 + if (result as! Array<Any>).count == 0 {
  197 + self!.tableView.mj_footer?.endRefreshingWithNoMoreData()
  198 + self!.tableView.reloadData()
  199 + }
  200 +
  201 + }else if (status == .noNetwork) {
  202 + self!.network_type = .noNetwork
  203 + self!.tableView.reloadEmptyDataSet()
  204 + } else {
  205 + self!.network_type = .failed
  206 + self!.tableView.reloadEmptyDataSet()
178 207 }
179 208 }
180 209 }
  210 + func addRefreshView() {
  211 + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
  212 + self!.pageNum = 1
  213 + self!.getBlockContents(page: 1)
  214 + })
  215 +
  216 + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
  217 + self!.pageNum = self!.pageNum + 1
  218 + self!.getBlockContents(page: self!.pageNum)
  219 + })
  220 + }
181 221  
182 222 @objc private func handleDismissPan(gesture: UIPanGestureRecognizer) {
183 223 if !draggingDownToDismiss {
... ... @@ -271,3 +311,48 @@ extension CNHomepageDetailViewController: UIGestureRecognizerDelegate {
271 311 return true
272 312 }
273 313 }
  314 +
  315 +extension CNHomepageDetailViewController {
  316 +
  317 + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
  318 + if network_type == .failed || network_type == .unkonw {
  319 + return UIImage(named: "mine_list_source_unusual_failed")
  320 + }
  321 + if dataArray.count == 0 {
  322 + return UIImage(named: "mine_list_source_unusual_empty")
  323 + }
  324 + if network_type == .noNetwork {
  325 + return UIImage(named: "mine_list_source_unusual_noNet")
  326 + }
  327 + return UIImage(named: "mine_list_source_unusual_empty")
  328 + }
  329 +
  330 + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? {
  331 + var defult_string = ""
  332 + if network_type == .failed || network_type == .unkonw {
  333 + defult_string = "接口请求错误,刷新试试~"
  334 + }
  335 + if network_type == .noNetwork {
  336 + defult_string = "网络开小差了,刷新试试~"
  337 + }
  338 + if dataArray.count == 0 {
  339 + defult_string = "暂时没有数据~"
  340 + }
  341 + return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!])
  342 + }
  343 +
  344 + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? {
  345 + if network_type == .failed || network_type == .noNetwork {
  346 + let attributes = [NSAttributedString.Key.font:Font_16_Fit,
  347 + NSAttributedString.Key.foregroundColor: HexColor("#609BFF")]
  348 + return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any])
  349 + }
  350 + return nil
  351 + }
  352 +
  353 + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) {
  354 + if network_type == .failed || network_type == .noNetwork {
  355 + getBlockContents(page: 1)
  356 + }
  357 + }
  358 +}
... ...
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
... ... @@ -50,7 +50,6 @@ class CNLivePlayletHomePageController:CNLiveBaseViewController, UITableViewDataS
50 50  
51 51 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
52 52  
53   -// let goodsModel = self.dataArray[indexPath.row] as! CNLiveShopGoodsListModel
54 53 if indexPath.section == 0{
55 54 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLivePlayletHeaderCellIdentifier) as? CNLivePlayletHomePageHeaderCell
56 55 else {
... ...
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? {
... ... @@ -76,6 +89,15 @@ 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
  94 + }
  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
79 101 }
80 102 @objc func playBtnAction(){
81 103 showLoading(message: "")
... ... @@ -84,7 +106,15 @@ class CNLiveAlbumCell:UITableViewCell{
84 106  
85 107 //获取专辑详情(简介等)
86 108 func getAlbumMsg(){
87   - CNLiveHomePageViewModel.getAlbumMsg(aid: self.albumModel!.contentId) { result, status in
  109 + var aid = ""
  110 + if self.albumModel != nil{
  111 + aid = self.albumModel!.contentId
  112 + }else if self.albumMsgModel != nil{
  113 + aid = self.albumMsgModel!.albumId
  114 + }else{
  115 + aid = ""
  116 + }
  117 + CNLiveHomePageViewModel.getAlbumMsg(aid: aid) { result, status in
88 118 hiddenLoading()
89 119 if status == .success{
90 120 let model = result as! CNLiveAlbumMsgModel
... ... @@ -100,7 +130,15 @@ class CNLiveAlbumCell:UITableViewCell{
100 130 //获取专辑视频列表详情(播放地址 ,点赞数等信息)
101 131 func getAlbumList(){
102 132 showLoading(message: "")
103   - CNLiveHomePageViewModel.getAlbumList(aid: self.albumModel!.contentId){ result, status in
  133 + var aid = ""
  134 + if self.albumModel != nil{
  135 + aid = self.albumModel!.contentId
  136 + }else if self.albumMsgModel != nil{
  137 + aid = self.albumMsgModel!.albumId
  138 + }else{
  139 + aid = ""
  140 + }
  141 + CNLiveHomePageViewModel.getAlbumList(aid: aid){ result, status in
104 142 hiddenLoading()
105 143 if status == .success{
106 144 let arr = result as! Array<CNLiveAlbumListModel>
... ...
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/CNLivePlayletHomePageHeaderCell.swift
... ... @@ -12,15 +12,15 @@ import SnapKit
12 12 class CNLivePlayletHomePageHeaderCell:UITableViewCell{
13 13 //MARK: - 懒加载
14 14 lazy var iconImgView :UIImageView = {
15   - let iconImgView = UIImageView(frame: CGRect(x: 20, y: 20, width: 100, height: 100))
  15 + let iconImgView = UIImageView(frame: CGRect(x: 20, y: 20, width: 112, height: 147))
16 16 return iconImgView
17 17 }()
18 18 ///标题
19 19 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))
  20 + let titleLabel = UILabel.init(frame: CGRectMake(self.iconImgView.right+15, self.iconImgView.top, KSreenWidth-(self.iconImgView.right+15)-10, 21))
21 21 titleLabel.textColor = HexColor("#333333")
22 22 titleLabel.textAlignment = .left
23   - titleLabel.font = Font_20
  23 + titleLabel.font = Font_15
24 24 titleLabel.text = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"
25 25 let height = titleLabel.qmui_lineHeight
26 26 titleLabel.height = height
... ...
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
... ... @@ -33,11 +33,10 @@ class CNLiveHomePageViewModel:NSObject{
33 33 }
34 34 }
35 35 /// 获取首页我的专辑收藏数据
36   - static func requestGetHomePage(resultBlock: @escaping downSlideResultBlock) {
  36 + static func requestGetHomePageMyAlbum(page:NSInteger,resultBlock: @escaping downSlideResultBlock) {
37 37 let param = NSMutableDictionary()
38 38 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
39   - param.setValue("1", forKey: "page")
40   - param.setValue("50", forKey: "pageSize")
  39 + param.setValue("\(page)", forKey: "page")
41 40  
42 41 CNLiveNetworking.setAllowRequestDefaultArgument(true)
43 42 CNLiveNetworking.setupShowDataResult(false)
... ... @@ -47,10 +46,19 @@ class CNLiveHomePageViewModel:NSObject{
47 46 let resp = result as! NSDictionary
48 47 let errorCode = "\(resp["errorCode"] ?? "0")"
49 48 if (errorCode == "0") {
50   - let dataDic = resp["data"] as! Dictionary<String, Any>
51   - let dataMdl = newDictionaryToModel(dataDic, CNLiveHomePageModel.self)
  49 + let dataArr = resp["data"] as! Array<Any>
  50 + var resArr = []
  51 + if dataArr.count > 0{
  52 + //有在追短剧
  53 + for dataDic in dataArr {
  54 + let dataMdl = newDictionaryToModel(dataDic as! [String : Any], CNLiveAlbumMsgModel.self)
  55 + resArr.append(dataMdl)
  56 + }
  57 + }else{
  58 + //没有在追短剧
  59 + }
52 60  
53   - resultBlock(dataMdl,.success)
  61 + resultBlock(resArr,.success)
54 62 }
55 63 else{
56 64 resultBlock(NSNull(),.failed)
... ... @@ -59,9 +67,11 @@ class CNLiveHomePageViewModel:NSObject{
59 67 }
60 68 }
61 69 /// 获取首页-全部专辑列表
62   - static func getBlockContents(blockId:String,resultBlock: @escaping downSlideResultBlock) {
  70 + static func getBlockContents(blockId:String,page:NSInteger,resultBlock: @escaping downSlideResultBlock) {
63 71 let param = NSMutableDictionary()
64 72 param.setValue(blockId, forKey: "blockId")
  73 + param.setValue("\(page)", forKey: "page")
  74 +// param.setValue("10", forKey: "pageSize")
65 75 CNLiveNetworking.setAllowRequestDefaultArgument(true)
66 76 CNLiveNetworking.setupShowDataResult(false)
67 77 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getBlockContents", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
... ...
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/TabBar/tabbar_authentication.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "authentication@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "authentication@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/TabBar/tabbar_authentication.imageset/authentication@2x.png 0 → 100644

1.4 KB

metaCode/Supporting Files/Assets.xcassets/TabBar/tabbar_authentication.imageset/authentication@3x.png 0 → 100644

2.52 KB

metaCode/Supporting Files/Assets.xcassets/TabBar/tabbar_authentication_unSelect.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "authentication_unSelect@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "authentication_unSelect@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/TabBar/tabbar_authentication_unSelect.imageset/authentication_unSelect@2x.png 0 → 100644

1.32 KB

metaCode/Supporting Files/Assets.xcassets/TabBar/tabbar_authentication_unSelect.imageset/authentication_unSelect@3x.png 0 → 100644

2.34 KB