Commit 184f9c5314f29af3a8ebe5addad2ac4332c17df7
1 parent
70545b57
专辑跳转方法添加
Showing
15 changed files
with
770 additions
and
400 deletions
Podfile
| @@ -49,20 +49,23 @@ target 'metaCode' do | @@ -49,20 +49,23 @@ target 'metaCode' do | ||
| 49 | #播放器 | 49 | #播放器 |
| 50 | pod 'ZFPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' | 50 | pod 'ZFPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' |
| 51 | pod 'ZFPlayer/ControlView', :git => 'https://gitee.com/mirrors/ZFPlayer.git' | 51 | pod 'ZFPlayer/ControlView', :git => 'https://gitee.com/mirrors/ZFPlayer.git' |
| 52 | -# pod 'ZFPlayer/AVPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' | 52 | + pod 'ZFPlayer/AVPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' |
| 53 | pod 'ZFPlayer/ijkplayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' | 53 | pod 'ZFPlayer/ijkplayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' |
| 54 | - #支付 | ||
| 55 | - #pod 'CNLivePayCostModule' | ||
| 56 | #分享 | 54 | #分享 |
| 57 | #pod 'CNLiveShareToolKit' | 55 | #pod 'CNLiveShareToolKit' |
| 56 | + #网家家输入组件 | ||
| 57 | + pod 'CNLiveCustomUI/CNLiveContentToolTextView' | ||
| 58 | + #业务工具库 | ||
| 59 | + pod 'CNLiveBusinessTools' | ||
| 58 | 60 | ||
| 59 | #图片浏览器 | 61 | #图片浏览器 |
| 60 | - pod 'SKPhotoBrowser' | 62 | + pod 'SKPhotoBrowser', :git => 'https://gitee.com/mirrors/SKPhotoBrowser.git' |
| 61 | 63 | ||
| 62 | #视频播放器 | 64 | #视频播放器 |
| 63 | pod 'PLPlayerKit' | 65 | pod 'PLPlayerKit' |
| 64 | #UI框架 | 66 | #UI框架 |
| 65 | - pod 'QMUIKit' | 67 | +# pod 'QMUIKit' |
| 68 | + pod 'YYWebImage', :git => 'https://gitee.com/mirrors/YYWebImage.git' | ||
| 66 | 69 | ||
| 67 | target 'metaCodeTests' do | 70 | target 'metaCodeTests' do |
| 68 | inherit! :search_paths | 71 | inherit! :search_paths |
metaCode.xcodeproj/project.pbxproj
| @@ -158,9 +158,10 @@ | @@ -158,9 +158,10 @@ | ||
| 158 | 7939B0732B47F12F005AE981 /* CNLiveShortVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */; }; | 158 | 7939B0732B47F12F005AE981 /* CNLiveShortVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */; }; |
| 159 | 7939B0752B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */; }; | 159 | 7939B0752B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */; }; |
| 160 | 7939B0772B47F88A005AE981 /* CNLiveShortVideoControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */; }; | 160 | 7939B0772B47F88A005AE981 /* CNLiveShortVideoControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */; }; |
| 161 | - 7939B0792B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */; }; | ||
| 162 | 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */; }; | 161 | 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */; }; |
| 163 | 794294A72B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */; }; | 162 | 794294A72B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */; }; |
| 163 | + 794294AA2B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */; }; | ||
| 164 | + 794294AC2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */; }; | ||
| 164 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */; }; | 165 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */; }; |
| 165 | 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */; }; | 166 | 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */; }; |
| 166 | 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */; }; | 167 | 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */; }; |
| @@ -196,6 +197,7 @@ | @@ -196,6 +197,7 @@ | ||
| 196 | 799172362AF08D4500DC01A8 /* CNLiveShopBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */; }; | 197 | 799172362AF08D4500DC01A8 /* CNLiveShopBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */; }; |
| 197 | 799172382AF090CD00DC01A8 /* CNLiveShopBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */; }; | 198 | 799172382AF090CD00DC01A8 /* CNLiveShopBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */; }; |
| 198 | 7991723A2AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */; }; | 199 | 7991723A2AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */; }; |
| 200 | + 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */; }; | ||
| 199 | 79A212C02B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */; }; | 201 | 79A212C02B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */; }; |
| 200 | 79A212C22B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */; }; | 202 | 79A212C22B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */; }; |
| 201 | 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */; }; | 203 | 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */; }; |
| @@ -422,9 +424,10 @@ | @@ -422,9 +424,10 @@ | ||
| 422 | 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoViewController.swift; sourceTree = "<group>"; }; | 424 | 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoViewController.swift; sourceTree = "<group>"; }; |
| 423 | 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoListTableViewCell.swift; sourceTree = "<group>"; }; | 425 | 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoListTableViewCell.swift; sourceTree = "<group>"; }; |
| 424 | 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoControlView.swift; sourceTree = "<group>"; }; | 426 | 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoControlView.swift; sourceTree = "<group>"; }; |
| 425 | - 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCustomControlView.swift; sourceTree = "<group>"; }; | ||
| 426 | 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineExchangeViewController.swift; sourceTree = "<group>"; }; | 427 | 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineExchangeViewController.swift; sourceTree = "<group>"; }; |
| 427 | 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoContentListView.swift; sourceTree = "<group>"; }; | 428 | 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoContentListView.swift; sourceTree = "<group>"; }; |
| 429 | + 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCommentListView.swift; sourceTree = "<group>"; }; | ||
| 430 | + 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCommentLayout.swift; sourceTree = "<group>"; }; | ||
| 428 | 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSendViewController.swift; sourceTree = "<group>"; }; | 431 | 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSendViewController.swift; sourceTree = "<group>"; }; |
| 429 | 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchViewController.swift; sourceTree = "<group>"; }; | 432 | 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchViewController.swift; sourceTree = "<group>"; }; |
| 430 | 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchListViewController.swift; sourceTree = "<group>"; }; | 433 | 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchListViewController.swift; sourceTree = "<group>"; }; |
| @@ -460,6 +463,7 @@ | @@ -460,6 +463,7 @@ | ||
| 460 | 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBaseModel.swift; sourceTree = "<group>"; }; | 463 | 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBaseModel.swift; sourceTree = "<group>"; }; |
| 461 | 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyListView.swift; sourceTree = "<group>"; }; | 464 | 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyListView.swift; sourceTree = "<group>"; }; |
| 462 | 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderListViewController.swift; sourceTree = "<group>"; }; | 465 | 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderListViewController.swift; sourceTree = "<group>"; }; |
| 466 | + 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveRefresh.swift; sourceTree = "<group>"; }; | ||
| 463 | 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCouponManagerViewController.swift; sourceTree = "<group>"; }; | 467 | 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCouponManagerViewController.swift; sourceTree = "<group>"; }; |
| 464 | 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCouponManagerView.swift; sourceTree = "<group>"; }; | 468 | 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCouponManagerView.swift; sourceTree = "<group>"; }; |
| 465 | 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCustomView.swift; sourceTree = "<group>"; }; | 469 | 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCustomView.swift; sourceTree = "<group>"; }; |
| @@ -1029,6 +1033,7 @@ | @@ -1029,6 +1033,7 @@ | ||
| 1029 | isa = PBXGroup; | 1033 | isa = PBXGroup; |
| 1030 | children = ( | 1034 | children = ( |
| 1031 | 796308742B4B90700090D22A /* CNLiveShortVideoHomeModel.swift */, | 1035 | 796308742B4B90700090D22A /* CNLiveShortVideoHomeModel.swift */, |
| 1036 | + 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */, | ||
| 1032 | ); | 1037 | ); |
| 1033 | path = Model; | 1038 | path = Model; |
| 1034 | sourceTree = "<group>"; | 1039 | sourceTree = "<group>"; |
| @@ -1038,12 +1043,19 @@ | @@ -1038,12 +1043,19 @@ | ||
| 1038 | children = ( | 1043 | children = ( |
| 1039 | 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */, | 1044 | 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */, |
| 1040 | 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */, | 1045 | 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */, |
| 1041 | - 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */, | ||
| 1042 | 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */, | 1046 | 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */, |
| 1047 | + 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */, | ||
| 1043 | ); | 1048 | ); |
| 1044 | path = View; | 1049 | path = View; |
| 1045 | sourceTree = "<group>"; | 1050 | sourceTree = "<group>"; |
| 1046 | }; | 1051 | }; |
| 1052 | + 794294A82B4D3018008AAFA0 /* Share */ = { | ||
| 1053 | + isa = PBXGroup; | ||
| 1054 | + children = ( | ||
| 1055 | + ); | ||
| 1056 | + path = Share; | ||
| 1057 | + sourceTree = "<group>"; | ||
| 1058 | + }; | ||
| 1047 | 79579CAA2AAAE905006E5B38 /* Database */ = { | 1059 | 79579CAA2AAAE905006E5B38 /* Database */ = { |
| 1048 | isa = PBXGroup; | 1060 | isa = PBXGroup; |
| 1049 | children = ( | 1061 | children = ( |
| @@ -1131,6 +1143,7 @@ | @@ -1131,6 +1143,7 @@ | ||
| 1131 | 796398922A260C0100D045EB /* Config */ = { | 1143 | 796398922A260C0100D045EB /* Config */ = { |
| 1132 | isa = PBXGroup; | 1144 | isa = PBXGroup; |
| 1133 | children = ( | 1145 | children = ( |
| 1146 | + 794294A82B4D3018008AAFA0 /* Share */, | ||
| 1134 | 79E496E42AB936E200127BF8 /* Tool */, | 1147 | 79E496E42AB936E200127BF8 /* Tool */, |
| 1135 | 79579CAA2AAAE905006E5B38 /* Database */, | 1148 | 79579CAA2AAAE905006E5B38 /* Database */, |
| 1136 | 7CD675512A29C04B008354C1 /* CNLiveConfigstant.swift */, | 1149 | 7CD675512A29C04B008354C1 /* CNLiveConfigstant.swift */, |
| @@ -1190,6 +1203,7 @@ | @@ -1190,6 +1203,7 @@ | ||
| 1190 | children = ( | 1203 | children = ( |
| 1191 | 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */, | 1204 | 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */, |
| 1192 | 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */, | 1205 | 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */, |
| 1206 | + 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */, | ||
| 1193 | ); | 1207 | ); |
| 1194 | path = CustomView; | 1208 | path = CustomView; |
| 1195 | sourceTree = "<group>"; | 1209 | sourceTree = "<group>"; |
| @@ -1707,7 +1721,6 @@ | @@ -1707,7 +1721,6 @@ | ||
| 1707 | 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */, | 1721 | 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */, |
| 1708 | 1938BD382B4BDC2500390A34 /* CNLiveAlbumImageCell.swift in Sources */, | 1722 | 1938BD382B4BDC2500390A34 /* CNLiveAlbumImageCell.swift in Sources */, |
| 1709 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, | 1723 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, |
| 1710 | - 7939B0792B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift in Sources */, | ||
| 1711 | 1917330D2B1096AB007BCC04 /* CNLivePlayerViewController.swift in Sources */, | 1724 | 1917330D2B1096AB007BCC04 /* CNLivePlayerViewController.swift in Sources */, |
| 1712 | 1917330F2B10989C007BCC04 /* CNLivePlayerView.swift in Sources */, | 1725 | 1917330F2B10989C007BCC04 /* CNLivePlayerView.swift in Sources */, |
| 1713 | 7989B5C72A4BDC7200A19B10 /* CNLiveMineEarnListViewController.swift in Sources */, | 1726 | 7989B5C72A4BDC7200A19B10 /* CNLiveMineEarnListViewController.swift in Sources */, |
| @@ -1873,6 +1886,7 @@ | @@ -1873,6 +1886,7 @@ | ||
| 1873 | 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, | 1886 | 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, |
| 1874 | 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */, | 1887 | 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */, |
| 1875 | 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */, | 1888 | 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */, |
| 1889 | + 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */, | ||
| 1876 | 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */, | 1890 | 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */, |
| 1877 | 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */, | 1891 | 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */, |
| 1878 | 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */, | 1892 | 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */, |
| @@ -1881,6 +1895,7 @@ | @@ -1881,6 +1895,7 @@ | ||
| 1881 | 191733152B109FD7007BCC04 /* CNLivePlayerTopNaviView.swift in Sources */, | 1895 | 191733152B109FD7007BCC04 /* CNLivePlayerTopNaviView.swift in Sources */, |
| 1882 | 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */, | 1896 | 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */, |
| 1883 | 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, | 1897 | 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, |
| 1898 | + 794294AC2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift in Sources */, | ||
| 1884 | 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */, | 1899 | 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */, |
| 1885 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, | 1900 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, |
| 1886 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */, | 1901 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */, |
| @@ -1889,6 +1904,7 @@ | @@ -1889,6 +1904,7 @@ | ||
| 1889 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, | 1904 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, |
| 1890 | 19FA20192AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift in Sources */, | 1905 | 19FA20192AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift in Sources */, |
| 1891 | 790B1FB42A4153E90074CF00 /* CNLiveMineBaseModel.swift in Sources */, | 1906 | 790B1FB42A4153E90074CF00 /* CNLiveMineBaseModel.swift in Sources */, |
| 1907 | + 794294AA2B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift in Sources */, | ||
| 1892 | 7978A8432A396632007C86B8 /* CNLiveMineViewModel.swift in Sources */, | 1908 | 7978A8432A396632007C86B8 /* CNLiveMineViewModel.swift in Sources */, |
| 1893 | 191733022B0C4EAB007BCC04 /* CNLiveSelUplSingleImageView.swift in Sources */, | 1909 | 191733022B0C4EAB007BCC04 /* CNLiveSelUplSingleImageView.swift in Sources */, |
| 1894 | 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */, | 1910 | 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */, |
metaCode/Classes/CustomView/CNLiveRefresh.swift
0 → 100644
| 1 | +// | ||
| 2 | +// CNLiveHeaderRefresh.swift | ||
| 3 | +// metaCode | ||
| 4 | +// | ||
| 5 | +// Created by open on 2024/1/10. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import MJRefresh | ||
| 10 | + | ||
| 11 | +class CNLiveHeaderRefresh: MJRefreshNormalHeader { | ||
| 12 | + | ||
| 13 | + override func prepare() { | ||
| 14 | + super.prepare() | ||
| 15 | + self.loadingView?.color = .white | ||
| 16 | + self.arrowView!.isHidden = true | ||
| 17 | + self.stateLabel?.isHidden = true | ||
| 18 | + self.lastUpdatedTimeLabel?.isHidden = true | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +class CNLiveFooterRefresh: MJRefreshAutoNormalFooter { | ||
| 23 | + override func prepare() { | ||
| 24 | + super.prepare() | ||
| 25 | + self.stateLabel?.textColor = .white | ||
| 26 | + self.loadingView?.color = .white | ||
| 27 | + } | ||
| 28 | +} |
metaCode/Classes/Environment/CNLiveEnvironment.swift
| @@ -33,6 +33,8 @@ let APPBaseWjjBUrl: String = CNLiveEnvironmentManager.shared.base_wjj_b_url | @@ -33,6 +33,8 @@ let APPBaseWjjBUrl: String = CNLiveEnvironmentManager.shared.base_wjj_b_url | ||
| 33 | let APPBaseWjjShopUrl: String = CNLiveEnvironmentManager.shared.base_mjj_shop_url | 33 | let APPBaseWjjShopUrl: String = CNLiveEnvironmentManager.shared.base_mjj_shop_url |
| 34 | /// cms接口 | 34 | /// cms接口 |
| 35 | let APPBaseCMSUrl: String = CNLiveEnvironmentManager.shared.base_cms_url | 35 | let APPBaseCMSUrl: String = CNLiveEnvironmentManager.shared.base_cms_url |
| 36 | +/// 用户云接口 | ||
| 37 | +let APPBaseTokenUrl: String = CNLiveEnvironmentManager.shared.img_token_url | ||
| 36 | /// cms_api接口 | 38 | /// cms_api接口 |
| 37 | let APPBaseCMSClassUrl: String = CNLiveEnvironmentManager.shared.base_cms_class_url | 39 | let APPBaseCMSClassUrl: String = CNLiveEnvironmentManager.shared.base_cms_class_url |
| 38 | ///当前APP的环境 | 40 | ///当前APP的环境 |
metaCode/Classes/Main/HomePages/Controller/AuthController/CNLiveAuthViewController.swift
| @@ -96,16 +96,16 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa | @@ -96,16 +96,16 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa | ||
| 96 | // MARK: - UITableViewDelegate | 96 | // MARK: - UITableViewDelegate |
| 97 | func numberOfSections(in tableView: UITableView) -> Int { | 97 | func numberOfSections(in tableView: UITableView) -> Int { |
| 98 | if self.isHaveDuanJU{ | 98 | if self.isHaveDuanJU{ |
| 99 | - 2 | 99 | + return 2 |
| 100 | }else{ | 100 | }else{ |
| 101 | - 1 | 101 | + return 1 |
| 102 | } | 102 | } |
| 103 | } | 103 | } |
| 104 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | 104 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| 105 | if self.isHaveDuanJU && section == 0{ | 105 | if self.isHaveDuanJU && section == 0{ |
| 106 | - 1 | 106 | + return 1 |
| 107 | }else{ | 107 | }else{ |
| 108 | - self.dataArray.count | 108 | + return self.dataArray.count |
| 109 | } | 109 | } |
| 110 | } | 110 | } |
| 111 | 111 |
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
| @@ -92,7 +92,6 @@ class CNLiveHomePageViewModel:NSObject{ | @@ -92,7 +92,6 @@ class CNLiveHomePageViewModel:NSObject{ | ||
| 92 | let param = NSMutableDictionary() | 92 | let param = NSMutableDictionary() |
| 93 | param.setValue(aid, forKey: "aid") | 93 | param.setValue(aid, forKey: "aid") |
| 94 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | 94 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") |
| 95 | - | ||
| 96 | CNLiveNetworking.setAllowRequestDefaultArgument(true) | 95 | CNLiveNetworking.setAllowRequestDefaultArgument(true) |
| 97 | CNLiveNetworking.setupShowDataResult(false) | 96 | CNLiveNetworking.setupShowDataResult(false) |
| 98 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | 97 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in |
| @@ -118,7 +117,6 @@ class CNLiveHomePageViewModel:NSObject{ | @@ -118,7 +117,6 @@ class CNLiveHomePageViewModel:NSObject{ | ||
| 118 | let param = NSMutableDictionary() | 117 | let param = NSMutableDictionary() |
| 119 | param.setValue(aid, forKey: "aid") | 118 | param.setValue(aid, forKey: "aid") |
| 120 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | 119 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") |
| 121 | - | ||
| 122 | CNLiveNetworking.setAllowRequestDefaultArgument(true) | 120 | CNLiveNetworking.setAllowRequestDefaultArgument(true) |
| 123 | CNLiveNetworking.setupShowDataResult(false) | 121 | CNLiveNetworking.setupShowDataResult(false) |
| 124 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | 122 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in |
| @@ -136,8 +134,7 @@ class CNLiveHomePageViewModel:NSObject{ | @@ -136,8 +134,7 @@ class CNLiveHomePageViewModel:NSObject{ | ||
| 136 | } | 134 | } |
| 137 | 135 | ||
| 138 | resultBlock(listArr,.success) | 136 | resultBlock(listArr,.success) |
| 139 | - } | ||
| 140 | - else{ | 137 | + }else{ |
| 141 | resultBlock(NSNull(),.failed) | 138 | resultBlock(NSNull(),.failed) |
| 142 | } | 139 | } |
| 143 | } | 140 | } |
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift
| @@ -193,7 +193,7 @@ extension CNLiveMineViewController { | @@ -193,7 +193,7 @@ extension CNLiveMineViewController { | ||
| 193 | self.navigationController?.pushViewController(CNLiveShopCouponManagerViewController.init(), animated: true) | 193 | self.navigationController?.pushViewController(CNLiveShopCouponManagerViewController.init(), animated: true) |
| 194 | } | 194 | } |
| 195 | if indexPath.row == 4 { | 195 | if indexPath.row == 4 { |
| 196 | - self.navigationController?.pushViewController(CNLiveShortVideoViewController.init(), animated: true) | 196 | + self.navigationController?.pushViewController(CNLiveShortVideoViewController.init(aid: "cms_ugc_10504077_1704334474587"), animated: true) |
| 197 | } | 197 | } |
| 198 | } | 198 | } |
| 199 | 199 |
metaCode/Classes/Main/VideoPage/Controller/CNLiveShortVideoViewController.swift
| @@ -8,7 +8,10 @@ | @@ -8,7 +8,10 @@ | ||
| 8 | import Foundation | 8 | import Foundation |
| 9 | import ZFPlayer | 9 | import ZFPlayer |
| 10 | import APButton | 10 | import APButton |
| 11 | -class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, CNLiveShortVideoListTableViewCellDelegate { | 11 | +import EmptyDataSet_Swift |
| 12 | +import MJRefresh | ||
| 13 | + | ||
| 14 | +class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, CNLiveShortVideoListTableViewCellDelegate, EmptyDataSetSource, EmptyDataSetDelegate { | ||
| 12 | 15 | ||
| 13 | var player: ZFPlayerController! | 16 | var player: ZFPlayerController! |
| 14 | let kVideoBodyListViewCellIdentifier = "kVideoBodyListViewCellIdentifier" | 17 | let kVideoBodyListViewCellIdentifier = "kVideoBodyListViewCellIdentifier" |
| @@ -16,6 +19,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -16,6 +19,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 16 | let tableView = UITableView(frame: .zero, style: .plain) | 19 | let tableView = UITableView(frame: .zero, style: .plain) |
| 17 | tableView.dataSource = self | 20 | tableView.dataSource = self |
| 18 | tableView.delegate = self | 21 | tableView.delegate = self |
| 22 | + tableView.emptyDataSetSource = self | ||
| 23 | + tableView.emptyDataSetDelegate = self | ||
| 19 | tableView.isPagingEnabled = true | 24 | tableView.isPagingEnabled = true |
| 20 | tableView.estimatedRowHeight = 0 | 25 | tableView.estimatedRowHeight = 0 |
| 21 | tableView.estimatedSectionFooterHeight = 0 | 26 | tableView.estimatedSectionFooterHeight = 0 |
| @@ -26,6 +31,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -26,6 +31,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 26 | tableView.tableFooterView = UIView.init() | 31 | tableView.tableFooterView = UIView.init() |
| 27 | tableView.separatorStyle = .none | 32 | tableView.separatorStyle = .none |
| 28 | tableView.scrollsToTop = false | 33 | tableView.scrollsToTop = false |
| 34 | + tableView.showsVerticalScrollIndicator = false | ||
| 35 | + tableView.showsHorizontalScrollIndicator = false | ||
| 29 | tableView.contentInsetAdjustmentBehavior = .never; | 36 | tableView.contentInsetAdjustmentBehavior = .never; |
| 30 | tableView.register(CNLiveShortVideoListTableViewCell.self, forCellReuseIdentifier: kVideoBodyListViewCellIdentifier) | 37 | tableView.register(CNLiveShortVideoListTableViewCell.self, forCellReuseIdentifier: kVideoBodyListViewCellIdentifier) |
| 31 | return tableView | 38 | return tableView |
| @@ -51,16 +58,52 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -51,16 +58,52 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 51 | let dataArray = NSMutableArray.init() | 58 | let dataArray = NSMutableArray.init() |
| 52 | return dataArray | 59 | return dataArray |
| 53 | }() | 60 | }() |
| 54 | - | 61 | + |
| 62 | + var aid: String! = "" | ||
| 63 | + var pageNum: NSInteger! = 1 | ||
| 64 | + var currentIndex: NSInteger! = 0 | ||
| 65 | + var headerRefreshView: CNLiveHeaderRefresh! | ||
| 66 | + var footerRefreshView: CNLiveFooterRefresh! | ||
| 55 | var playerManager = ZFIJKPlayerManager.init() | 67 | var playerManager = ZFIJKPlayerManager.init() |
| 56 | // var playerManager = ZFAVPlayerManager.init() | 68 | // var playerManager = ZFAVPlayerManager.init() |
| 57 | 69 | ||
| 70 | + /// 初始化播放器 | ||
| 71 | + /// - Parameters: | ||
| 72 | + /// - aid: 专辑 id | ||
| 73 | + /// - page: 当前页数 | ||
| 74 | + /// - currentIndex: 当前点击的索引 | ||
| 75 | + /// - dataArray: 当前请求的数据 | ||
| 76 | + init(aid: String,page: NSInteger, currentIndex: NSInteger, dataArray: [CNLiveAlbumListModel]) { | ||
| 77 | + self.aid = aid | ||
| 78 | + self.pageNum = page | ||
| 79 | + self.currentIndex = currentIndex | ||
| 80 | + super.init(nibName:nil, bundle:nil) | ||
| 81 | + self.dataArray.addObjects(from: dataArray) | ||
| 82 | + dataArray.forEach {[weak self] listModel in | ||
| 83 | + guard let self = self else { return } | ||
| 84 | + self.dataURLArray.add(listModel.videoUrl) | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + /// 初始化播放器 | ||
| 89 | + /// - Parameter aid: 专辑 id | ||
| 90 | + init(aid: String) { | ||
| 91 | + self.aid = aid | ||
| 92 | + super.init(nibName:nil, bundle:nil) | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + required init?(coder: NSCoder) { | ||
| 96 | + fatalError("init(coder:) has not been implemented") | ||
| 97 | + } | ||
| 98 | + | ||
| 58 | override func viewDidLoad() { | 99 | override func viewDidLoad() { |
| 59 | super.viewDidLoad() | 100 | super.viewDidLoad() |
| 60 | view.backgroundColor = .black | 101 | view.backgroundColor = .black |
| 61 | view.addSubview(tableView) | 102 | view.addSubview(tableView) |
| 62 | view.addSubview(backBtn) | 103 | view.addSubview(backBtn) |
| 63 | - requestData() | 104 | + |
| 105 | + requestData {} | ||
| 106 | + addRefreshView() | ||
| 64 | 107 | ||
| 65 | player = ZFPlayerController(scrollView: tableView, playerManager: playerManager, containerViewTag: 100) | 108 | player = ZFPlayerController(scrollView: tableView, playerManager: playerManager, containerViewTag: 100) |
| 66 | player.disableGestureTypes = [.pan, .pinch] | 109 | player.disableGestureTypes = [.pan, .pinch] |
| @@ -74,17 +117,14 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -74,17 +117,14 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 74 | } | 117 | } |
| 75 | player.playerPrepareToPlay = {[weak self] asset, assetURL in | 118 | player.playerPrepareToPlay = {[weak self] asset, assetURL in |
| 76 | guard let self = self else { return } | 119 | guard let self = self else { return } |
| 120 | + self.controlView.videoPlayer((self.player)!, currentTime: self.player.currentTime, totalTime: self.player.totalTime) | ||
| 77 | let index = self.dataURLArray.index(of: assetURL.absoluteString) | 121 | let index = self.dataURLArray.index(of: assetURL.absoluteString) |
| 78 | - let homeModel = self.dataArray[index] as! ShortVideoHomeTestModel | ||
| 79 | - if (homeModel.isMoney!) { | ||
| 80 | - let indexPath = IndexPath(row: index, section: 0) | ||
| 81 | - let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell | ||
| 82 | - cell.hiddenView(isHidden: true) | 122 | + let homeModel = self.dataArray[index] as! CNLiveAlbumListModel |
| 123 | + let indexPath = IndexPath(row: index, section: 0) | ||
| 124 | + let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell | ||
| 125 | + cell.hiddenView(isHidden: homeModel.product!.albumProductType != "0") | ||
| 126 | + if (homeModel.product!.albumProductType != "0") { | ||
| 83 | self.player.stopCurrentPlayingCell() | 127 | self.player.stopCurrentPlayingCell() |
| 84 | - } else { | ||
| 85 | - let indexPath = IndexPath(row: index, section: 0) | ||
| 86 | - let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell | ||
| 87 | - cell.hiddenView(isHidden: false) | ||
| 88 | } | 128 | } |
| 89 | } | 129 | } |
| 90 | // 更新另一个控制层的时间 | 130 | // 更新另一个控制层的时间 |
| @@ -103,42 +143,72 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -103,42 +143,72 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 103 | if self.player.playingIndexPath != nil { | 143 | if self.player.playingIndexPath != nil { |
| 104 | return | 144 | return |
| 105 | } | 145 | } |
| 106 | - if indexPath.row == (self.dataArray.count) - 1 { | ||
| 107 | - // 加载下一页数据 | ||
| 108 | - self.requestData() | ||
| 109 | - self.tableView.reloadData() | ||
| 110 | - } | ||
| 111 | self.playVideo(at: indexPath) | 146 | self.playVideo(at: indexPath) |
| 112 | } | 147 | } |
| 113 | } | 148 | } |
| 114 | 149 | ||
| 150 | + func addRefreshView() { | ||
| 151 | + headerRefreshView = CNLiveHeaderRefresh(refreshingBlock: { [weak self] in | ||
| 152 | + guard let self = self else { return } | ||
| 153 | + self.pageNum = 1 | ||
| 154 | + self.requestData {} | ||
| 155 | + }) | ||
| 156 | + footerRefreshView = CNLiveFooterRefresh(refreshingBlock: { [weak self] in | ||
| 157 | + guard let self = self else { return } | ||
| 158 | + self.player.stopCurrentPlayingCell() | ||
| 159 | + self.pageNum += 1 | ||
| 160 | + self.requestData {} | ||
| 161 | + }) | ||
| 162 | + } | ||
| 163 | + | ||
| 115 | override func viewWillLayoutSubviews() { | 164 | override func viewWillLayoutSubviews() { |
| 116 | super.viewWillLayoutSubviews() | 165 | super.viewWillLayoutSubviews() |
| 117 | self.backBtn.frame = CGRectMake(15, CGRectGetMaxY(UIApplication.shared.statusBarFrame), 45, 45) | 166 | self.backBtn.frame = CGRectMake(15, CGRectGetMaxY(UIApplication.shared.statusBarFrame), 45, 45) |
| 118 | } | 167 | } |
| 119 | 168 | ||
| 120 | - func loadRequest() { | ||
| 121 | - dataArray.removeAllObjects() | ||
| 122 | - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in | ||
| 123 | - guard let strongSelf = self else { return } | ||
| 124 | - // 下拉时一定要停止当前播放,以防有新数据,播放位置会错位 | ||
| 125 | - strongSelf.player.stopCurrentPlayingCell() | ||
| 126 | - strongSelf.requestData() | ||
| 127 | - strongSelf.tableView.reloadData() | ||
| 128 | - strongSelf.player.zf_filterShouldPlayCellWhileScrolled { [weak self] indexPath in | ||
| 129 | - guard let strongSelf = self else { return } | ||
| 130 | - strongSelf.playVideo(at: indexPath) | ||
| 131 | - } | ||
| 132 | - } | ||
| 133 | - } | ||
| 134 | - | ||
| 135 | - func requestData() { | ||
| 136 | - CNLiveShortVideoViewModel.requstWithShortVideo { [weak self] result, respStatue in | 169 | + func requestData(resultBlock: @escaping () -> Void) { |
| 170 | + CNLiveShortVideoViewModel.requstWithShortVideo(aid: self.aid, page: self.pageNum) { [weak self] result, respStatue in | ||
| 137 | guard let self = self else { return } | 171 | guard let self = self else { return } |
| 138 | - self.dataArray.addObjects(from: (result as! [Any]).first as! [Any]) | ||
| 139 | - self.dataURLArray.addObjects(from: (result as! [Any]).last as! [Any]) | ||
| 140 | - self.tableView.reloadData() | ||
| 141 | - self.playTheIndex(index: 0) | 172 | + if respStatue == .success { |
| 173 | + if self.pageNum == 1 { | ||
| 174 | + self.dataArray.removeAllObjects() | ||
| 175 | + self.dataURLArray.removeAllObjects() | ||
| 176 | + } | ||
| 177 | + let listArray = (result as! [Any]).first as! [CNLiveAlbumListModel] | ||
| 178 | + self.dataArray.addObjects(from: listArray) | ||
| 179 | + let urlArray = (result as! [Any]).last as! [String] | ||
| 180 | + self.dataURLArray.addObjects(from: urlArray) | ||
| 181 | + if self.tableView.mj_header != nil && self.tableView.mj_footer != nil { | ||
| 182 | + self.tableView.mj_footer?.endRefreshing() | ||
| 183 | + self.tableView.mj_header?.endRefreshing() | ||
| 184 | + } | ||
| 185 | + self.tableView.reloadData() | ||
| 186 | + let hasNextPage = (result as! [Any])[1] as! Bool | ||
| 187 | + if listArray.count == 0 && urlArray.count == 0 { | ||
| 188 | + if !hasNextPage { | ||
| 189 | + self.tableView.mj_footer?.endRefreshingWithNoMoreData() | ||
| 190 | + self.tableView.reloadData() | ||
| 191 | + } | ||
| 192 | + } else { | ||
| 193 | + if self.tableView.mj_header == nil { | ||
| 194 | + self.tableView.mj_header = headerRefreshView | ||
| 195 | + } | ||
| 196 | + if self.tableView.mj_footer == nil { | ||
| 197 | + self.tableView.mj_footer = footerRefreshView | ||
| 198 | + } | ||
| 199 | + } | ||
| 200 | + if self.pageNum == 1 { | ||
| 201 | + self.playTheIndex(index: self.currentIndex) | ||
| 202 | + } | ||
| 203 | + } else { | ||
| 204 | + if self.tableView.mj_header != nil && self.tableView.mj_footer != nil { | ||
| 205 | + self.tableView.mj_footer?.endRefreshing() | ||
| 206 | + self.tableView.mj_header?.endRefreshing() | ||
| 207 | + } | ||
| 208 | + if self.dataArray.count == 0 { | ||
| 209 | + self.tableView.reloadEmptyDataSet() | ||
| 210 | + } | ||
| 211 | + } | ||
| 142 | } | 212 | } |
| 143 | } | 213 | } |
| 144 | 214 | ||
| @@ -152,12 +222,6 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -152,12 +222,6 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 152 | guard let self = self else { return } | 222 | guard let self = self else { return } |
| 153 | self.playVideo(at: indexPath) | 223 | self.playVideo(at: indexPath) |
| 154 | } | 224 | } |
| 155 | - // 如果是最后一行,去请求新数据 | ||
| 156 | - if index == dataArray.count - 1 { | ||
| 157 | - // 加载下一页数据 | ||
| 158 | - requestData() | ||
| 159 | - tableView.reloadData() | ||
| 160 | - } | ||
| 161 | } | 225 | } |
| 162 | 226 | ||
| 163 | override var shouldAutorotate: Bool { | 227 | override var shouldAutorotate: Bool { |
| @@ -181,10 +245,10 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -181,10 +245,10 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 181 | } | 245 | } |
| 182 | 246 | ||
| 183 | func playVideo(at indexPath: IndexPath) { | 247 | func playVideo(at indexPath: IndexPath) { |
| 184 | - let data: ShortVideoHomeTestModel = dataArray[indexPath.row] as! ShortVideoHomeTestModel | ||
| 185 | - self.player.playTheIndexPath(indexPath, assetURL: URL(string: data.videoUrl!)!) | 248 | + let data: CNLiveAlbumListModel = dataArray[indexPath.row] as! CNLiveAlbumListModel |
| 249 | + self.player.playTheIndexPath(indexPath, assetURL: URL(string: data.videoUrl)!) | ||
| 186 | controlView.resetControlView() | 250 | controlView.resetControlView() |
| 187 | - controlView.showCoverView(withUrl: data.poster!) | 251 | + controlView.showCoverView(withUrl: data.poster) |
| 188 | } | 252 | } |
| 189 | 253 | ||
| 190 | deinit { | 254 | deinit { |
| @@ -201,7 +265,12 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | @@ -201,7 +265,12 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele | ||
| 201 | extension CNLiveShortVideoViewController { | 265 | extension CNLiveShortVideoViewController { |
| 202 | 266 | ||
| 203 | func likeActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { | 267 | func likeActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { |
| 204 | - button.isSelected = !button.isSelected | 268 | + CNLiveShortVideoViewModel.requestRankWithLike(contentId: viewcell.homeModel.pid, contentTitle: viewcell.homeModel.title, contentSid: viewcell.homeModel.icon!.id, support: viewcell.homeModel.tool!.liked, tagName: viewcell.homeModel.tagName) {result, respStatue in |
| 269 | + if respStatue == .success { | ||
| 270 | + viewcell.homeModel.tool!.liked = !viewcell.homeModel.tool!.liked | ||
| 271 | + button.isSelected = viewcell.homeModel.tool!.liked | ||
| 272 | + } | ||
| 273 | + } | ||
| 205 | } | 274 | } |
| 206 | func commentActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { | 275 | func commentActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { |
| 207 | 276 | ||
| @@ -216,8 +285,10 @@ extension CNLiveShortVideoViewController { | @@ -216,8 +285,10 @@ extension CNLiveShortVideoViewController { | ||
| 216 | 285 | ||
| 217 | } | 286 | } |
| 218 | func listActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { | 287 | func listActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { |
| 219 | - CNLiveShortVideoContentListView.showVideoContentListView(result: { videoId in | ||
| 220 | - | 288 | + CNLiveShortVideoContentListView.showVideoContentListView(title: viewcell.homeModel.albumMsgModel!.albumName,dataArray: dataArray, result: {[weak self] listModel in |
| 289 | + guard let self = self else { return } | ||
| 290 | + let index = self.dataArray.index(of: listModel) as NSInteger | ||
| 291 | + self.playTheIndex(index: index) | ||
| 221 | }) | 292 | }) |
| 222 | } | 293 | } |
| 223 | func payActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { | 294 | func payActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { |
| @@ -227,8 +298,8 @@ extension CNLiveShortVideoViewController { | @@ -227,8 +298,8 @@ extension CNLiveShortVideoViewController { | ||
| 227 | guard let self = self else { return } | 298 | guard let self = self else { return } |
| 228 | payButton.stopAnimating() | 299 | payButton.stopAnimating() |
| 229 | for item in self.dataArray { | 300 | for item in self.dataArray { |
| 230 | - let homeModel = item as! ShortVideoHomeTestModel | ||
| 231 | - homeModel.isMoney = false | 301 | + let homeModel = item as! CNLiveAlbumListModel |
| 302 | + homeModel.product!.albumProductType = "0" | ||
| 232 | self.tableView.reloadData() | 303 | self.tableView.reloadData() |
| 233 | } | 304 | } |
| 234 | let index = self.dataArray.index(of: viewcell.homeModel as Any) | 305 | let index = self.dataArray.index(of: viewcell.homeModel as Any) |
| @@ -252,7 +323,7 @@ extension CNLiveShortVideoViewController { | @@ -252,7 +323,7 @@ extension CNLiveShortVideoViewController { | ||
| 252 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoBodyListViewCellIdentifier) as? CNLiveShortVideoListTableViewCell else { | 323 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoBodyListViewCellIdentifier) as? CNLiveShortVideoListTableViewCell else { |
| 253 | return CNLiveShortVideoListTableViewCell() | 324 | return CNLiveShortVideoListTableViewCell() |
| 254 | } | 325 | } |
| 255 | - cell.setupWithData(model: dataArray[indexPath.row] as! ShortVideoHomeTestModel) | 326 | + cell.setupWithData(model: dataArray[indexPath.row] as! CNLiveAlbumListModel) |
| 256 | cell.delegate = self | 327 | cell.delegate = self |
| 257 | return cell | 328 | return cell |
| 258 | } | 329 | } |
| @@ -261,6 +332,10 @@ extension CNLiveShortVideoViewController { | @@ -261,6 +332,10 @@ extension CNLiveShortVideoViewController { | ||
| 261 | self.playVideo(at: indexPath) | 332 | self.playVideo(at: indexPath) |
| 262 | } | 333 | } |
| 263 | 334 | ||
| 335 | + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { | ||
| 336 | + return UIImage(named: "short_video_default") | ||
| 337 | + } | ||
| 338 | + | ||
| 264 | func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { | 339 | func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { |
| 265 | scrollView.zf_scrollViewDidEndDecelerating() | 340 | scrollView.zf_scrollViewDidEndDecelerating() |
| 266 | } | 341 | } |
| @@ -285,3 +360,4 @@ extension CNLiveShortVideoViewController { | @@ -285,3 +360,4 @@ extension CNLiveShortVideoViewController { | ||
| 285 | self.playVideo(at: indexPath) | 360 | self.playVideo(at: indexPath) |
| 286 | } | 361 | } |
| 287 | } | 362 | } |
| 363 | + |
metaCode/Classes/Main/VideoPage/Model/CNLiveShortVideoCommentLayout.swift
0 → 100644
metaCode/Classes/Main/VideoPage/Model/CNLiveShortVideoHomeModel.swift
| @@ -7,51 +7,59 @@ | @@ -7,51 +7,59 @@ | ||
| 7 | 7 | ||
| 8 | import Foundation | 8 | import Foundation |
| 9 | 9 | ||
| 10 | -class ShortVideoHomeTestModel: BaseModel { | ||
| 11 | - var activityEndTime: String? = "" | ||
| 12 | - var address: String? = "" | ||
| 13 | - var colours: String? = "" | ||
| 14 | - var contentId: String? = "" | ||
| 15 | - var coordinate: String? = "" | ||
| 16 | - var duration: String? = "" | ||
| 17 | - var h5Url: String? = "" | ||
| 18 | - var shortTitle: String? = "" | ||
| 19 | - var height: Int? = 0 | ||
| 20 | - var isMoney: Bool? = false | ||
| 21 | - var identity: Int? = 0 | ||
| 22 | - var isHorizontalScreen: Int? = 0 | ||
| 23 | - var model: String? = "" | ||
| 24 | - var number: String? = "" | 10 | +//!!!: 评论相关 model |
| 11 | +class ShortVideoHomeCommentModel: BaseModel { | ||
| 12 | + var total_hd: Int? = 0 //总数 | ||
| 13 | + var hasNext: String? = "" | ||
| 14 | + var comments = [ShortVideoHomeCommentListModel]() | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +class ShortVideoHomeCommentListModel: BaseModel { | ||
| 18 | + var comment = ShortVideoHomeCommentFListModel() | ||
| 19 | + var replyData = ShortVideoHomeCommentRListModel() | ||
| 20 | +} | ||
| 21 | +//评论数据 | ||
| 22 | +class ShortVideoHomeCommentFListModel: BaseModel { | ||
| 23 | + var commentId: String? = "" | ||
| 25 | var pid: String? = "" | 24 | var pid: String? = "" |
| 26 | - var poster: String? = "" | ||
| 27 | - var productId: String? = "" | ||
| 28 | - var productType: String? = "" | ||
| 29 | - var shareUrl: String? = "" | ||
| 30 | - var source: Int? = 0 | ||
| 31 | - var sourceDescribe: String? = "" | ||
| 32 | - var sourceName: String? = "" | ||
| 33 | - var subTitle: String? = "" | ||
| 34 | - var supervision: String? = "" | ||
| 35 | - var tagId: String? = "" | ||
| 36 | - var tagName: String? = "" | ||
| 37 | - var thirdUrl: String? = "" | ||
| 38 | - var time: Int? = 0 | ||
| 39 | - var timeString: String? = "" | ||
| 40 | - var title: String? = "" | ||
| 41 | - var videoType: Int? = 0 | ||
| 42 | - var videoUrl: String? = "" | ||
| 43 | - var width: Int? = 0 | ||
| 44 | - var showStatue: Int? = 0 | ||
| 45 | - var witnessId: String? = "" | ||
| 46 | - var statue: String? = "" | ||
| 47 | - var pids: [String]? = [] | ||
| 48 | - var icon = ShortVideoHomeTestIconModel() | 25 | + var uid: String? = "" |
| 26 | + var nick: String? = "" | ||
| 27 | + var facepath: String? = "" | ||
| 28 | + var content: String? = "" | ||
| 29 | + var created_at: String? = "" | ||
| 30 | + var praise: String? = "" | ||
| 31 | + var plat: String? = "" | ||
| 32 | + var isOffical: Bool? = false | ||
| 33 | + var model: String? = "" | ||
| 34 | + var spId: String? = "" | ||
| 35 | + var seqId: Int? = 0 | ||
| 36 | + var topicId: String? = "" | ||
| 37 | + var praiseCount: Int? = 0 | ||
| 38 | + var isPraised: Bool? = false | ||
| 39 | + var icon: String? = "" | ||
| 40 | +} | ||
| 41 | +//回复数据 | ||
| 42 | +class ShortVideoHomeCommentRListModel: BaseModel { | ||
| 43 | + var total_hd: Int? = 0 //总数 | ||
| 44 | + var replys = [ShortVideoHomeCommentRListItemModel]() | ||
| 49 | } | 45 | } |
| 50 | 46 | ||
| 51 | -class ShortVideoHomeTestIconModel: BaseModel { | ||
| 52 | - var face: String? = "" | ||
| 53 | - var focused: Bool? = false | ||
| 54 | - var idField: String? = "" | ||
| 55 | - var name: String? = "" | ||
| 56 | - var type: String? = "" | 47 | +class ShortVideoHomeCommentRListItemModel: BaseModel { |
| 48 | + var praiseCount: Int? = 0 | ||
| 49 | + var isPraised: Bool? = false | ||
| 50 | + var commentId: String? = "" | ||
| 51 | + var replyId: String? = "" | ||
| 52 | + var topicId: String? = "" | ||
| 53 | + var created_at: String? = "" | ||
| 54 | + var plat: String? = "" | ||
| 55 | + var fromFace: String? = "" | ||
| 56 | + var fromSid: String? = "" | ||
| 57 | + var fromNick: String? = "" | ||
| 58 | + var toSid: String? = "" | ||
| 59 | + var toNick: String? = "" | ||
| 60 | + var toFace: String? = "" | ||
| 61 | + var seqId: Int? = 0 | ||
| 62 | + var content: String? = "" | ||
| 63 | + var level: Int? = 0 | ||
| 64 | + var icon: String? = "" | ||
| 57 | } | 65 | } |
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoCommentListView.swift
0 → 100644
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoContentListView.swift
| @@ -7,9 +7,21 @@ | @@ -7,9 +7,21 @@ | ||
| 7 | 7 | ||
| 8 | import Foundation | 8 | import Foundation |
| 9 | 9 | ||
| 10 | -typealias CloseVideoListResultBlock = (_ videoId: Any) ->Void | 10 | +typealias CloseVideoListResultBlock = (_ listModel: Any) ->Void |
| 11 | class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewDataSource { | 11 | class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewDataSource { |
| 12 | 12 | ||
| 13 | + lazy var grayMaskView: UIView = { | ||
| 14 | + let grayMaskView = UIView() | ||
| 15 | + grayMaskView.backgroundColor = UIColor.black.withAlphaComponent(0.2) | ||
| 16 | + return grayMaskView | ||
| 17 | + }() | ||
| 18 | + | ||
| 19 | + lazy var contentView: UIView = { | ||
| 20 | + let view = UIView.init() | ||
| 21 | + view.backgroundColor = HexColor("#010101") | ||
| 22 | + return view | ||
| 23 | + }() | ||
| 24 | + | ||
| 13 | lazy var closeButton: UIButton = { | 25 | lazy var closeButton: UIButton = { |
| 14 | let button = UIButton(type: .custom) | 26 | let button = UIButton(type: .custom) |
| 15 | button.setImage(UIImage(named: "short_video_close"), for: .normal) | 27 | button.setImage(UIImage(named: "short_video_close"), for: .normal) |
| @@ -41,7 +53,7 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | @@ -41,7 +53,7 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | ||
| 41 | tableView.dataSource = self | 53 | tableView.dataSource = self |
| 42 | tableView.delegate = self | 54 | tableView.delegate = self |
| 43 | tableView.rowHeight = 90 | 55 | tableView.rowHeight = 90 |
| 44 | - tableView.estimatedRowHeight = 0 | 56 | + tableView.estimatedRowHeight = 90 |
| 45 | tableView.estimatedSectionFooterHeight = 0 | 57 | tableView.estimatedSectionFooterHeight = 0 |
| 46 | tableView.estimatedSectionHeaderHeight = 0 | 58 | tableView.estimatedSectionHeaderHeight = 0 |
| 47 | tableView.backgroundColor = HexColor("#010101") | 59 | tableView.backgroundColor = HexColor("#010101") |
| @@ -54,21 +66,38 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | @@ -54,21 +66,38 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | ||
| 54 | return tableView | 66 | return tableView |
| 55 | }() | 67 | }() |
| 56 | 68 | ||
| 69 | + lazy var dataSource: NSMutableArray = { | ||
| 70 | + let array = NSMutableArray() | ||
| 71 | + return array | ||
| 72 | + }() | ||
| 73 | + | ||
| 74 | + var resultBlock: CloseVideoListResultBlock! | ||
| 75 | + | ||
| 57 | override init(frame: CGRect) { | 76 | override init(frame: CGRect) { |
| 58 | super.init(frame: frame) | 77 | super.init(frame: frame) |
| 59 | 78 | ||
| 60 | - addSubview(closeButton) | 79 | + addSubview(grayMaskView) |
| 80 | + grayMaskView.snp.makeConstraints { make in | ||
| 81 | + make.edges.equalToSuperview() | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + grayMaskView.addSubview(contentView) | ||
| 85 | + contentView.snp.makeConstraints { make in | ||
| 86 | + make.top.equalTo(250) | ||
| 87 | + make.right.left.bottom.equalToSuperview() | ||
| 88 | + } | ||
| 89 | + contentView.addSubview(closeButton) | ||
| 61 | closeButton.snp.makeConstraints { make in | 90 | closeButton.snp.makeConstraints { make in |
| 62 | make.right.equalToSuperview().offset(-15) | 91 | make.right.equalToSuperview().offset(-15) |
| 63 | make.top.equalToSuperview().offset(15) | 92 | make.top.equalToSuperview().offset(15) |
| 64 | make.size.equalTo(30) | 93 | make.size.equalTo(30) |
| 65 | } | 94 | } |
| 66 | - addSubview(titleLabel) | 95 | + contentView.addSubview(titleLabel) |
| 67 | titleLabel.snp.makeConstraints { make in | 96 | titleLabel.snp.makeConstraints { make in |
| 68 | make.top.left.equalToSuperview().offset(20) | 97 | make.top.left.equalToSuperview().offset(20) |
| 69 | make.right.equalTo(closeButton.snp.left).offset(-10) | 98 | make.right.equalTo(closeButton.snp.left).offset(-10) |
| 70 | } | 99 | } |
| 71 | - addSubview(lineLabel) | 100 | + contentView.addSubview(lineLabel) |
| 72 | lineLabel.snp.makeConstraints { make in | 101 | lineLabel.snp.makeConstraints { make in |
| 73 | make.top.equalTo(closeButton.snp.bottom).offset(15) | 102 | make.top.equalTo(closeButton.snp.bottom).offset(15) |
| 74 | make.centerX.equalToSuperview() | 103 | make.centerX.equalToSuperview() |
| @@ -76,32 +105,41 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | @@ -76,32 +105,41 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD | ||
| 76 | make.right.equalToSuperview().offset(-10) | 105 | make.right.equalToSuperview().offset(-10) |
| 77 | make.height.equalTo(1) | 106 | make.height.equalTo(1) |
| 78 | } | 107 | } |
| 79 | - addSubview(tableView) | 108 | + contentView.addSubview(tableView) |
| 80 | tableView.snp.makeConstraints { make in | 109 | tableView.snp.makeConstraints { make in |
| 81 | make.bottom.left.right.equalToSuperview() | 110 | make.bottom.left.right.equalToSuperview() |
| 82 | make.top.equalTo(lineLabel.snp.bottom).offset(10) | 111 | make.top.equalTo(lineLabel.snp.bottom).offset(10) |
| 83 | } | 112 | } |
| 84 | } | 113 | } |
| 85 | 114 | ||
| 115 | + func setupWithDataSource(title: String,dataArray: NSMutableArray) { | ||
| 116 | + dataSource = dataArray | ||
| 117 | + titleLabel.text = title | ||
| 118 | + self.tableView.reloadData() | ||
| 119 | + } | ||
| 120 | + | ||
| 86 | required init?(coder: NSCoder) { | 121 | required init?(coder: NSCoder) { |
| 87 | fatalError("init(coder:) has not been implemented") | 122 | fatalError("init(coder:) has not been implemented") |
| 88 | } | 123 | } |
| 89 | 124 | ||
| 125 | + deinit { | ||
| 126 | + print("弹出界面销毁") | ||
| 127 | + } | ||
| 90 | 128 | ||
| 91 | @objc func closeMethod() { | 129 | @objc func closeMethod() { |
| 92 | removeFromSuperview() | 130 | removeFromSuperview() |
| 93 | } | 131 | } |
| 94 | 132 | ||
| 95 | - static public func showVideoContentListView(result: @escaping CloseVideoListResultBlock) { | 133 | + static public func showVideoContentListView(title: String,dataArray: NSMutableArray,result: @escaping CloseVideoListResultBlock) { |
| 96 | 134 | ||
| 97 | let pickerView = CNLiveShortVideoContentListView.init(frame: CGRect.zero) | 135 | let pickerView = CNLiveShortVideoContentListView.init(frame: CGRect.zero) |
| 98 | - pickerView.backgroundColor = HexColor("#010101") | 136 | + pickerView.resultBlock = result |
| 137 | + pickerView.setupWithDataSource(title: title,dataArray: dataArray) | ||
| 99 | 138 | ||
| 100 | let delegate = UIApplication.shared.delegate as! AppDelegate | 139 | let delegate = UIApplication.shared.delegate as! AppDelegate |
| 101 | delegate.window?.addSubview(pickerView) | 140 | delegate.window?.addSubview(pickerView) |
| 102 | pickerView.snp.makeConstraints { make in | 141 | pickerView.snp.makeConstraints { make in |
| 103 | - make.top.equalTo(250) | ||
| 104 | - make.right.left.bottom.equalToSuperview() | 142 | + make.edges.equalToSuperview() |
| 105 | } | 143 | } |
| 106 | delegate.window?.layoutIfNeeded() | 144 | delegate.window?.layoutIfNeeded() |
| 107 | pickerView.alpha = 0 | 145 | pickerView.alpha = 0 |
| @@ -117,65 +155,85 @@ extension CNLiveShortVideoContentListView { | @@ -117,65 +155,85 @@ extension CNLiveShortVideoContentListView { | ||
| 117 | return 1 | 155 | return 1 |
| 118 | } | 156 | } |
| 119 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | 157 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| 120 | - return 20 | 158 | + return dataSource.count |
| 121 | } | 159 | } |
| 122 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | 160 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| 123 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoContentListViewCellIdentifier) as? CNLiveShortVideoContentListTableViewCell else { | 161 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoContentListViewCellIdentifier) as? CNLiveShortVideoContentListTableViewCell else { |
| 124 | return CNLiveShortVideoContentListTableViewCell() | 162 | return CNLiveShortVideoContentListTableViewCell() |
| 125 | } | 163 | } |
| 164 | + cell.setupWithDataModel(listModel: dataSource[indexPath.row] as! CNLiveAlbumListModel) | ||
| 126 | return cell | 165 | return cell |
| 127 | } | 166 | } |
| 128 | - | 167 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 168 | + self.resultBlock(dataSource[indexPath.row] as! CNLiveAlbumListModel) | ||
| 169 | + closeMethod() | ||
| 170 | + } | ||
| 129 | } | 171 | } |
| 130 | 172 | ||
| 131 | class CNLiveShortVideoContentListTableViewCell: UITableViewCell { | 173 | class CNLiveShortVideoContentListTableViewCell: UITableViewCell { |
| 132 | 174 | ||
| 133 | - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | ||
| 134 | - super.init(style: style, reuseIdentifier: reuseIdentifier) | ||
| 135 | - contentView.backgroundColor = .clear | ||
| 136 | - backgroundColor = .clear | ||
| 137 | - selectionStyle = .none | ||
| 138 | - | 175 | + lazy var iconView: UIImageView = { |
| 139 | let imageView = UIImageView.init() | 176 | let imageView = UIImageView.init() |
| 140 | - imageView.image = UIImage(named: "mine_auth_result_header_failer") | 177 | + imageView.image = UIImage(named: "short_video_default") |
| 141 | imageView.contentMode = .scaleAspectFill | 178 | imageView.contentMode = .scaleAspectFill |
| 142 | imageView.layer.cornerRadius = 5 | 179 | imageView.layer.cornerRadius = 5 |
| 143 | imageView.layer.masksToBounds = true | 180 | imageView.layer.masksToBounds = true |
| 144 | imageView.clipsToBounds = true | 181 | imageView.clipsToBounds = true |
| 145 | - contentView.addSubview(imageView) | ||
| 146 | - imageView.snp.makeConstraints { make in | ||
| 147 | - make.left.top.equalToSuperview().offset(20) | ||
| 148 | - make.width.equalTo(50) | ||
| 149 | - make.height.equalTo(70) | ||
| 150 | - } | ||
| 151 | - | ||
| 152 | - let paragraphStyle = NSMutableParagraphStyle() | ||
| 153 | - paragraphStyle.lineSpacing = 6 | 182 | + return imageView |
| 183 | + }() | ||
| 184 | + | ||
| 185 | + lazy var titleLabel: UILabel = { | ||
| 154 | let titleLabel = UILabel.init() | 186 | let titleLabel = UILabel.init() |
| 155 | - titleLabel.attributedText = NSAttributedString(string: "第四集 我们都不知道,所做的哪一个选择会让命运的齿轮开始转动", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]) | ||
| 156 | titleLabel.textColor = .white | 187 | titleLabel.textColor = .white |
| 157 | titleLabel.lineBreakMode = .byTruncatingTail | 188 | titleLabel.lineBreakMode = .byTruncatingTail |
| 158 | titleLabel.numberOfLines = 2 | 189 | titleLabel.numberOfLines = 2 |
| 159 | titleLabel.font = medium_adapt_font(pointSize: 12) | 190 | titleLabel.font = medium_adapt_font(pointSize: 12) |
| 191 | + return titleLabel | ||
| 192 | + }() | ||
| 193 | + | ||
| 194 | + lazy var timeLabel: UILabel = { | ||
| 195 | + let timeLabel = UILabel.init() | ||
| 196 | + timeLabel.textColor = .white | ||
| 197 | + timeLabel.font = light_adapt_font(pointSize: 13) | ||
| 198 | + return timeLabel | ||
| 199 | + }() | ||
| 200 | + | ||
| 201 | + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | ||
| 202 | + super.init(style: style, reuseIdentifier: reuseIdentifier) | ||
| 203 | + contentView.backgroundColor = .clear | ||
| 204 | + backgroundColor = .clear | ||
| 205 | + selectionStyle = .none | ||
| 206 | + | ||
| 207 | + | ||
| 208 | + contentView.addSubview(iconView) | ||
| 209 | + iconView.snp.makeConstraints { make in | ||
| 210 | + make.left.top.equalToSuperview().offset(20) | ||
| 211 | + make.width.equalTo(50) | ||
| 212 | + make.height.equalTo(70) | ||
| 213 | + } | ||
| 160 | contentView.addSubview(titleLabel) | 214 | contentView.addSubview(titleLabel) |
| 161 | titleLabel.snp.makeConstraints { make in | 215 | titleLabel.snp.makeConstraints { make in |
| 162 | - make.left.equalTo(imageView.snp.right).offset(10) | 216 | + make.left.equalTo(iconView.snp.right).offset(10) |
| 163 | make.top.equalToSuperview().offset(20) | 217 | make.top.equalToSuperview().offset(20) |
| 164 | make.right.equalToSuperview().offset(-20) | 218 | make.right.equalToSuperview().offset(-20) |
| 165 | } | 219 | } |
| 166 | - | ||
| 167 | - let timeLabel = UILabel.init() | ||
| 168 | - timeLabel.text = "04:45" | ||
| 169 | - timeLabel.textColor = .white | ||
| 170 | - timeLabel.font = light_adapt_font(pointSize: 13) | ||
| 171 | contentView.addSubview(timeLabel) | 220 | contentView.addSubview(timeLabel) |
| 172 | timeLabel.snp.makeConstraints { make in | 221 | timeLabel.snp.makeConstraints { make in |
| 173 | - make.left.equalTo(imageView.snp.right).offset(10) | ||
| 174 | - make.bottom.equalTo(imageView.snp.bottom) | 222 | + make.left.equalTo(iconView.snp.right).offset(10) |
| 223 | + make.bottom.equalTo(iconView.snp.bottom) | ||
| 175 | make.right.equalToSuperview().offset(-20) | 224 | make.right.equalToSuperview().offset(-20) |
| 176 | } | 225 | } |
| 177 | } | 226 | } |
| 178 | 227 | ||
| 228 | + func setupWithDataModel(listModel: CNLiveAlbumListModel) { | ||
| 229 | + iconView.kf.indicatorType = .activity | ||
| 230 | + iconView.kf.setImage(with: URL(string: listModel.poster), placeholder: UIImage(named: "short_video_default")) | ||
| 231 | + let paragraphStyle = NSMutableParagraphStyle() | ||
| 232 | + paragraphStyle.lineSpacing = 6 | ||
| 233 | + titleLabel.attributedText = NSAttributedString(string: listModel.title, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle, ]) | ||
| 234 | + timeLabel.text = listModel.duration | ||
| 235 | + } | ||
| 236 | + | ||
| 179 | required init?(coder: NSCoder) { | 237 | required init?(coder: NSCoder) { |
| 180 | fatalError("init(coder:) has not been implemented") | 238 | fatalError("init(coder:) has not been implemented") |
| 181 | } | 239 | } |
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoCustomControlView.swift deleted
100644 → 0
| 1 | -// | ||
| 2 | -// CNLiveShortVideoCustomControlView.swift | ||
| 3 | -// metaCode | ||
| 4 | -// | ||
| 5 | -// Created by open on 2024/1/5. | ||
| 6 | -// | ||
| 7 | - | ||
| 8 | -import Foundation | ||
| 9 | -import ZFPlayer | ||
| 10 | - | ||
| 11 | -class CNLiveShortVideoCustomControlView: UIView, ZFPlayerMediaControl, ZFSliderViewDelegate { | ||
| 12 | - | ||
| 13 | - var player: ZFPlayerController? | ||
| 14 | - | ||
| 15 | - var topToolView: UIView = { | ||
| 16 | - let view = UIView() | ||
| 17 | - let image = UIImage(named: "ZFPlayer_top_shadow") | ||
| 18 | - view.layer.contents = image?.cgImage | ||
| 19 | - return view | ||
| 20 | - }() | ||
| 21 | - | ||
| 22 | - var titleLabel: UILabel = { | ||
| 23 | - let label = UILabel() | ||
| 24 | - label.textColor = .white | ||
| 25 | - label.font = UIFont.systemFont(ofSize: 15.0) | ||
| 26 | - return label | ||
| 27 | - }() | ||
| 28 | - | ||
| 29 | - var bottomToolView: UIView = { | ||
| 30 | - let view = UIView() | ||
| 31 | - let image = UIImage(named: "ZFPlayer_bottom_shadow") | ||
| 32 | - view.layer.contents = image?.cgImage | ||
| 33 | - return view | ||
| 34 | - }() | ||
| 35 | - | ||
| 36 | - var playOrPauseBtn: UIButton = { | ||
| 37 | - let button = UIButton(type: .custom) | ||
| 38 | - button.setImage(UIImage(named: "new_allPlay_44x44_"), for: .normal) | ||
| 39 | - button.setImage(UIImage(named: "new_allPause_44x44_"), for: .selected) | ||
| 40 | - return button | ||
| 41 | - }() | ||
| 42 | - | ||
| 43 | - var currentTimeLabel: UILabel = { | ||
| 44 | - let label = UILabel() | ||
| 45 | - label.textColor = .white | ||
| 46 | - label.font = UIFont.systemFont(ofSize: 14.0) | ||
| 47 | - label.textAlignment = .center | ||
| 48 | - return label | ||
| 49 | - }() | ||
| 50 | - | ||
| 51 | - var slider: ZFSliderView = { | ||
| 52 | - let slider = ZFSliderView() | ||
| 53 | - slider.maximumTrackTintColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.8) | ||
| 54 | - slider.bufferTrackTintColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.5) | ||
| 55 | - slider.minimumTrackTintColor = .white | ||
| 56 | - slider.setThumbImage(UIImage(named: "ZFPlayer_slider"), for: .normal) | ||
| 57 | - slider.sliderHeight = 2 | ||
| 58 | - return slider | ||
| 59 | - }() | ||
| 60 | - | ||
| 61 | - var totalTimeLabel: UILabel = { | ||
| 62 | - let label = UILabel() | ||
| 63 | - label.textColor = .white | ||
| 64 | - label.font = UIFont.systemFont(ofSize: 14.0) | ||
| 65 | - label.textAlignment = .center | ||
| 66 | - return label | ||
| 67 | - }() | ||
| 68 | - | ||
| 69 | - var fullScreenBtn: UIButton = { | ||
| 70 | - let button = UIButton(type: .custom) | ||
| 71 | - button.setImage(UIImage(named: "ZFPlayer_fullscreen"), for: .normal) | ||
| 72 | - return button | ||
| 73 | - }() | ||
| 74 | - | ||
| 75 | - var coverImageView: UIImageView = { | ||
| 76 | - let imageView = UIImageView() | ||
| 77 | - imageView.isUserInteractionEnabled = true | ||
| 78 | - imageView.contentMode = .scaleAspectFit | ||
| 79 | - return imageView | ||
| 80 | - }() | ||
| 81 | - | ||
| 82 | - var bottomPgrogress: ZFSliderView = { | ||
| 83 | - let slider = ZFSliderView() | ||
| 84 | - slider.maximumTrackTintColor = .clear | ||
| 85 | - slider.minimumTrackTintColor = .white | ||
| 86 | - slider.bufferTrackTintColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.5) | ||
| 87 | - slider.sliderHeight = 1 | ||
| 88 | - slider.isHideSliderBlock = false | ||
| 89 | - return slider | ||
| 90 | - }() | ||
| 91 | - | ||
| 92 | - override init(frame: CGRect) { | ||
| 93 | - super.init(frame: frame) | ||
| 94 | - addSubview(topToolView) | ||
| 95 | - addSubview(bottomToolView) | ||
| 96 | - addSubview(playOrPauseBtn) | ||
| 97 | - topToolView.addSubview(titleLabel) | ||
| 98 | - bottomToolView.addSubview(currentTimeLabel) | ||
| 99 | - bottomToolView.addSubview(slider) | ||
| 100 | - bottomToolView.addSubview(totalTimeLabel) | ||
| 101 | - bottomToolView.addSubview(fullScreenBtn) | ||
| 102 | - addSubview(bottomPgrogress) | ||
| 103 | -// addSubview(activity) | ||
| 104 | - | ||
| 105 | -// autoFadeTimeInterval = 0.2 | ||
| 106 | -// autoHiddenTimeInterval = 2.5 | ||
| 107 | - | ||
| 108 | - // 设置子控件的响应事件 | ||
| 109 | - makeSubViewsAction() | ||
| 110 | - | ||
| 111 | -// resetControlView() | ||
| 112 | - clipsToBounds = true | ||
| 113 | - } | ||
| 114 | - | ||
| 115 | - func makeSubViewsAction() { | ||
| 116 | - playOrPauseBtn.addTarget(self, action: #selector(playPauseButtonClickAction), for: .touchUpInside) | ||
| 117 | - fullScreenBtn.addTarget(self, action: #selector(fullScreenButtonClickAction), for: .touchUpInside) | ||
| 118 | - } | ||
| 119 | - | ||
| 120 | - | ||
| 121 | - | ||
| 122 | - /////////////// ZFSliderViewDelegate | ||
| 123 | - func sliderTouchBegan(_ value: Float) { | ||
| 124 | - slider.isdragging = true | ||
| 125 | - } | ||
| 126 | - | ||
| 127 | - func sliderTouchEnded(_ value: Float) { | ||
| 128 | - guard player?.totalTime ?? 0.0 > 0 else { | ||
| 129 | - slider.isdragging = false | ||
| 130 | - return | ||
| 131 | - } | ||
| 132 | - | ||
| 133 | - player?.seek(toTime: (player?.totalTime ?? 0.0) * TimeInterval(value), completionHandler: {[weak self] finished in | ||
| 134 | - guard let self = self else { return } | ||
| 135 | - if finished { | ||
| 136 | - self.slider.isdragging = false | ||
| 137 | - } | ||
| 138 | - }) | ||
| 139 | - } | ||
| 140 | - | ||
| 141 | - func sliderValueChanged(_ value: Float) { | ||
| 142 | - guard player?.totalTime ?? 0.0 > 0 else { | ||
| 143 | - slider.value = 0 | ||
| 144 | - return | ||
| 145 | - } | ||
| 146 | - | ||
| 147 | - slider.isdragging = true | ||
| 148 | - let currentTimeString = ZFUtilities.convertTimeSecond(Int((player?.totalTime ?? 0.0) * TimeInterval(value))) | ||
| 149 | - currentTimeLabel.text = currentTimeString | ||
| 150 | - } | ||
| 151 | - | ||
| 152 | - func sliderTapped(_ value: Float) { | ||
| 153 | - guard player?.totalTime ?? 0.0 > 0 else { | ||
| 154 | - slider.isdragging = false | ||
| 155 | - slider.value = 0 | ||
| 156 | - return | ||
| 157 | - } | ||
| 158 | - | ||
| 159 | - slider.isdragging = true | ||
| 160 | - player?.seek(toTime: (player?.totalTime ?? 0.0) * TimeInterval(value), completionHandler: { [weak self] finished in | ||
| 161 | - guard let self = self else { return } | ||
| 162 | - if finished { | ||
| 163 | - slider.isdragging = false | ||
| 164 | - player?.currentPlayerManager.play() | ||
| 165 | - } | ||
| 166 | - }) | ||
| 167 | - } | ||
| 168 | - | ||
| 169 | - ////////////action | ||
| 170 | - @objc func playPauseButtonClickAction(_ sender: UIButton) { | ||
| 171 | - playOrPause() | ||
| 172 | - } | ||
| 173 | - | ||
| 174 | - @objc func fullScreenButtonClickAction(_ sender: UIButton) { | ||
| 175 | - self.player?.enterFullScreen(!self.player!.isFullScreen, animated: true) | ||
| 176 | - } | ||
| 177 | - | ||
| 178 | - private func playOrPause() { | ||
| 179 | - self.playOrPauseBtn.isSelected = !self.playOrPauseBtn.isSelected | ||
| 180 | - self.playOrPauseBtn.isSelected ? self.player?.currentPlayerManager.play(): self.player?.currentPlayerManager.pause() | ||
| 181 | - } | ||
| 182 | - | ||
| 183 | - private func playBtnSelectedState(selected: Bool) { | ||
| 184 | - self.playOrPauseBtn.isSelected = selected | ||
| 185 | - } | ||
| 186 | - | ||
| 187 | - | ||
| 188 | - ///////private | ||
| 189 | - func resetControlView() { | ||
| 190 | - self.bottomToolView.alpha = 1 | ||
| 191 | - self.slider.value = 0 | ||
| 192 | - self.slider.bufferValue = 0 | ||
| 193 | - self.currentTimeLabel.text = "00:00" | ||
| 194 | - self.totalTimeLabel.text = "00:00" | ||
| 195 | - self.backgroundColor = .clear | ||
| 196 | - self.playOrPauseBtn.isSelected = true | ||
| 197 | - self.titleLabel.text = "" | ||
| 198 | - } | ||
| 199 | - | ||
| 200 | -// func showControlView() { | ||
| 201 | -// self.topToolView.alpha = 1 | ||
| 202 | -// self.bottomToolView.alpha = 1 | ||
| 203 | -// self.isShow = true | ||
| 204 | -// self.topToolView.zf_y = 0 | ||
| 205 | -// self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height | ||
| 206 | -// self.playOrPauseBtn.alpha = 1 | ||
| 207 | -// self.player.statusBarHidden = false | ||
| 208 | -// } | ||
| 209 | - | ||
| 210 | - required init?(coder: NSCoder) { | ||
| 211 | - super.init(coder: coder) | ||
| 212 | - // Initialization code... | ||
| 213 | - } | ||
| 214 | -} |
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoListTableViewCell.swift
| @@ -29,7 +29,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | @@ -29,7 +29,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | ||
| 29 | label.textAlignment = .left | 29 | label.textAlignment = .left |
| 30 | label.numberOfLines = 1 | 30 | label.numberOfLines = 1 |
| 31 | label.lineBreakMode = .byTruncatingTail | 31 | label.lineBreakMode = .byTruncatingTail |
| 32 | - label.text = "爱得供养" | ||
| 33 | return label | 32 | return label |
| 34 | }() | 33 | }() |
| 35 | 34 | ||
| @@ -40,7 +39,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | @@ -40,7 +39,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | ||
| 40 | label.textAlignment = .left | 39 | label.textAlignment = .left |
| 41 | label.numberOfLines = 3 | 40 | label.numberOfLines = 3 |
| 42 | label.lineBreakMode = .byTruncatingTail | 41 | label.lineBreakMode = .byTruncatingTail |
| 43 | - label.text = "在 Swift 中,CGRect 的属性和方法名通常是小写字母开头的驼峰命名法。确保在 Swift 中使用正确的命名规范和语法。这段 Swift 代码与原始的 Objective-C 代码逻辑相同,只是在语法和命名上进行了一些调整。" | ||
| 44 | return label | 42 | return label |
| 45 | }() | 43 | }() |
| 46 | 44 | ||
| @@ -50,21 +48,18 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | @@ -50,21 +48,18 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | ||
| 50 | label.font = semibold_adapt_font(pointSize: 15) | 48 | label.font = semibold_adapt_font(pointSize: 15) |
| 51 | label.textAlignment = .center | 49 | label.textAlignment = .center |
| 52 | label.numberOfLines = 0 | 50 | label.numberOfLines = 0 |
| 53 | - label.text = "当前内容需付费观看" | ||
| 54 | label.isHidden = true | 51 | label.isHidden = true |
| 55 | return label | 52 | return label |
| 56 | }() | 53 | }() |
| 57 | 54 | ||
| 58 | lazy var listBtn: UIButton = { | 55 | lazy var listBtn: UIButton = { |
| 59 | let button = UIButton(type: .custom) | 56 | let button = UIButton(type: .custom) |
| 60 | - button.setTitle("爱的供养·45集", for: .normal) | ||
| 61 | button.setTitleColor(.white, for: .normal) | 57 | button.setTitleColor(.white, for: .normal) |
| 62 | button.contentHorizontalAlignment = .left | 58 | button.contentHorizontalAlignment = .left |
| 63 | button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0) | 59 | button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0) |
| 64 | button.titleLabel?.textAlignment = .left | 60 | button.titleLabel?.textAlignment = .left |
| 65 | button.titleLabel?.lineBreakMode = .byTruncatingTail | 61 | button.titleLabel?.lineBreakMode = .byTruncatingTail |
| 66 | button.titleLabel?.font = semibold_adapt_font(pointSize: 15) | 62 | button.titleLabel?.font = semibold_adapt_font(pointSize: 15) |
| 67 | - button.addTarget(self, action: #selector(likeMothod), for: .touchUpInside) | ||
| 68 | button.layer.cornerRadius = 10 | 63 | button.layer.cornerRadius = 10 |
| 69 | button.layer.masksToBounds = true | 64 | button.layer.masksToBounds = true |
| 70 | button.backgroundColor = HexColor("#414141") | 65 | button.backgroundColor = HexColor("#414141") |
| @@ -146,10 +141,11 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | @@ -146,10 +141,11 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | ||
| 146 | coverImageView.isUserInteractionEnabled = true | 141 | coverImageView.isUserInteractionEnabled = true |
| 147 | coverImageView.tag = 100 | 142 | coverImageView.tag = 100 |
| 148 | coverImageView.contentMode = .scaleAspectFit | 143 | coverImageView.contentMode = .scaleAspectFit |
| 144 | + coverImageView.image = UIImage(named: "short_video_default") | ||
| 149 | return coverImageView | 145 | return coverImageView |
| 150 | }() | 146 | }() |
| 151 | 147 | ||
| 152 | - var homeModel: ShortVideoHomeTestModel! | 148 | + var homeModel: CNLiveAlbumListModel! |
| 153 | weak var delegate: CNLiveShortVideoListTableViewCellDelegate! | 149 | weak var delegate: CNLiveShortVideoListTableViewCellDelegate! |
| 154 | 150 | ||
| 155 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | 151 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { |
| @@ -172,10 +168,26 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | @@ -172,10 +168,26 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { | ||
| 172 | contentView.addSubview(payView) | 168 | contentView.addSubview(payView) |
| 173 | } | 169 | } |
| 174 | 170 | ||
| 175 | - func setupWithData(model: ShortVideoHomeTestModel) { | 171 | + func setupWithData(model: CNLiveAlbumListModel) { |
| 176 | homeModel = model | 172 | homeModel = model |
| 177 | coverImageView.kf.indicatorType = .activity | 173 | coverImageView.kf.indicatorType = .activity |
| 178 | - coverImageView.kf.setImage(with: URL(string: model.icon.face!), placeholder: UIImage(named: "short_video_default")) | 174 | + coverImageView.kf.setImage(with: URL(string: model.poster), placeholder: UIImage(named: "short_video_default")) |
| 175 | + iconBtn.kf.setImage(with: URL(string: model.icon!.face), for: .normal) | ||
| 176 | + likeBtn.setTitle(model.tool?.likesNum, for: .normal) | ||
| 177 | + commentBtn.setTitle(model.tool?.commentsNum, for: .normal) | ||
| 178 | + shareBtn.setTitle(model.tool?.shareNum, for: .normal) | ||
| 179 | + likeBtn.isSelected = model.tool!.liked | ||
| 180 | + titleLabel.text = model.shortTitle | ||
| 181 | + descLabel.text = model.title | ||
| 182 | + listBtn.setTitle(model.albumMsgModel?.albumName, for: .normal) | ||
| 183 | + | ||
| 184 | + let imageV: UIImageView = payView.viewWithTag(1000) as! UIImageView | ||
| 185 | + imageV.kf.indicatorType = .activity | ||
| 186 | + imageV.kf.setImage(with: URL(string: model.poster)) | ||
| 187 | + let titleL: UILabel = payView.viewWithTag(1001) as! UILabel | ||
| 188 | + titleL.text = model.title | ||
| 189 | + let timeL: UILabel = payView.viewWithTag(1002) as! UILabel | ||
| 190 | + timeL.text = model.duration | ||
| 179 | } | 191 | } |
| 180 | 192 | ||
| 181 | override func layoutSubviews() { | 193 | override func layoutSubviews() { |
| @@ -321,12 +333,11 @@ extension CNLiveShortVideoListTableViewCell { | @@ -321,12 +333,11 @@ extension CNLiveShortVideoListTableViewCell { | ||
| 321 | view.layer.masksToBounds = true | 333 | view.layer.masksToBounds = true |
| 322 | 334 | ||
| 323 | let imageView = UIImageView.init() | 335 | let imageView = UIImageView.init() |
| 324 | - imageView.image = UIImage(named: "mine_auth_result_header_failer") | ||
| 325 | imageView.contentMode = .scaleAspectFill | 336 | imageView.contentMode = .scaleAspectFill |
| 326 | imageView.layer.cornerRadius = 5 | 337 | imageView.layer.cornerRadius = 5 |
| 327 | imageView.layer.masksToBounds = true | 338 | imageView.layer.masksToBounds = true |
| 328 | imageView.clipsToBounds = true | 339 | imageView.clipsToBounds = true |
| 329 | - imageView.viewWithTag(1000) | 340 | + imageView.tag = 1000 |
| 330 | view.addSubview(imageView) | 341 | view.addSubview(imageView) |
| 331 | imageView.snp.makeConstraints { make in | 342 | imageView.snp.makeConstraints { make in |
| 332 | make.left.top.equalToSuperview().offset(20) | 343 | make.left.top.equalToSuperview().offset(20) |
| @@ -334,14 +345,11 @@ extension CNLiveShortVideoListTableViewCell { | @@ -334,14 +345,11 @@ extension CNLiveShortVideoListTableViewCell { | ||
| 334 | make.height.equalTo(70) | 345 | make.height.equalTo(70) |
| 335 | } | 346 | } |
| 336 | 347 | ||
| 337 | - let paragraphStyle = NSMutableParagraphStyle() | ||
| 338 | - paragraphStyle.lineSpacing = 6 | ||
| 339 | let titleLabel = UILabel.init() | 348 | let titleLabel = UILabel.init() |
| 340 | - titleLabel.attributedText = NSAttributedString(string: "第四集 我们都不知道,所做的哪一个选择会让命运的齿轮开始转动", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]) | ||
| 341 | titleLabel.textColor = .white | 349 | titleLabel.textColor = .white |
| 342 | titleLabel.lineBreakMode = .byTruncatingTail | 350 | titleLabel.lineBreakMode = .byTruncatingTail |
| 343 | titleLabel.numberOfLines = 2 | 351 | titleLabel.numberOfLines = 2 |
| 344 | - titleLabel.viewWithTag(1001) | 352 | + titleLabel.tag = 1001 |
| 345 | titleLabel.font = medium_adapt_font(pointSize: 12) | 353 | titleLabel.font = medium_adapt_font(pointSize: 12) |
| 346 | view.addSubview(titleLabel) | 354 | view.addSubview(titleLabel) |
| 347 | titleLabel.snp.makeConstraints { make in | 355 | titleLabel.snp.makeConstraints { make in |
| @@ -351,9 +359,8 @@ extension CNLiveShortVideoListTableViewCell { | @@ -351,9 +359,8 @@ extension CNLiveShortVideoListTableViewCell { | ||
| 351 | } | 359 | } |
| 352 | 360 | ||
| 353 | let timeLabel = UILabel.init() | 361 | let timeLabel = UILabel.init() |
| 354 | - timeLabel.text = "04:45" | ||
| 355 | timeLabel.textColor = .white | 362 | timeLabel.textColor = .white |
| 356 | - timeLabel.viewWithTag(1002) | 363 | + timeLabel.tag = 1002 |
| 357 | timeLabel.font = light_adapt_font(pointSize: 13) | 364 | timeLabel.font = light_adapt_font(pointSize: 13) |
| 358 | view.addSubview(timeLabel) | 365 | view.addSubview(timeLabel) |
| 359 | timeLabel.snp.makeConstraints { make in | 366 | timeLabel.snp.makeConstraints { make in |
metaCode/Classes/Main/VideoPage/ViewModel/CNLiveShortVideoViewModel.swift
| @@ -11,21 +11,182 @@ import CNLiveRequestBastKit | @@ -11,21 +11,182 @@ import CNLiveRequestBastKit | ||
| 11 | typealias resultShortVideoBlock = (_ result: Any,_ respStatue :CNLiveMineResponseType) -> Void | 11 | typealias resultShortVideoBlock = (_ result: Any,_ respStatue :CNLiveMineResponseType) -> Void |
| 12 | class CNLiveShortVideoViewModel: NSObject { | 12 | class CNLiveShortVideoViewModel: NSObject { |
| 13 | 13 | ||
| 14 | - /// 这是测试请求短视频数据 | ||
| 15 | - static func requstWithShortVideo(reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 16 | - | 14 | + /// 获取短视频数据 |
| 15 | + /// - Parameters: | ||
| 16 | + /// - aid: 专辑 id | ||
| 17 | + /// - reultShortVideoBlock: 返回 | ||
| 18 | + static func requstWithShortVideo(aid: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 17 | let param = NSMutableDictionary() | 19 | let param = NSMutableDictionary() |
| 18 | - param.setValue("10511059", forKey: "creatorId") | ||
| 19 | - param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "userId") | ||
| 20 | - param.setValue("3", forKey: "type") | ||
| 21 | - param.setValue("1", forKey: "page") | 20 | + param.setValue(aid, forKey: "aid") |
| 21 | + param.setValue("", forKey: "app_channel_id") | ||
| 22 | + param.setValue("\(page)", forKey: "page") | ||
| 22 | param.setValue("10", forKey: "pageSize") | 23 | param.setValue("10", forKey: "pageSize") |
| 24 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 25 | + let custom_param = NSMutableDictionary() | ||
| 26 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 27 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 28 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 29 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 30 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 31 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 32 | + hiddenLoading() | ||
| 33 | + if (error == nil) { | ||
| 34 | + let resp = result as! NSDictionary | ||
| 35 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 36 | + if (errorCode == "0") { | ||
| 37 | + if resp["data"] is NSNull { | ||
| 38 | + reultShortVideoBlock(NSNull(), .failed) | ||
| 39 | + } else { | ||
| 40 | + CNLiveShortVideoViewModel.requstWithAlbumMsgVideo(aid: aid) { result, respStatue in | ||
| 41 | + if respStatue == .success { | ||
| 42 | + let resp_dict = resp["data"] as! NSDictionary | ||
| 43 | + let array = resp_dict["list"] as! NSArray | ||
| 44 | + let tempArray = NSMutableArray() | ||
| 45 | + let tempUrlArray = NSMutableArray() | ||
| 46 | + for item in array { | ||
| 47 | + let listModel = dictionaryToModel(item as! [String : Any], CNLiveAlbumListModel.self,"") as! CNLiveAlbumListModel | ||
| 48 | + listModel.albumMsgModel = result as? CNLiveAlbumMsgModel | ||
| 49 | + tempArray.add(listModel) | ||
| 50 | + tempUrlArray.add(listModel.videoUrl as String) | ||
| 51 | + } | ||
| 52 | + reultShortVideoBlock([tempArray, resp_dict["hasNextPage"], tempUrlArray], .success) | ||
| 53 | + } else { | ||
| 54 | + let resp_dict = resp["data"] as! NSDictionary | ||
| 55 | + let array = resp_dict["list"] as! NSArray | ||
| 56 | + let tempArray = NSMutableArray() | ||
| 57 | + let tempUrlArray = NSMutableArray() | ||
| 58 | + for item in array { | ||
| 59 | + let listModel = dictionaryToModel(item as! [String : Any], CNLiveAlbumListModel.self,"") as! CNLiveAlbumListModel | ||
| 60 | + tempArray.add(listModel) | ||
| 61 | + tempUrlArray.add(listModel.videoUrl as String) | ||
| 62 | + } | ||
| 63 | + reultShortVideoBlock([tempArray, resp_dict["hasNextPage"], tempUrlArray], .success) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } else { | ||
| 68 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 69 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 70 | + } | ||
| 71 | + } else { | ||
| 72 | + if CNLiveNetworking.isNetworking() { | ||
| 73 | + showMessage(message: "请求失败") | ||
| 74 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 75 | + } else { | ||
| 76 | + showMessage(message: "似乎与网络断开链接") | ||
| 77 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + /// 获取专辑信息接口 | ||
| 84 | + /// - Parameters: | ||
| 85 | + /// - aid: 专辑名称 | ||
| 86 | + /// - reultShortVideoBlock: 返回 | ||
| 87 | + static func requstWithAlbumMsgVideo(aid: String,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 88 | + let param = NSMutableDictionary() | ||
| 89 | + param.setValue(aid, forKey: "aid") | ||
| 90 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 91 | + let custom_param = NSMutableDictionary() | ||
| 92 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 93 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 94 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 95 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 96 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 97 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : Any], cacheType: .networkOnly) { task, result, error in | ||
| 98 | + hiddenLoading() | ||
| 99 | + if (error == nil) { | ||
| 100 | + let resp = result as! NSDictionary | ||
| 101 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 102 | + if (errorCode == "0") { | ||
| 103 | + if resp["data"] is NSNull { | ||
| 104 | + reultShortVideoBlock(NSNull(), .failed) | ||
| 105 | + } else { | ||
| 106 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveAlbumMsgModel.self,"") as! CNLiveAlbumMsgModel | ||
| 107 | + reultShortVideoBlock(listModel, .success) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 111 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 112 | + } | ||
| 113 | + } else { | ||
| 114 | + if CNLiveNetworking.isNetworking() { | ||
| 115 | + showMessage(message: "请求失败") | ||
| 116 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 117 | + } else { | ||
| 118 | + showMessage(message: "似乎与网络断开链接") | ||
| 119 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + | ||
| 126 | + /// 短视频点赞功能 | ||
| 127 | + /// - Parameters: | ||
| 128 | + /// - contentId: 点赞内容 id | ||
| 129 | + /// - contentTitle: 点赞的视频标题 | ||
| 130 | + /// - support: 1:点赞 0:取消点赞 | ||
| 131 | + /// - reultShortVideoBlock: 返回 | ||
| 132 | + static func requestRankWithLike(contentId: String, contentTitle: String, contentSid: String, support: Bool,tagName: String,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 133 | + let param = NSMutableDictionary() | ||
| 134 | + param.setValue(contentId, forKey: "contentId") | ||
| 135 | + param.setValue(APPId_wjj, forKey: "appId") | ||
| 136 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 137 | + param.setValue(contentId, forKey: "contentTitle") | ||
| 138 | + param.setValue(contentSid, forKey: "contentSid") | ||
| 139 | + param.setValue(support ? "1":"0", forKey: "support") | ||
| 140 | + param.setValue("false", forKey: "isRank") | ||
| 141 | + param.setValue("1", forKey: "isUgc") | ||
| 142 | + param.setValue(tagName, forKey: "contentTag") | ||
| 143 | + let custom_param = NSMutableDictionary() | ||
| 144 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 145 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 146 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 147 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 148 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 149 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/support/supportBySpIdForRank/insert", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 150 | + hiddenLoading() | ||
| 151 | + if (error == nil) { | ||
| 152 | + let resp = result as! NSDictionary | ||
| 153 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 154 | + if (errorCode == "0") { | ||
| 155 | + reultShortVideoBlock(support ? "取消点赞成功" : "点赞成功", .success) | ||
| 156 | + } else { | ||
| 157 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 158 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 159 | + } | ||
| 160 | + } else { | ||
| 161 | + if CNLiveNetworking.isNetworking() { | ||
| 162 | + showMessage(message: "请求失败") | ||
| 163 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 164 | + } else { | ||
| 165 | + showMessage(message: "似乎与网络断开链接") | ||
| 166 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + } | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + //!!!: 评论相关 | ||
| 173 | + | ||
| 174 | + /// 获取评论列表数 | ||
| 175 | + /// - Parameters: | ||
| 176 | + /// - pid: 视频 pid | ||
| 177 | + /// - page: 页数 | ||
| 178 | + /// - reultShortVideoBlock: 返回 | ||
| 179 | + static func requestCommentList(pid: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 180 | + let param = NSMutableDictionary() | ||
| 181 | + param.setValue(pid, forKey: "topicId") | ||
| 182 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 183 | + param.setValue("\(page)", forKey: "seqId") | ||
| 184 | + param.setValue("10", forKey: "count") | ||
| 23 | let custom_param = NSMutableDictionary() | 185 | let custom_param = NSMutableDictionary() |
| 24 | custom_param.setValue(APPId_wjj, forKey: "appId") | 186 | custom_param.setValue(APPId_wjj, forKey: "appId") |
| 25 | custom_param.setValue(APPKey_wjj, forKey: "appKey") | 187 | custom_param.setValue(APPKey_wjj, forKey: "appKey") |
| 26 | CNLiveNetworking.setAllowRequestDefaultArgument(true) | 188 | CNLiveNetworking.setAllowRequestDefaultArgument(true) |
| 27 | CNLiveNetworking.setupShowDataResult(false) | 189 | CNLiveNetworking.setupShowDataResult(false) |
| 28 | - CNLiveNetworking.setupDSRequest(true) | ||
| 29 | CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | 190 | CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) |
| 30 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSClassUrl+"/ugcApi/ugcVideoList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | 191 | CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSClassUrl+"/ugcApi/ugcVideoList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in |
| 31 | hiddenLoading() | 192 | hiddenLoading() |
| @@ -36,21 +197,149 @@ class CNLiveShortVideoViewModel: NSObject { | @@ -36,21 +197,149 @@ class CNLiveShortVideoViewModel: NSObject { | ||
| 36 | if resp["data"] is NSNull { | 197 | if resp["data"] is NSNull { |
| 37 | reultShortVideoBlock(NSNull(), .failed) | 198 | reultShortVideoBlock(NSNull(), .failed) |
| 38 | } else { | 199 | } else { |
| 200 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], ShortVideoHomeCommentModel.self,"") as! ShortVideoHomeCommentModel | ||
| 201 | + reultShortVideoBlock(listModel, .success) | ||
| 202 | + } | ||
| 203 | + } else { | ||
| 204 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 205 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 206 | + } | ||
| 207 | + } else { | ||
| 208 | + if CNLiveNetworking.isNetworking() { | ||
| 209 | + showMessage(message: "请求失败") | ||
| 210 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 211 | + } else { | ||
| 212 | + showMessage(message: "似乎与网络断开链接") | ||
| 213 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 214 | + } | ||
| 215 | + } | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + /// 发布评论 | ||
| 220 | + /// - Parameters: | ||
| 221 | + /// - videoId: 视频 id | ||
| 222 | + /// - comment: 评论内容 | ||
| 223 | + /// - isAuthor: 是否是作者 | ||
| 224 | + /// - reultShortVideoBlock: 返回 | ||
| 225 | + static func requestCommentWithSend(videoId: String, comment: String, isAuthor: Bool,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 226 | + let param = NSMutableDictionary() | ||
| 227 | + param.setValue(videoId, forKey: "topicId") | ||
| 228 | + param.setValue(APPId_wjj, forKey: "appId") | ||
| 229 | + param.setValue(comment, forKey: "comment") | ||
| 230 | + param.setValue(isAuthor ? "1":"0", forKey: "isAuthor") | ||
| 231 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 232 | + let custom_param = NSMutableDictionary() | ||
| 233 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 234 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 235 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 236 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 237 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 238 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/insertComment", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 239 | + hiddenLoading() | ||
| 240 | + if (error == nil) { | ||
| 241 | + let resp = result as! NSDictionary | ||
| 242 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 243 | + if (errorCode == "0") { | ||
| 244 | + reultShortVideoBlock("评论成功", .success) | ||
| 245 | + } else { | ||
| 246 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 247 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 248 | + } | ||
| 249 | + } else { | ||
| 250 | + if CNLiveNetworking.isNetworking() { | ||
| 251 | + showMessage(message: "请求失败") | ||
| 252 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 253 | + } else { | ||
| 254 | + showMessage(message: "似乎与网络断开链接") | ||
| 255 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 256 | + } | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + | ||
| 261 | + | ||
| 262 | + /// 对评论进行回复 | ||
| 263 | + /// - Parameters: | ||
| 264 | + /// - commentId: 评论 id | ||
| 265 | + /// - comment: 评论内容 | ||
| 266 | + /// - toSid: 被回复者ID | ||
| 267 | + /// - fromSid: 回复者ID | ||
| 268 | + /// - level: 1:一级评论回复 2:二级评论回复 | ||
| 269 | + /// - reultShortVideoBlock: 返回 | ||
| 270 | + static func requestCommentWithReply(commentId: String, comment: String, toSid: String, fromSid: String, level: String,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 271 | + let param = NSMutableDictionary() | ||
| 272 | + param.setValue(commentId, forKey: "commentId") | ||
| 273 | + param.setValue(APPId_wjj, forKey: "appId") | ||
| 274 | + param.setValue(comment, forKey: "comment") | ||
| 275 | + param.setValue(toSid, forKey: "toSid") | ||
| 276 | + param.setValue(fromSid, forKey: "fromSid") | ||
| 277 | + param.setValue(level, forKey: "level") | ||
| 278 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 279 | + let custom_param = NSMutableDictionary() | ||
| 280 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 281 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 282 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 283 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 284 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 285 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/insertReply", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 286 | + hiddenLoading() | ||
| 287 | + if (error == nil) { | ||
| 288 | + let resp = result as! NSDictionary | ||
| 289 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 290 | + if (errorCode == "0") { | ||
| 291 | + reultShortVideoBlock("回复成功", .success) | ||
| 292 | + } else { | ||
| 293 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 294 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 295 | + } | ||
| 296 | + } else { | ||
| 297 | + if CNLiveNetworking.isNetworking() { | ||
| 298 | + showMessage(message: "请求失败") | ||
| 299 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 300 | + } else { | ||
| 301 | + showMessage(message: "似乎与网络断开链接") | ||
| 302 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 303 | + } | ||
| 304 | + } | ||
| 305 | + } | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + | ||
| 309 | + /// 获取回复数据列表 | ||
| 310 | + /// - Parameters: | ||
| 311 | + /// - commentId: 评论 id | ||
| 312 | + /// - page: 页数 | ||
| 313 | + /// - reultShortVideoBlock: 返回 | ||
| 314 | + static func requestcommentWithReplyList(commentId: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 315 | + let param = NSMutableDictionary() | ||
| 316 | + param.setValue(commentId, forKey: "commentId") | ||
| 317 | + param.setValue("\(page)", forKey: "seqId") | ||
| 318 | + param.setValue("10", forKey: "count") | ||
| 319 | + let custom_param = NSMutableDictionary() | ||
| 320 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 321 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 322 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 323 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 324 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 325 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseCMSClassUrl+"/commentServices/commentForUgc/loadReplys", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 326 | + hiddenLoading() | ||
| 327 | + if (error == nil) { | ||
| 328 | + let resp = result as! NSDictionary | ||
| 329 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 330 | + if (errorCode == "0") { | ||
| 331 | + if resp["data"] is NSNull { | ||
| 332 | + reultShortVideoBlock(NSNull(), .failed) | ||
| 333 | + } else { | ||
| 39 | let resp_dict = resp["data"] as! NSDictionary | 334 | let resp_dict = resp["data"] as! NSDictionary |
| 40 | - let array = resp_dict["list"] as! NSArray | 335 | + let resp_reply_dict = resp_dict["replyData"] as! NSDictionary |
| 336 | + let array = resp_reply_dict["replys"] as! NSArray | ||
| 41 | let tempArray = NSMutableArray() | 337 | let tempArray = NSMutableArray() |
| 42 | - let tempUrlArray = NSMutableArray() | ||
| 43 | - var index = 0 | ||
| 44 | for item in array { | 338 | for item in array { |
| 45 | - let listModel = dictionaryToModel(item as! [String : Any], ShortVideoHomeTestModel.self,"") as! ShortVideoHomeTestModel | ||
| 46 | - if (index > 2) { | ||
| 47 | - listModel.isMoney = true | ||
| 48 | - } | 339 | + let listModel = dictionaryToModel(item as! [String : Any], ShortVideoHomeCommentRListItemModel.self,"") as! ShortVideoHomeCommentRListItemModel |
| 49 | tempArray.add(listModel) | 340 | tempArray.add(listModel) |
| 50 | - tempUrlArray.add(listModel.videoUrl! as String) | ||
| 51 | - index += 1 | ||
| 52 | } | 341 | } |
| 53 | - reultShortVideoBlock([tempArray, tempUrlArray], .success) | 342 | + reultShortVideoBlock(tempArray, .success) |
| 54 | } | 343 | } |
| 55 | } else { | 344 | } else { |
| 56 | showMessage(message: resp["errorMessage"] as! String) | 345 | showMessage(message: resp["errorMessage"] as! String) |
| @@ -68,4 +357,84 @@ class CNLiveShortVideoViewModel: NSObject { | @@ -68,4 +357,84 @@ class CNLiveShortVideoViewModel: NSObject { | ||
| 68 | } | 357 | } |
| 69 | } | 358 | } |
| 70 | 359 | ||
| 360 | + /// 删除评论 | ||
| 361 | + /// - Parameters: | ||
| 362 | + /// - videoId: 视频 id | ||
| 363 | + /// - commentId: 评论 id | ||
| 364 | + /// - reultShortVideoBlock: 返回 | ||
| 365 | + static func requestCommentDelete(videoId: String, commentId: String, reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 366 | + let param = NSMutableDictionary() | ||
| 367 | + param.setValue(commentId, forKey: "commentId") | ||
| 368 | + param.setValue(APPId_wjj, forKey: "appId") | ||
| 369 | + param.setValue(videoId, forKey: "topicId") | ||
| 370 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 371 | + let custom_param = NSMutableDictionary() | ||
| 372 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 373 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 374 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 375 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 376 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 377 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/deleteComment", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 378 | + hiddenLoading() | ||
| 379 | + if (error == nil) { | ||
| 380 | + let resp = result as! NSDictionary | ||
| 381 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 382 | + if (errorCode == "0") { | ||
| 383 | + reultShortVideoBlock("删除成功", .success) | ||
| 384 | + } else { | ||
| 385 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 386 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 387 | + } | ||
| 388 | + } else { | ||
| 389 | + if CNLiveNetworking.isNetworking() { | ||
| 390 | + showMessage(message: "请求失败") | ||
| 391 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 392 | + } else { | ||
| 393 | + showMessage(message: "似乎与网络断开链接") | ||
| 394 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 395 | + } | ||
| 396 | + } | ||
| 397 | + } | ||
| 398 | + } | ||
| 399 | + | ||
| 400 | + /// 删除回复 | ||
| 401 | + /// - Parameters: | ||
| 402 | + /// - replyId: 回复 id | ||
| 403 | + /// - commentId: 评论 id | ||
| 404 | + /// - reultShortVideoBlock: 返回 | ||
| 405 | + static func requestCommentReplyDelete(replyId: String, commentId: String, reultShortVideoBlock: @escaping resultShortVideoBlock) { | ||
| 406 | + let param = NSMutableDictionary() | ||
| 407 | + param.setValue(commentId, forKey: "commentId") | ||
| 408 | + param.setValue(APPId_wjj, forKey: "appId") | ||
| 409 | + param.setValue(replyId, forKey: "replyId") | ||
| 410 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | ||
| 411 | + let custom_param = NSMutableDictionary() | ||
| 412 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 413 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 414 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 415 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 416 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 417 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/deleteReply", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 418 | + hiddenLoading() | ||
| 419 | + if (error == nil) { | ||
| 420 | + let resp = result as! NSDictionary | ||
| 421 | + let errorCode = "\(resp["errorCode"] ?? "0")" | ||
| 422 | + if (errorCode == "0") { | ||
| 423 | + reultShortVideoBlock("删除成功", .success) | ||
| 424 | + } else { | ||
| 425 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 426 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 427 | + } | ||
| 428 | + } else { | ||
| 429 | + if CNLiveNetworking.isNetworking() { | ||
| 430 | + showMessage(message: "请求失败") | ||
| 431 | + reultShortVideoBlock(NSNull(),.failed) | ||
| 432 | + } else { | ||
| 433 | + showMessage(message: "似乎与网络断开链接") | ||
| 434 | + reultShortVideoBlock(NSNull(),.noNetwork) | ||
| 435 | + } | ||
| 436 | + } | ||
| 437 | + } | ||
| 438 | + } | ||
| 439 | + | ||
| 71 | } | 440 | } |