Commit c6a46445a0d244be0e2a5b968531a54122ff2d83

Authored by 张旭
2 parents 7f744f64 94437476

Merge branch 'master' of bj.gitlab.cnlive.com:ios-team/LiveVideoCloud

# Conflicts:
#	LiveVideoCloud/AppCustoms/Main/ZXTabBarController.m
Showing 37 changed files with 566 additions and 1543 deletions
LiveVideoCloud.xcodeproj/project.pbxproj
@@ -82,26 +82,20 @@ @@ -82,26 +82,20 @@
82 8178D4191F01FA3600AA78A4 /* CNLivePlayerSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8178D4161F01FA2900AA78A4 /* CNLivePlayerSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 82 8178D4191F01FA3600AA78A4 /* CNLivePlayerSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8178D4161F01FA2900AA78A4 /* CNLivePlayerSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
83 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */; }; 83 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */; };
84 8178D4251F02043500AA78A4 /* LVCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4211F02043500AA78A4 /* LVCLivePlayerController.m */; }; 84 8178D4251F02043500AA78A4 /* LVCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4211F02043500AA78A4 /* LVCLivePlayerController.m */; };
85 - 8178D42F1F02044300AA78A4 /* LVCChannelDetailsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4281F02044300AA78A4 /* LVCChannelDetailsModel.m */; };  
86 - 8178D4301F02044300AA78A4 /* LVCChannelsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D42A1F02044300AA78A4 /* LVCChannelsModel.m */; };  
87 8178D4311F02044300AA78A4 /* LVCChatRoomModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */; }; 85 8178D4311F02044300AA78A4 /* LVCChatRoomModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */; };
88 - 8178D4321F02044300AA78A4 /* LVCProgramModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D42E1F02044300AA78A4 /* LVCProgramModel.m */; };  
89 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4351F02045500AA78A4 /* CNBarrageManager.m */; }; 86 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4351F02045500AA78A4 /* CNBarrageManager.m */; };
90 8178D44B1F02045500AA78A4 /* CNBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4371F02045500AA78A4 /* CNBarrageView.m */; }; 87 8178D44B1F02045500AA78A4 /* CNBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4371F02045500AA78A4 /* CNBarrageView.m */; };
91 - 8178D44C1F02045500AA78A4 /* LVCFirstHeaderReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4391F02045500AA78A4 /* LVCFirstHeaderReusableView.m */; };  
92 - 8178D44D1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D43B1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.m */; };  
93 - 8178D44E1F02045500AA78A4 /* LVCLiveListCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D43D1F02045500AA78A4 /* LVCLiveListCollectionViewCell.m */; };  
94 - 8178D44F1F02045500AA78A4 /* LVCMoreSortTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D43F1F02045500AA78A4 /* LVCMoreSortTableViewCell.m */; };  
95 - 8178D4501F02045500AA78A4 /* LVCOtherHeaderReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4411F02045500AA78A4 /* LVCOtherHeaderReusableView.m */; };  
96 8178D4511F02045500AA78A4 /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4431F02045500AA78A4 /* LVCPlayer.m */; }; 88 8178D4511F02045500AA78A4 /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4431F02045500AA78A4 /* LVCPlayer.m */; };
97 8178D4521F02045500AA78A4 /* LVCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */; }; 89 8178D4521F02045500AA78A4 /* LVCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */; };
98 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */; }; 90 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */; };
99 - 8178D4541F02045500AA78A4 /* LVCTelevisionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4491F02045500AA78A4 /* LVCTelevisionView.m */; };  
100 8178D4571F0204D600AA78A4 /* LVCTelevisioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */; }; 91 8178D4571F0204D600AA78A4 /* LVCTelevisioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */; };
101 8178D4611F02060B00AA78A4 /* LVCChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45A1F02060B00AA78A4 /* LVCChatView.m */; }; 92 8178D4611F02060B00AA78A4 /* LVCChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45A1F02060B00AA78A4 /* LVCChatView.m */; };
102 8178D4621F02060B00AA78A4 /* LVCChatViewTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45C1F02060B00AA78A4 /* LVCChatViewTableViewCell.m */; }; 93 8178D4621F02060B00AA78A4 /* LVCChatViewTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45C1F02060B00AA78A4 /* LVCChatViewTableViewCell.m */; };
103 8178D4631F02060B00AA78A4 /* LVCInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45E1F02060B00AA78A4 /* LVCInputView.m */; }; 94 8178D4631F02060B00AA78A4 /* LVCInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45E1F02060B00AA78A4 /* LVCInputView.m */; };
104 8178D4641F02060B00AA78A4 /* LVCMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4601F02060B00AA78A4 /* LVCMessage.m */; }; 95 8178D4641F02060B00AA78A4 /* LVCMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4601F02060B00AA78A4 /* LVCMessage.m */; };
  96 + 8178D4681F021C4500AA78A4 /* TelevisionData.json in Resources */ = {isa = PBXBuildFile; fileRef = 8178D4671F021C4500AA78A4 /* TelevisionData.json */; };
  97 + 8178D46B1F021ED800AA78A4 /* LVCTelevisionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */; };
  98 + 8178D46E1F0225E500AA78A4 /* LVCTelevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */; };
105 81A483081E88B6140097A80A /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A483071E88B6140097A80A /* UIView+ViewController.m */; }; 99 81A483081E88B6140097A80A /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A483071E88B6140097A80A /* UIView+ViewController.m */; };
106 81DFC4261F0113B40029BCB3 /* JsonFile.json in Resources */ = {isa = PBXBuildFile; fileRef = 81DFC4251F0113B40029BCB3 /* JsonFile.json */; }; 100 81DFC4261F0113B40029BCB3 /* JsonFile.json in Resources */ = {isa = PBXBuildFile; fileRef = 81DFC4251F0113B40029BCB3 /* JsonFile.json */; };
107 81F1C8381E8BBDDA0085C2B8 /* MHPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C8371E8BBDDA0085C2B8 /* MHPagingScrollView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 101 81F1C8381E8BBDDA0085C2B8 /* MHPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C8371E8BBDDA0085C2B8 /* MHPagingScrollView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
@@ -200,7 +194,6 @@ @@ -200,7 +194,6 @@
200 D217A24B1E7B76C7003B44CB /* PresentViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2491E7B76C7003B44CB /* PresentViewCell.m */; }; 194 D217A24B1E7B76C7003B44CB /* PresentViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2491E7B76C7003B44CB /* PresentViewCell.m */; };
201 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A24D1E7B77C7003B44CB /* ComboCell.m */; }; 195 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A24D1E7B77C7003B44CB /* ComboCell.m */; };
202 D219E86B1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */; }; 196 D219E86B1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */; };
203 - D219E86E1F01002400650F38 /* LVCVodPlayerListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D219E86D1F01002400650F38 /* LVCVodPlayerListView.m */; };  
204 D224B1971E826ED800CC61D0 /* ChatBarrageAnimAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */; }; 197 D224B1971E826ED800CC61D0 /* ChatBarrageAnimAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */; };
205 D22830F11E778C0F00627701 /* LiveBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830F01E778C0F00627701 /* LiveBaseView.m */; }; 198 D22830F11E778C0F00627701 /* LiveBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830F01E778C0F00627701 /* LiveBaseView.m */; };
206 D22830FC1E77C2D900627701 /* BottomToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830FB1E77C2D900627701 /* BottomToolView.m */; }; 199 D22830FC1E77C2D900627701 /* BottomToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830FB1E77C2D900627701 /* BottomToolView.m */; };
@@ -262,11 +255,9 @@ @@ -262,11 +255,9 @@
262 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; }; 255 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; };
263 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; }; 256 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; };
264 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */; }; 257 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */; };
265 - D2EBC85A1F02011400F198FB /* LVCVodPlayerTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8591F02011400F198FB /* LVCVodPlayerTableViewCell.m */; };  
266 D2EBC8641F02105C00F198FB /* LVCHomePageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */; }; 258 D2EBC8641F02105C00F198FB /* LVCHomePageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */; };
267 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; }; 259 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; };
268 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; }; 260 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; };
269 - D2EBC8731F02108000F198FB /* LVCTVLiveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86A1F02108000F198FB /* LVCTVLiveViewController.m */; };  
270 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; }; 261 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; };
271 D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86E1F02108000F198FB /* LVCUGCLiveListView.m */; }; 262 D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86E1F02108000F198FB /* LVCUGCLiveListView.m */; };
272 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */; }; 263 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */; };
@@ -467,36 +458,18 @@ @@ -467,36 +458,18 @@
467 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCFullScreenPlayerController.m; sourceTree = "<group>"; }; 458 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCFullScreenPlayerController.m; sourceTree = "<group>"; };
468 8178D4201F02043500AA78A4 /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; }; 459 8178D4201F02043500AA78A4 /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; };
469 8178D4211F02043500AA78A4 /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; }; 460 8178D4211F02043500AA78A4 /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; };
470 - 8178D4271F02044300AA78A4 /* LVCChannelDetailsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChannelDetailsModel.h; sourceTree = "<group>"; };  
471 - 8178D4281F02044300AA78A4 /* LVCChannelDetailsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCChannelDetailsModel.m; sourceTree = "<group>"; };  
472 - 8178D4291F02044300AA78A4 /* LVCChannelsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChannelsModel.h; sourceTree = "<group>"; };  
473 - 8178D42A1F02044300AA78A4 /* LVCChannelsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCChannelsModel.m; sourceTree = "<group>"; };  
474 8178D42B1F02044300AA78A4 /* LVCChatRoomModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChatRoomModel.h; sourceTree = "<group>"; }; 461 8178D42B1F02044300AA78A4 /* LVCChatRoomModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChatRoomModel.h; sourceTree = "<group>"; };
475 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCChatRoomModel.m; sourceTree = "<group>"; }; 462 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCChatRoomModel.m; sourceTree = "<group>"; };
476 - 8178D42D1F02044300AA78A4 /* LVCProgramModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCProgramModel.h; sourceTree = "<group>"; };  
477 - 8178D42E1F02044300AA78A4 /* LVCProgramModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCProgramModel.m; sourceTree = "<group>"; };  
478 8178D4341F02045500AA78A4 /* CNBarrageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNBarrageManager.h; sourceTree = "<group>"; }; 463 8178D4341F02045500AA78A4 /* CNBarrageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNBarrageManager.h; sourceTree = "<group>"; };
479 8178D4351F02045500AA78A4 /* CNBarrageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageManager.m; sourceTree = "<group>"; }; 464 8178D4351F02045500AA78A4 /* CNBarrageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageManager.m; sourceTree = "<group>"; };
480 8178D4361F02045500AA78A4 /* CNBarrageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNBarrageView.h; sourceTree = "<group>"; }; 465 8178D4361F02045500AA78A4 /* CNBarrageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNBarrageView.h; sourceTree = "<group>"; };
481 8178D4371F02045500AA78A4 /* CNBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageView.m; sourceTree = "<group>"; }; 466 8178D4371F02045500AA78A4 /* CNBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageView.m; sourceTree = "<group>"; };
482 - 8178D4381F02045500AA78A4 /* LVCFirstHeaderReusableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCFirstHeaderReusableView.h; sourceTree = "<group>"; };  
483 - 8178D4391F02045500AA78A4 /* LVCFirstHeaderReusableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCFirstHeaderReusableView.m; sourceTree = "<group>"; };  
484 - 8178D43A1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCHeaderRollCollectionViewCell.h; sourceTree = "<group>"; };  
485 - 8178D43B1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCHeaderRollCollectionViewCell.m; sourceTree = "<group>"; };  
486 - 8178D43C1F02045500AA78A4 /* LVCLiveListCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveListCollectionViewCell.h; sourceTree = "<group>"; };  
487 - 8178D43D1F02045500AA78A4 /* LVCLiveListCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLiveListCollectionViewCell.m; sourceTree = "<group>"; };  
488 - 8178D43E1F02045500AA78A4 /* LVCMoreSortTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCMoreSortTableViewCell.h; sourceTree = "<group>"; };  
489 - 8178D43F1F02045500AA78A4 /* LVCMoreSortTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMoreSortTableViewCell.m; sourceTree = "<group>"; };  
490 - 8178D4401F02045500AA78A4 /* LVCOtherHeaderReusableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCOtherHeaderReusableView.h; sourceTree = "<group>"; };  
491 - 8178D4411F02045500AA78A4 /* LVCOtherHeaderReusableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCOtherHeaderReusableView.m; sourceTree = "<group>"; };  
492 8178D4421F02045500AA78A4 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; }; 467 8178D4421F02045500AA78A4 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; };
493 8178D4431F02045500AA78A4 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; }; 468 8178D4431F02045500AA78A4 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; };
494 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayerLoadingView.h; sourceTree = "<group>"; }; 469 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayerLoadingView.h; sourceTree = "<group>"; };
495 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayerLoadingView.m; sourceTree = "<group>"; }; 470 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayerLoadingView.m; sourceTree = "<group>"; };
496 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCRequestFailedView.h; sourceTree = "<group>"; }; 471 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCRequestFailedView.h; sourceTree = "<group>"; };
497 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCRequestFailedView.m; sourceTree = "<group>"; }; 472 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCRequestFailedView.m; sourceTree = "<group>"; };
498 - 8178D4481F02045500AA78A4 /* LVCTelevisionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisionView.h; sourceTree = "<group>"; };  
499 - 8178D4491F02045500AA78A4 /* LVCTelevisionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionView.m; sourceTree = "<group>"; };  
500 8178D4551F0204D600AA78A4 /* LVCTelevisioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisioController.h; sourceTree = "<group>"; }; 473 8178D4551F0204D600AA78A4 /* LVCTelevisioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisioController.h; sourceTree = "<group>"; };
501 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisioController.m; sourceTree = "<group>"; }; 474 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisioController.m; sourceTree = "<group>"; };
502 8178D4591F02060B00AA78A4 /* LVCChatView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChatView.h; sourceTree = "<group>"; }; 475 8178D4591F02060B00AA78A4 /* LVCChatView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChatView.h; sourceTree = "<group>"; };
@@ -507,6 +480,11 @@ @@ -507,6 +480,11 @@
507 8178D45E1F02060B00AA78A4 /* LVCInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCInputView.m; sourceTree = "<group>"; }; 480 8178D45E1F02060B00AA78A4 /* LVCInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCInputView.m; sourceTree = "<group>"; };
508 8178D45F1F02060B00AA78A4 /* LVCMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCMessage.h; sourceTree = "<group>"; }; 481 8178D45F1F02060B00AA78A4 /* LVCMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCMessage.h; sourceTree = "<group>"; };
509 8178D4601F02060B00AA78A4 /* LVCMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMessage.m; sourceTree = "<group>"; }; 482 8178D4601F02060B00AA78A4 /* LVCMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMessage.m; sourceTree = "<group>"; };
  483 + 8178D4671F021C4500AA78A4 /* TelevisionData.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = TelevisionData.json; sourceTree = "<group>"; };
  484 + 8178D4691F021ED800AA78A4 /* LVCTelevisionModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisionModel.h; sourceTree = "<group>"; };
  485 + 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionModel.m; sourceTree = "<group>"; };
  486 + 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisionCell.h; sourceTree = "<group>"; };
  487 + 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionCell.m; sourceTree = "<group>"; };
510 81A483061E88B6140097A80A /* UIView+ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ViewController.h"; sourceTree = "<group>"; }; 488 81A483061E88B6140097A80A /* UIView+ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ViewController.h"; sourceTree = "<group>"; };
511 81A483071E88B6140097A80A /* UIView+ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ViewController.m"; sourceTree = "<group>"; }; 489 81A483071E88B6140097A80A /* UIView+ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ViewController.m"; sourceTree = "<group>"; };
512 81DFC4251F0113B40029BCB3 /* JsonFile.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = JsonFile.json; sourceTree = "<group>"; }; 490 81DFC4251F0113B40029BCB3 /* JsonFile.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = JsonFile.json; sourceTree = "<group>"; };
@@ -716,8 +694,6 @@ @@ -716,8 +694,6 @@
716 D217A24D1E7B77C7003B44CB /* ComboCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ComboCell.m; path = Present/ComboCell.m; sourceTree = "<group>"; }; 694 D217A24D1E7B77C7003B44CB /* ComboCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ComboCell.m; path = Present/ComboCell.m; sourceTree = "<group>"; };
717 D219E8691EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCBigHorizontalCollectionViewCell.h; sourceTree = "<group>"; }; 695 D219E8691EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCBigHorizontalCollectionViewCell.h; sourceTree = "<group>"; };
718 D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCBigHorizontalCollectionViewCell.m; sourceTree = "<group>"; }; 696 D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCBigHorizontalCollectionViewCell.m; sourceTree = "<group>"; };
719 - D219E86C1F01002400650F38 /* LVCVodPlayerListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodPlayerListView.h; sourceTree = "<group>"; };  
720 - D219E86D1F01002400650F38 /* LVCVodPlayerListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodPlayerListView.m; sourceTree = "<group>"; };  
721 D224B1951E826ED800CC61D0 /* ChatBarrageAnimAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageAnimAction.h; sourceTree = "<group>"; }; 697 D224B1951E826ED800CC61D0 /* ChatBarrageAnimAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageAnimAction.h; sourceTree = "<group>"; };
722 D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageAnimAction.m; sourceTree = "<group>"; }; 698 D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageAnimAction.m; sourceTree = "<group>"; };
723 D22830EF1E778C0F00627701 /* LiveBaseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveBaseView.h; sourceTree = "<group>"; }; 699 D22830EF1E778C0F00627701 /* LiveBaseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveBaseView.h; sourceTree = "<group>"; };
@@ -828,16 +804,12 @@ @@ -828,16 +804,12 @@
828 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; }; 804 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; };
829 D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCCommentModel.h; sourceTree = "<group>"; }; 805 D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCCommentModel.h; sourceTree = "<group>"; };
830 D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCCommentModel.m; sourceTree = "<group>"; }; 806 D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCCommentModel.m; sourceTree = "<group>"; };
831 - D2EBC8581F02011400F198FB /* LVCVodPlayerTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodPlayerTableViewCell.h; sourceTree = "<group>"; };  
832 - D2EBC8591F02011400F198FB /* LVCVodPlayerTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodPlayerTableViewCell.m; sourceTree = "<group>"; };  
833 D2EBC8621F02105C00F198FB /* LVCHomePageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCHomePageViewController.h; sourceTree = "<group>"; }; 807 D2EBC8621F02105C00F198FB /* LVCHomePageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCHomePageViewController.h; sourceTree = "<group>"; };
834 D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCHomePageViewController.m; sourceTree = "<group>"; }; 808 D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCHomePageViewController.m; sourceTree = "<group>"; };
835 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; }; 809 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; };
836 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; }; 810 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; };
837 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; }; 811 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; };
838 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLiveActivityInfoService.m; sourceTree = "<group>"; }; 812 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLiveActivityInfoService.m; sourceTree = "<group>"; };
839 - D2EBC8691F02108000F198FB /* LVCTVLiveViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTVLiveViewController.h; sourceTree = "<group>"; };  
840 - D2EBC86A1F02108000F198FB /* LVCTVLiveViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTVLiveViewController.m; sourceTree = "<group>"; };  
841 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListController.h; sourceTree = "<group>"; }; 813 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListController.h; sourceTree = "<group>"; };
842 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListController.m; sourceTree = "<group>"; }; 814 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListController.m; sourceTree = "<group>"; };
843 D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListView.h; sourceTree = "<group>"; }; 815 D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListView.h; sourceTree = "<group>"; };
@@ -1164,14 +1136,10 @@ @@ -1164,14 +1136,10 @@
1164 8178D41C1F02036200AA78A4 /* Model */ = { 1136 8178D41C1F02036200AA78A4 /* Model */ = {
1165 isa = PBXGroup; 1137 isa = PBXGroup;
1166 children = ( 1138 children = (
1167 - 8178D4271F02044300AA78A4 /* LVCChannelDetailsModel.h */,  
1168 - 8178D4281F02044300AA78A4 /* LVCChannelDetailsModel.m */,  
1169 - 8178D4291F02044300AA78A4 /* LVCChannelsModel.h */,  
1170 - 8178D42A1F02044300AA78A4 /* LVCChannelsModel.m */,  
1171 8178D42B1F02044300AA78A4 /* LVCChatRoomModel.h */, 1139 8178D42B1F02044300AA78A4 /* LVCChatRoomModel.h */,
1172 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */, 1140 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */,
1173 - 8178D42D1F02044300AA78A4 /* LVCProgramModel.h */,  
1174 - 8178D42E1F02044300AA78A4 /* LVCProgramModel.m */, 1141 + 8178D4691F021ED800AA78A4 /* LVCTelevisionModel.h */,
  1142 + 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */,
1175 ); 1143 );
1176 path = Model; 1144 path = Model;
1177 sourceTree = "<group>"; 1145 sourceTree = "<group>";
@@ -1183,22 +1151,12 @@ @@ -1183,22 +1151,12 @@
1183 8178D4331F02045500AA78A4 /* Barrage */, 1151 8178D4331F02045500AA78A4 /* Barrage */,
1184 8178D4421F02045500AA78A4 /* LVCPlayer.h */, 1152 8178D4421F02045500AA78A4 /* LVCPlayer.h */,
1185 8178D4431F02045500AA78A4 /* LVCPlayer.m */, 1153 8178D4431F02045500AA78A4 /* LVCPlayer.m */,
1186 - 8178D4381F02045500AA78A4 /* LVCFirstHeaderReusableView.h */,  
1187 - 8178D4391F02045500AA78A4 /* LVCFirstHeaderReusableView.m */,  
1188 - 8178D43A1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.h */,  
1189 - 8178D43B1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.m */,  
1190 - 8178D43C1F02045500AA78A4 /* LVCLiveListCollectionViewCell.h */,  
1191 - 8178D43D1F02045500AA78A4 /* LVCLiveListCollectionViewCell.m */,  
1192 - 8178D43E1F02045500AA78A4 /* LVCMoreSortTableViewCell.h */,  
1193 - 8178D43F1F02045500AA78A4 /* LVCMoreSortTableViewCell.m */,  
1194 - 8178D4401F02045500AA78A4 /* LVCOtherHeaderReusableView.h */,  
1195 - 8178D4411F02045500AA78A4 /* LVCOtherHeaderReusableView.m */, 1154 + 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */,
  1155 + 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */,
1196 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */, 1156 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */,
1197 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */, 1157 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */,
1198 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */, 1158 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */,
1199 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */, 1159 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */,
1200 - 8178D4481F02045500AA78A4 /* LVCTelevisionView.h */,  
1201 - 8178D4491F02045500AA78A4 /* LVCTelevisionView.m */,  
1202 ); 1160 );
1203 path = View; 1161 path = View;
1204 sourceTree = "<group>"; 1162 sourceTree = "<group>";
@@ -2079,6 +2037,7 @@ @@ -2079,6 +2037,7 @@
2079 D25BF88A1E7F7F77007FB138 /* Resource */ = { 2037 D25BF88A1E7F7F77007FB138 /* Resource */ = {
2080 isa = PBXGroup; 2038 isa = PBXGroup;
2081 children = ( 2039 children = (
  2040 + 8178D4671F021C4500AA78A4 /* TelevisionData.json */,
2082 81DFC4251F0113B40029BCB3 /* JsonFile.json */, 2041 81DFC4251F0113B40029BCB3 /* JsonFile.json */,
2083 D25BF88C1E7F7F77007FB138 /* Images */, 2042 D25BF88C1E7F7F77007FB138 /* Images */,
2084 D25BF88B1E7F7F77007FB138 /* Fonts */, 2043 D25BF88B1E7F7F77007FB138 /* Fonts */,
@@ -2182,10 +2141,6 @@ @@ -2182,10 +2141,6 @@
2182 D2888DAA1E6EC014003A77C8 /* View */ = { 2141 D2888DAA1E6EC014003A77C8 /* View */ = {
2183 isa = PBXGroup; 2142 isa = PBXGroup;
2184 children = ( 2143 children = (
2185 - D219E86C1F01002400650F38 /* LVCVodPlayerListView.h */,  
2186 - D219E86D1F01002400650F38 /* LVCVodPlayerListView.m */,  
2187 - D2EBC8581F02011400F198FB /* LVCVodPlayerTableViewCell.h */,  
2188 - D2EBC8591F02011400F198FB /* LVCVodPlayerTableViewCell.m */,  
2189 ); 2144 );
2190 path = View; 2145 path = View;
2191 sourceTree = "<group>"; 2146 sourceTree = "<group>";
@@ -2222,8 +2177,6 @@ @@ -2222,8 +2177,6 @@
2222 D2EBC8661F02108000F198FB /* LiveListService.m */, 2177 D2EBC8661F02108000F198FB /* LiveListService.m */,
2223 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */, 2178 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */,
2224 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */, 2179 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */,
2225 - D2EBC8691F02108000F198FB /* LVCTVLiveViewController.h */,  
2226 - D2EBC86A1F02108000F198FB /* LVCTVLiveViewController.m */,  
2227 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */, 2180 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */,
2228 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */, 2181 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */,
2229 D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */, 2182 D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */,
@@ -2375,6 +2328,7 @@ @@ -2375,6 +2328,7 @@
2375 D25BF8A51E80EC76007FB138 /* 头像.jpg in Resources */, 2328 D25BF8A51E80EC76007FB138 /* 头像.jpg in Resources */,
2376 D2029CC91E6EADE10027CD92 /* SVProgressHUD.bundle in Resources */, 2329 D2029CC91E6EADE10027CD92 /* SVProgressHUD.bundle in Resources */,
2377 D2575C801E76A4F300E3A8FC /* resource.bundle in Resources */, 2330 D2575C801E76A4F300E3A8FC /* resource.bundle in Resources */,
  2331 + 8178D4681F021C4500AA78A4 /* TelevisionData.json in Resources */,
2378 D2029B941E6EAAA50027CD92 /* LaunchScreen.storyboard in Resources */, 2332 D2029B941E6EAAA50027CD92 /* LaunchScreen.storyboard in Resources */,
2379 D2029B911E6EAAA50027CD92 /* animation.xcassets in Resources */, 2333 D2029B911E6EAAA50027CD92 /* animation.xcassets in Resources */,
2380 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */, 2334 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */,
@@ -2421,7 +2375,6 @@ @@ -2421,7 +2375,6 @@
2421 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */, 2375 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */,
2422 D2029C861E6EADE10027CD92 /* Tools.m in Sources */, 2376 D2029C861E6EADE10027CD92 /* Tools.m in Sources */,
2423 4B42A6C41EC00CC800DA09D7 /* UIAlertView+Blocks.m in Sources */, 2377 4B42A6C41EC00CC800DA09D7 /* UIAlertView+Blocks.m in Sources */,
2424 - 8178D44E1F02045500AA78A4 /* LVCLiveListCollectionViewCell.m in Sources */,  
2425 D214CB521EF7CB310014EEBA /* LVCChannelPagingView.m in Sources */, 2378 D214CB521EF7CB310014EEBA /* LVCChannelPagingView.m in Sources */,
2426 4B45CE861EB86A590079AFB7 /* LVCLoginShowView.m in Sources */, 2379 4B45CE861EB86A590079AFB7 /* LVCLoginShowView.m in Sources */,
2427 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */, 2380 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */,
@@ -2430,13 +2383,11 @@ @@ -2430,13 +2383,11 @@
2430 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */, 2383 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */,
2431 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */, 2384 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */,
2432 D22831091E77D8D500627701 /* GiftModel.m in Sources */, 2385 D22831091E77D8D500627701 /* GiftModel.m in Sources */,
2433 - D2EBC85A1F02011400F198FB /* LVCVodPlayerTableViewCell.m in Sources */,  
2434 D23BBDBE1EF8ED4A002FE0B8 /* LVCChannelDetailModel.m in Sources */, 2386 D23BBDBE1EF8ED4A002FE0B8 /* LVCChannelDetailModel.m in Sources */,
2435 D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */, 2387 D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */,
2436 4BD8560F1EBACEF80082061D /* CNLiveWebView.m in Sources */, 2388 4BD8560F1EBACEF80082061D /* CNLiveWebView.m in Sources */,
2437 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, 2389 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
2438 D2029CCB1E6EADE10027CD92 /* SVRadialGradientLayer.m in Sources */, 2390 D2029CCB1E6EADE10027CD92 /* SVRadialGradientLayer.m in Sources */,
2439 - 8178D4541F02045500AA78A4 /* LVCTelevisionView.m in Sources */,  
2440 D23696841E7FC6A900E4BF71 /* chatListCell.m in Sources */, 2391 D23696841E7FC6A900E4BF71 /* chatListCell.m in Sources */,
2441 4B45CE7B1EB86A590079AFB7 /* MinePersonalDataController.m in Sources */, 2392 4B45CE7B1EB86A590079AFB7 /* MinePersonalDataController.m in Sources */,
2442 D2029CAF1E6EADE10027CD92 /* MJRefreshStateHeader.m in Sources */, 2393 D2029CAF1E6EADE10027CD92 /* MJRefreshStateHeader.m in Sources */,
@@ -2446,7 +2397,6 @@ @@ -2446,7 +2397,6 @@
2446 4B45CE7D1EB86A590079AFB7 /* ModifyInfomationController.m in Sources */, 2397 4B45CE7D1EB86A590079AFB7 /* ModifyInfomationController.m in Sources */,
2447 D23BBDBB1EF8E8B2002FE0B8 /* LVCBannerAndMarqueeModel.m in Sources */, 2398 D23BBDBB1EF8E8B2002FE0B8 /* LVCBannerAndMarqueeModel.m in Sources */,
2448 D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */, 2399 D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */,
2449 - 8178D42F1F02044300AA78A4 /* LVCChannelDetailsModel.m in Sources */,  
2450 D2575C7A1E76A4F300E3A8FC /* NHCarViews.m in Sources */, 2400 D2575C7A1E76A4F300E3A8FC /* NHCarViews.m in Sources */,
2451 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */, 2401 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */,
2452 D209AD711EC583D100D82E3B /* MineAccountController.m in Sources */, 2402 D209AD711EC583D100D82E3B /* MineAccountController.m in Sources */,
@@ -2499,7 +2449,6 @@ @@ -2499,7 +2449,6 @@
2499 4BD856181EBAD35C0082061D /* NSDictionary+Safety.m in Sources */, 2449 4BD856181EBAD35C0082061D /* NSDictionary+Safety.m in Sources */,
2500 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */, 2450 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */,
2501 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */, 2451 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */,
2502 - 8178D4301F02044300AA78A4 /* LVCChannelsModel.m in Sources */,  
2503 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */, 2452 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */,
2504 D23BBDB81EF8D15D002FE0B8 /* LVCMainHeaderCollectionReusableView.m in Sources */, 2453 D23BBDB81EF8D15D002FE0B8 /* LVCMainHeaderCollectionReusableView.m in Sources */,
2505 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */, 2454 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */,
@@ -2523,7 +2472,6 @@ @@ -2523,7 +2472,6 @@
2523 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */, 2472 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */,
2524 D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */, 2473 D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */,
2525 4BD856031EBACD530082061D /* AFNetworkActivityIndicatorManager.m in Sources */, 2474 4BD856031EBACD530082061D /* AFNetworkActivityIndicatorManager.m in Sources */,
2526 - 8178D44D1F02045500AA78A4 /* LVCHeaderRollCollectionViewCell.m in Sources */,  
2527 4BD855CD1EBAC4B70082061D /* CNLiveKeychainWrapper.m in Sources */, 2475 4BD855CD1EBAC4B70082061D /* CNLiveKeychainWrapper.m in Sources */,
2528 D2029CB91E6EADE10027CD92 /* SDWebImageCompat.m in Sources */, 2476 D2029CB91E6EADE10027CD92 /* SDWebImageCompat.m in Sources */,
2529 D2029CB61E6EADE10027CD92 /* MKAnnotationView+WebCache.m in Sources */, 2477 D2029CB61E6EADE10027CD92 /* MKAnnotationView+WebCache.m in Sources */,
@@ -2548,7 +2496,6 @@ @@ -2548,7 +2496,6 @@
2548 8178D4641F02060B00AA78A4 /* LVCMessage.m in Sources */, 2496 8178D4641F02060B00AA78A4 /* LVCMessage.m in Sources */,
2549 4B45CE8B1EB86A590079AFB7 /* LVCTextField.m in Sources */, 2497 4B45CE8B1EB86A590079AFB7 /* LVCTextField.m in Sources */,
2550 D2575C461E76857100E3A8FC /* LVCAnimationManager.m in Sources */, 2498 D2575C461E76857100E3A8FC /* LVCAnimationManager.m in Sources */,
2551 - 8178D4321F02044300AA78A4 /* LVCProgramModel.m in Sources */,  
2552 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */, 2499 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */,
2553 D2029D041E6EAE2E0027CD92 /* UILabel+ContentSize.m in Sources */, 2500 D2029D041E6EAE2E0027CD92 /* UILabel+ContentSize.m in Sources */,
2554 4B45CE7C1EB86A590079AFB7 /* MineSettingViewController.m in Sources */, 2501 4B45CE7C1EB86A590079AFB7 /* MineSettingViewController.m in Sources */,
@@ -2560,9 +2507,9 @@ @@ -2560,9 +2507,9 @@
2560 D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */, 2507 D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */,
2561 D209AD6E1EC583B700D82E3B /* MineMessageController.m in Sources */, 2508 D209AD6E1EC583B700D82E3B /* MineMessageController.m in Sources */,
2562 D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */, 2509 D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */,
2563 - 8178D44C1F02045500AA78A4 /* LVCFirstHeaderReusableView.m in Sources */,  
2564 D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */, 2510 D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */,
2565 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */, 2511 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */,
  2512 + 8178D46B1F021ED800AA78A4 /* LVCTelevisionModel.m in Sources */,
2566 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */, 2513 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */,
2567 D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */, 2514 D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */,
2568 D2029CB11E6EADE10027CD92 /* MJRefreshConst.m in Sources */, 2515 D2029CB11E6EADE10027CD92 /* MJRefreshConst.m in Sources */,
@@ -2581,11 +2528,9 @@ @@ -2581,11 +2528,9 @@
2581 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */, 2528 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */,
2582 D25BF87B1E7B8A82007FB138 /* SliderView.m in Sources */, 2529 D25BF87B1E7B8A82007FB138 /* SliderView.m in Sources */,
2583 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */, 2530 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */,
2584 - 8178D4501F02045500AA78A4 /* LVCOtherHeaderReusableView.m in Sources */,  
2585 D2029D031E6EAE2E0027CD92 /* UIImage+ZXExtension.m in Sources */, 2531 D2029D031E6EAE2E0027CD92 /* UIImage+ZXExtension.m in Sources */,
2586 4BD855FC1EBACD530082061D /* AFHTTPSessionManager.m in Sources */, 2532 4BD855FC1EBACD530082061D /* AFHTTPSessionManager.m in Sources */,
2587 4B45CE841EB86A590079AFB7 /* ModifyCommonView.m in Sources */, 2533 4B45CE841EB86A590079AFB7 /* ModifyCommonView.m in Sources */,
2588 - D219E86E1F01002400650F38 /* LVCVodPlayerListView.m in Sources */,  
2589 4BD856081EBACD530082061D /* UIProgressView+AFNetworking.m in Sources */, 2534 4BD856081EBACD530082061D /* UIProgressView+AFNetworking.m in Sources */,
2590 D24571581E8393EB00AA85D6 /* UIImageView+ZXExtension.m in Sources */, 2535 D24571581E8393EB00AA85D6 /* UIImageView+ZXExtension.m in Sources */,
2591 D2029D0A1E6EAE2E0027CD92 /* ZXServerUrl.m in Sources */, 2536 D2029D0A1E6EAE2E0027CD92 /* ZXServerUrl.m in Sources */,
@@ -2624,11 +2569,9 @@ @@ -2624,11 +2569,9 @@
2624 4B42A6C71EC0171800DA09D7 /* PlayRecordCell.m in Sources */, 2569 4B42A6C71EC0171800DA09D7 /* PlayRecordCell.m in Sources */,
2625 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */, 2570 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */,
2626 D24CFC201EFA092300AA6ADB /* JBBannerView.m in Sources */, 2571 D24CFC201EFA092300AA6ADB /* JBBannerView.m in Sources */,
2627 - 8178D44F1F02045500AA78A4 /* LVCMoreSortTableViewCell.m in Sources */,  
2628 D2029CBD1E6EADE10027CD92 /* SDWebImageManager.m in Sources */, 2572 D2029CBD1E6EADE10027CD92 /* SDWebImageManager.m in Sources */,
2629 D2029CB41E6EADE10027CD92 /* UIView+MJExtension.m in Sources */, 2573 D2029CB41E6EADE10027CD92 /* UIView+MJExtension.m in Sources */,
2630 D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */, 2574 D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */,
2631 - D2EBC8731F02108000F198FB /* LVCTVLiveViewController.m in Sources */,  
2632 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */, 2575 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */,
2633 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */, 2576 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */,
2634 D2029CA91E6EADE10027CD92 /* MJRefreshAutoStateFooter.m in Sources */, 2577 D2029CA91E6EADE10027CD92 /* MJRefreshAutoStateFooter.m in Sources */,
@@ -2645,6 +2588,7 @@ @@ -2645,6 +2588,7 @@
2645 D2888D941E6EB8B4003A77C8 /* LVCTabBar.m in Sources */, 2588 D2888D941E6EB8B4003A77C8 /* LVCTabBar.m in Sources */,
2646 4B45CE771EB86A590079AFB7 /* IDViewController.m in Sources */, 2589 4B45CE771EB86A590079AFB7 /* IDViewController.m in Sources */,
2647 4BD855FF1EBACD530082061D /* AFURLConnectionOperation.m in Sources */, 2590 4BD855FF1EBACD530082061D /* AFURLConnectionOperation.m in Sources */,
  2591 + 8178D46E1F0225E500AA78A4 /* LVCTelevisionCell.m in Sources */,
2648 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */, 2592 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */,
2649 D25530061E7911A800DF38A5 /* GiftAnimationAction.m in Sources */, 2593 D25530061E7911A800DF38A5 /* GiftAnimationAction.m in Sources */,
2650 4B45CE881EB86A590079AFB7 /* LVCMineShowCell.m in Sources */, 2594 4B45CE881EB86A590079AFB7 /* LVCMineShowCell.m in Sources */,
LiveVideoCloud.xcodeproj/xcuserdata/iOS.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Bucket
  3 + type = "1"
  4 + version = "2.0">
  5 + <Breakpoints>
  6 + <BreakpointProxy
  7 + BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
  8 + <BreakpointContent
  9 + shouldBeEnabled = "Yes"
  10 + ignoreCount = "0"
  11 + continueAfterRunningActions = "No"
  12 + scope = "0"
  13 + stopOnStyle = "0">
  14 + </BreakpointContent>
  15 + </BreakpointProxy>
  16 + </Breakpoints>
  17 +</Bucket>
LiveVideoCloud/AppCustoms/Main/ZXTabBarController.m
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 #import "LVCTabBar.h" 13 #import "LVCTabBar.h"
14 #import "LoginViewController.h" 14 #import "LoginViewController.h"
15 #import "LVCUGCLiveListController.h" 15 #import "LVCUGCLiveListController.h"
  16 +#import "LVCTelevisioController.h"
16 #import "LVCVodPlayerListController.h" 17 #import "LVCVodPlayerListController.h"
17 18
18 @interface ZXTabBarController ()<LVCTabBarDelegate> 19 @interface ZXTabBarController ()<LVCTabBarDelegate>
LiveVideoCloud/Classes/Sections/PGCSections/Controller/LVCLivePlayerController.h
@@ -7,10 +7,10 @@ @@ -7,10 +7,10 @@
7 // 7 //
8 8
9 #import "BaseViewController.h" 9 #import "BaseViewController.h"
10 -#import "LVCChannelDetailsModel.h" 10 +#import "LVCTelevisionModel.h"
11 11
12 @interface LVCLivePlayerController : BaseViewController 12 @interface LVCLivePlayerController : BaseViewController
13 13
14 -@property (nonatomic, strong) LVCChannelDetailsModel *model; 14 +@property (nonatomic, strong) LVCTelevisionModel *model;
15 15
16 @end 16 @end
LiveVideoCloud/Classes/Sections/PGCSections/Controller/LVCTelevisioController.m
@@ -7,23 +7,15 @@ @@ -7,23 +7,15 @@
7 // 7 //
8 8
9 #import "LVCTelevisioController.h" 9 #import "LVCTelevisioController.h"
10 -#import "LVCLiveListCollectionViewCell.h"  
11 -#import "LVCFirstHeaderReusableView.h"  
12 -#import "LVCOtherHeaderReusableView.h"  
13 -#import "LVCChannelDetailsModel.h"  
14 -#import "LVCChannelsModel.h"  
15 -#import "LVCLivePlayerController.h" 10 +#import "LVCTelevisionModel.h"
  11 +#import "LVCTelevisionCell.h"
16 12
17 -static NSString *cellId = @"LVCLiveListCollectionViewCell";  
18 -static NSString *firstHeaderId = @"LVCFirstHeaderReusableView";  
19 -static NSString *otherHeaderId = @"LVCOtherHeaderReusableView";  
20 -  
21 -@interface LVCTelevisioController () 13 +@interface LVCTelevisioController ()<UITableViewDelegate, UITableViewDataSource>
  14 +{
  15 + NSMutableArray *_channelsModelArray;
  16 +}
22 17
23 -@property (nonatomic, strong) UICollectionView *collectionView;  
24 -@property (nonatomic, strong) NSArray *bannerModelArray; //banner数据源  
25 -@property (nonatomic, strong) NSArray *marqueeModelArray;  
26 -@property (nonatomic, strong) NSArray *channelsModelArray; 18 +@property (nonatomic, strong) UITableView *tableView;
27 19
28 @end 20 @end
29 21
@@ -33,166 +25,70 @@ static NSString *otherHeaderId = @&quot;LVCOtherHeaderReusableView&quot;; @@ -33,166 +25,70 @@ static NSString *otherHeaderId = @&quot;LVCOtherHeaderReusableView&quot;;
33 [super viewDidLoad]; 25 [super viewDidLoad];
34 // Do any additional setup after loading the view. 26 // Do any additional setup after loading the view.
35 self.view.backgroundColor = [UIColor whiteColor]; 27 self.view.backgroundColor = [UIColor whiteColor];
  28 + self.navigationItem.title = @"直播";
  29 + _channelsModelArray = [[NSMutableArray alloc] init];
36 30
37 - [self.view addSubview:self.collectionView]; 31 + [self.view addSubview:self.tableView];
38 [self loadData]; 32 [self loadData];
39 33
40 } 34 }
41 35
42 -#pragma mark -  
43 -#pragma mark - UICollectionViewDataSource  
44 -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {  
45 - if (self.channelsModelArray.count > 0) {  
46 - return self.channelsModelArray.count + 1;  
47 - }  
48 - return self.channelsModelArray.count;  
49 -} 36 +- (void)loadData {
50 37
51 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 38 + NSString *path = [[NSBundle mainBundle] pathForResource:@"TelevisionData" ofType:@"json"];
  39 + NSData *data=[NSData dataWithContentsOfFile:path];
  40 + NSError *error;
  41 + id responseObject=[NSJSONSerialization JSONObjectWithData:data
  42 + options:NSJSONReadingAllowFragments
  43 + error:&error];
52 44
53 - if (section == 0) {  
54 - return 0; 45 + for (NSDictionary *dataDic in responseObject) {
  46 + LVCTelevisionModel *model = [LVCTelevisionModel mj_objectWithKeyValues:dataDic];
  47 + [_channelsModelArray addObject:model];
55 } 48 }
56 - LVCChannelsModel *model = self.channelsModelArray[section - 1];  
57 -  
58 - NSArray *array = model.programs;  
59 -  
60 - return array.count;  
61 -}  
62 49
63 -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {  
64 -  
65 - LVCLiveListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];  
66 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
67 -  
68 - LVCChannelDetailsModel *details = model.programs[indexPath.item];  
69 -  
70 - cell.details = details;  
71 -  
72 - return cell; 50 + [_tableView reloadData];
73 } 51 }
74 52
75 -- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {  
76 -  
77 - if (kind == UICollectionElementKindSectionHeader) {  
78 -  
79 - if (indexPath.section == 0) {  
80 -  
81 - LVCFirstHeaderReusableView *firstHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:firstHeaderId forIndexPath:indexPath];  
82 -  
83 - firstHeaderView.imageUrls = [self bannerImage];  
84 - firstHeaderView.modelArray = self.bannerModelArray;  
85 -  
86 - return firstHeaderView;  
87 - } else {  
88 -  
89 - LVCOtherHeaderReusableView *otherHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:otherHeaderId forIndexPath:indexPath];  
90 -  
91 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
92 -  
93 - otherHeaderView.model = model;  
94 -  
95 - return otherHeaderView;  
96 - }  
97 - }  
98 - return nil; 53 +#pragma mark -
  54 +#pragma mark - UITableviewDelegate
  55 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  56 + return _channelsModelArray.count;
99 } 57 }
100 58
101 -- (NSArray <NSURL *>*)bannerImage {  
102 -  
103 - NSMutableArray *arrayM = [NSMutableArray array];  
104 - for (LVCChannelDetailsModel *model in _bannerModelArray) {  
105 - NSString *imgStr = model.img;  
106 - NSURL *url = [NSURL URLWithString:imgStr];  
107 - [arrayM addObject:url];  
108 - }  
109 - return arrayM.copy; 59 +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  60 + return SCREEN_WIDTH*9/16+40;
110 } 61 }
111 62
112 -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { 63 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
113 64
114 - if (section == 0) {  
115 - return CGSizeMake(SCREEN_WIDTH, SCREEN_WIDTH * 0.5);  
116 - }else {  
117 - return CGSizeMake(SCREEN_WIDTH, 47); 65 + static NSString *cellId = @"LVCTelevisionCell";
  66 + LVCTelevisionCell *cell = [[LVCTelevisionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
  67 + if (!cell) {
  68 + cell = [tableView dequeueReusableCellWithIdentifier:cellId];
118 } 69 }
119 -}  
120 -  
121 -#pragma mark -  
122 -#pragma mark - UICollectionViewDelegate  
123 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {  
124 -  
125 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
126 - LVCChannelDetailsModel *details = model.programs[indexPath.item]; 70 + LVCTelevisionModel *model = [_channelsModelArray objectAtIndex:indexPath.row];
  71 + cell.model = model;
  72 + return cell;
127 73
128 - LVCLivePlayerController *playVC = [[LVCLivePlayerController alloc] init];  
129 - playVC.model = details;  
130 - self.navigationController.navigationBar.hidden = YES;  
131 - [self.navigationController pushViewController:playVC animated:YES];  
132 - self.hidesBottomBarWhenPushed = NO;  
133 } 74 }
134 75
135 -#pragma mark -  
136 -#pragma mark - 加载数据  
137 -- (void)loadData {  
138 -  
139 - NSString *path = [[NSBundle mainBundle] pathForResource:@"JsonFile" ofType:@"json"];  
140 - NSData *data=[NSData dataWithContentsOfFile:path];  
141 - NSError *error;  
142 - id responseObject=[NSJSONSerialization JSONObjectWithData:data  
143 - options:NSJSONReadingAllowFragments  
144 - error:&error];  
145 - // NSLog(@"%@",responseObject);  
146 -  
147 - if (responseObject[@"channels"] && [responseObject[@"channels"] isKindOfClass:[NSArray class]]) {  
148 -  
149 - NSMutableArray *arrayM = [[NSMutableArray alloc]init];  
150 - for (NSDictionary *dict in responseObject[@"channels"]) {  
151 - LVCChannelsModel *model = [LVCChannelsModel mj_objectWithKeyValues:dict];  
152 - [arrayM addObject:model];  
153 - }  
154 - self.channelsModelArray = arrayM;  
155 - }  
156 - if (responseObject[@"banner"] && [responseObject[@"banner"] isKindOfClass:[NSArray class]]) {  
157 -  
158 - NSMutableArray *arrayM = [NSMutableArray array];  
159 - for (NSDictionary *dict in responseObject[@"banner"]) {  
160 - LVCChannelDetailsModel *rollModel = [LVCChannelDetailsModel mj_objectWithKeyValues:dict];  
161 - [arrayM addObject:rollModel];  
162 - }  
163 - self.bannerModelArray = arrayM;  
164 - }  
165 - [self.collectionView reloadData]; 76 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
166 77
167 } 78 }
168 79
169 #pragma mark - 80 #pragma mark -
170 #pragma mark - getter 81 #pragma mark - getter
171 -- (UICollectionView *)collectionView {  
172 -  
173 - if (!_collectionView) {  
174 -  
175 - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];  
176 - layout.itemSize = CGSizeMake((SCREEN_WIDTH-30)/2, (SCREEN_WIDTH-30)/2*9/16+65);  
177 - layout.minimumLineSpacing = 0;  
178 - layout.minimumInteritemSpacing = 0;  
179 - layout.sectionInset = UIEdgeInsetsMake(6, 10, 0, 10);  
180 - _collectionView.showsHorizontalScrollIndicator = NO;  
181 -  
182 - _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-64-49) collectionViewLayout:layout];  
183 - _collectionView.backgroundColor = [UIColor whiteColor];  
184 -  
185 - [_collectionView registerClass:[LVCLiveListCollectionViewCell class] forCellWithReuseIdentifier:cellId];  
186 - [_collectionView registerClass:[LVCFirstHeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:firstHeaderId];  
187 - [_collectionView registerClass:[LVCOtherHeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:otherHeaderId];  
188 - _collectionView.scrollsToTop = NO;  
189 - _collectionView.dataSource = self;  
190 - _collectionView.delegate = self; 82 +- (UITableView *)tableView
  83 +{
  84 + if (!_tableView) {
  85 + _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-49) style:UITableViewStylePlain];
  86 + _tableView.delegate = self;
  87 + _tableView.dataSource = self;
191 } 88 }
192 - return _collectionView; 89 + return _tableView;
193 } 90 }
194 91
195 -  
196 - (void)didReceiveMemoryWarning { 92 - (void)didReceiveMemoryWarning {
197 [super didReceiveMemoryWarning]; 93 [super didReceiveMemoryWarning];
198 // Dispose of any resources that can be recreated. 94 // Dispose of any resources that can be recreated.
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCChannelDetailsModel.h deleted 100644 → 0
1 -//  
2 -// LVCChannelDetailsModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <Foundation/Foundation.h>  
10 -  
11 -@interface LVCChannelDetailsModel : NSObject  
12 -  
13 -  
14 -// 直播播放 channelId  
15 -@property (nonatomic, copy) NSString *mediaId;  
16 -// 播放类型 live直播  
17 -@property (nonatomic, copy) NSString *type;  
18 -// 节目名称  
19 -@property (nonatomic, copy) NSString *title;  
20 -// 节目详情  
21 -@property (nonatomic, copy) NSString *subTitle;  
22 -// 节目图片  
23 -@property (nonatomic, copy) NSString *img;  
24 -// 正在直播  
25 -@property (nonatomic, copy) NSString *currentPlay;  
26 -// 即将直播  
27 -@property (nonatomic, copy) NSString *nextPlay;  
28 -// 活动id (???)  
29 -@property (nonatomic, copy) NSString *activityId;  
30 -@property (nonatomic, copy) NSString *docID;  
31 -@property (nonatomic, copy) NSString *desc;  
32 -  
33 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCChannelDetailsModel.m deleted 100644 → 0
1 -//  
2 -// LVCChannelDetailsModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCChannelDetailsModel.h"  
10 -  
11 -@implementation LVCChannelDetailsModel  
12 -  
13 -- (void)setValue:(id)value forUndefinedKey:(NSString *)key {  
14 -  
15 -}  
16 -  
17 -- (NSString *)description {  
18 -  
19 - return [NSString stringWithFormat:@"mediaId:%@, type:%@, title:%@, img:%@",_mediaId,_type,_title,_img];  
20 -}  
21 -  
22 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCChannelsModel.h deleted 100644 → 0
1 -//  
2 -// LVCChannelsModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <Foundation/Foundation.h>  
10 -#import "LVCChannelDetailsModel.h"  
11 -  
12 -@interface LVCChannelsModel : NSObject  
13 -  
14 -@property (nonatomic, copy) NSString *title;  
15 -// 列表详情模型数组  
16 -@property (nonatomic, strong) NSArray <LVCChannelDetailsModel *> *programs;  
17 -@property (nonatomic, copy) NSString *cid;  
18 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCChannelsModel.m deleted 100644 → 0
1 -//  
2 -// LVCChannelsModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCChannelsModel.h"  
10 -  
11 -@implementation LVCChannelsModel  
12 -  
13 -- (void)setValue:(id)value forKey:(NSString *)key {  
14 -  
15 - if ([key isEqualToString:@"programs"]) {  
16 -  
17 - NSArray *array = value;  
18 -  
19 - NSMutableArray *arrayM = [NSMutableArray array];  
20 -  
21 - for (NSDictionary *dict in array) {  
22 -  
23 - LVCChannelDetailsModel *model = [[LVCChannelDetailsModel alloc] init];  
24 -  
25 - [model setValuesForKeysWithDictionary:dict];  
26 -  
27 - [arrayM addObject:model];  
28 - }  
29 -  
30 - _programs = arrayM.copy;  
31 -  
32 - return;  
33 - }  
34 -  
35 - [super setValue:value forKey:key];  
36 -}  
37 -  
38 -- (void)setValue:(id)value forUndefinedKey:(NSString *)key {  
39 -  
40 -}  
41 -  
42 -- (NSString *)description {  
43 - return [NSString stringWithFormat:@"title:%@, programs:%@",_title,_programs];  
44 -}  
45 -  
46 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCProgramModel.h deleted 100644 → 0
1 -//  
2 -// LVCProgramModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <Foundation/Foundation.h>  
10 -  
11 -@interface LVCProgramModel : NSObject  
12 -  
13 -@property (nonatomic, strong)NSString *currentPlay;  
14 -@property (nonatomic, strong)NSString *desc;  
15 -@property (nonatomic, strong)NSString *docID;  
16 -@property (nonatomic, strong)NSString *img;  
17 -@property (nonatomic, strong)NSString *mediaId;  
18 -@property (nonatomic, strong)NSString *nextPlay;  
19 -@property (nonatomic, strong)NSString *subTitle;  
20 -@property (nonatomic, strong)NSString *title;  
21 -@property (nonatomic, strong)NSString *type;  
22 -@property (nonatomic, strong)NSString *vipFlag;  
23 -  
24 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCTelevisionModel.h 0 → 100644
  1 +//
  2 +// LVCTelevisionModel.h
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by iOS on 2017/6/27.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +
  11 +@interface LVCTelevisionModel : NSObject
  12 +
  13 +@property (nonatomic, strong) NSString *docID;
  14 +@property (nonatomic, strong) NSString *title;
  15 +@property (nonatomic, strong) NSString *img;
  16 +@property (nonatomic, strong) NSString *type;
  17 +@property (nonatomic, strong) NSString *mediaId;
  18 +
  19 +@end
LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCProgramModel.m renamed to LiveVideoCloud/Classes/Sections/PGCSections/Model/LVCTelevisionModel.m
1 // 1 //
2 -// LVCProgramModel.m 2 +// LVCTelevisionModel.m
3 // LiveVideoCloud 3 // LiveVideoCloud
4 // 4 //
5 -// Created by iOS on 17/3/27. 5 +// Created by iOS on 2017/6/27.
6 // Copyright © 2017年 cnlive. All rights reserved. 6 // Copyright © 2017年 cnlive. All rights reserved.
7 // 7 //
8 8
9 -#import "LVCProgramModel.h" 9 +#import "LVCTelevisionModel.h"
10 10
11 -@implementation LVCProgramModel 11 +@implementation LVCTelevisionModel
12 12
13 @end 13 @end
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCFirstHeaderReusableView.h deleted 100644 → 0
1 -//  
2 -// LVCFirstHeaderReusableView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -#import "LVCChannelDetailsModel.h"  
11 -  
12 -@interface LVCFirstHeaderReusableView : UICollectionReusableView  
13 -  
14 -@property (nonatomic, strong) NSArray <NSURL *> *imageUrls;  
15 -@property (nonatomic, strong) NSArray <LVCChannelDetailsModel *> *modelArray;  
16 -  
17 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCFirstHeaderReusableView.m deleted 100644 → 0
1 -//  
2 -// LVCFirstHeaderReusableView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCFirstHeaderReusableView.h"  
10 -#import "LVCHeaderRollCollectionViewCell.h"  
11 -#import "LVCLivePlayerController.h"  
12 -  
13 -#define kDataScaleSeed 100  
14 -static NSString *cellId = @"cellId";  
15 -  
16 -@interface CZSlideLayout: UICollectionViewFlowLayout  
17 -  
18 -@end  
19 -@implementation CZSlideLayout  
20 -  
21 -- (void)prepareLayout {  
22 - [super prepareLayout];  
23 - self.itemSize = self.collectionView.bounds.size;  
24 - self.minimumLineSpacing = 0;  
25 - self.minimumInteritemSpacing = 0;  
26 - self.scrollDirection = UICollectionViewScrollDirectionHorizontal;  
27 -}  
28 -@end  
29 -  
30 -@interface LVCFirstHeaderReusableView ()<UICollectionViewDelegate,UICollectionViewDataSource>  
31 -{  
32 - // 定时器  
33 - NSTimer *_timer;  
34 - // 定时器触发时间  
35 - NSTimeInterval _timerDuration;  
36 -}  
37 -  
38 -@property (nonatomic, weak) UICollectionView *collectionView;  
39 -@property (nonatomic, weak) UIPageControl *pageControl;  
40 -@property (nonatomic, strong)UIButton *button;  
41 -@property (nonatomic, strong)UILabel *cycleViewTitle; //轮播下方标题  
42 -  
43 -@end  
44 -  
45 -@implementation LVCFirstHeaderReusableView  
46 -  
47 -#pragma mark - 构造函数  
48 -- (instancetype)initWithFrame:(CGRect)frame  
49 -{  
50 - self = [super initWithFrame:frame];  
51 - if (self) {  
52 - [self setupUI];  
53 - }  
54 - return self;  
55 -}  
56 -  
57 -#pragma mark - 设置数据  
58 -- (void)setImageUrls:(NSArray<NSURL *> *)imageUrls {  
59 - _imageUrls = imageUrls;  
60 -  
61 - if (_timer != nil) {  
62 - [_timer invalidate];  
63 - }  
64 - [_collectionView reloadData];  
65 - [self addSubview:self.cycleViewTitle];  
66 -  
67 - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:_imageUrls.count * kDataScaleSeed inSection:0];  
68 -  
69 - [_collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];  
70 -  
71 - // _pageControl.currentPage = 0;  
72 - // _pageControl.numberOfPages = _imageUrls.count;  
73 -  
74 - _timerDuration = 4.0;  
75 - _timer = [NSTimer timerWithTimeInterval:_timerDuration target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];  
76 -  
77 - [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];  
78 -}  
79 -  
80 -- (void)setModelArray:(NSArray<LVCChannelDetailsModel *> *)modelArray {  
81 - _modelArray = modelArray;  
82 - self.cycleViewTitle.text = [NSString stringWithFormat:@" %@",_modelArray[0].title];  
83 -}  
84 -  
85 -#pragma mark - 子视图  
86 -- (UILabel *)cycleViewTitle  
87 -{  
88 - if (!_cycleViewTitle) {  
89 -  
90 - _cycleViewTitle = [[UILabel alloc] initWithFrame:CGRectMake(10, self.collectionView.bottom-35, self.collectionView.width, 35)];  
91 - _cycleViewTitle.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];  
92 - _cycleViewTitle.textColor = [UIColor whiteColor];  
93 - _cycleViewTitle.font = [UIFont systemFontOfSize:19];  
94 - }  
95 - return _cycleViewTitle;  
96 -}  
97 -  
98 -#pragma mark - 时钟方法  
99 -- (void)updateTimer {  
100 -  
101 - NSIndexPath *indexPath = [_collectionView indexPathsForVisibleItems].lastObject;  
102 - NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:indexPath.item + 1 inSection:indexPath.section];  
103 -  
104 - [_collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];  
105 -}  
106 -  
107 -#pragma mark - UICollectionViewDataSource 数据源协议方法!  
108 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
109 -  
110 - return _imageUrls.count * kDataScaleSeed * 2;  
111 -}  
112 -  
113 -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {  
114 -  
115 - LVCHeaderRollCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];  
116 - NSInteger index = indexPath.item % _imageUrls.count;  
117 - cell.imageUrl = _imageUrls[index];  
118 - return cell;  
119 -}  
120 -  
121 -#pragma mark - UICollectionViewDelegate  
122 -- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
123 -  
124 - if (_imageUrls.count == 0) {  
125 - return;  
126 - }  
127 -  
128 - CGFloat offsetX = scrollView.contentOffset.x / scrollView.bounds.size.width;  
129 -  
130 - // 2. 根据 offsetX 四舍五入计算页数  
131 - NSInteger page = (NSInteger)(offsetX + 0.5);  
132 -  
133 - // 3. 根据数组数量,取余数  
134 - page = page % _imageUrls.count;  
135 -  
136 - // NSLog(@"%zd!!!", page);  
137 -  
138 - _pageControl.currentPage = page;  
139 -  
140 - self.cycleViewTitle.text = [NSString stringWithFormat:@" %@",_modelArray[page].title];  
141 -}  
142 -  
143 -/**  
144 - * 通过设置 contentOffset 动画滚动完成之后调用  
145 - */  
146 -- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {  
147 - // 主动调用动画停止代理方法  
148 - [self scrollViewDidEndDecelerating:scrollView];  
149 -}  
150 -  
151 -/**  
152 - * 滚动视图停止滚动会调用  
153 - */  
154 -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {  
155 -  
156 - // 根据 contentOffset.x 判断页数  
157 - NSInteger page = scrollView.contentOffset.x / scrollView.bounds.size.width;  
158 -  
159 - // lastItem = _imageUrl.count * 2  
160 - NSInteger lastItem = [_collectionView numberOfItemsInSection:0];  
161 -  
162 - // NSLog(@"第 %zd 页 - lastItem %zd", page, lastItem);  
163 - // 只处理第 0 页,和最后一页  
164 - if (page == 0 || page == (lastItem - 1)) {  
165 - // 如果是 0 页,跳转到 _imageUrl.count  
166 - // 如果是最后一页,跳转到 _imageUrl.count - 1  
167 - NSInteger offset = _imageUrls.count * kDataScaleSeed;  
168 -  
169 - // 判断最后一页  
170 - if (page == (lastItem - 1)) {  
171 - offset = offset - 1; // (5 - 1) * 10 = 40 // 5 * 10 - 1  
172 - }  
173 -  
174 - // 设置 contentOffset  
175 - // NSLog(@"我要跳转到 %zd", offset);  
176 -  
177 - CGFloat width = scrollView.bounds.size.width;  
178 -  
179 - scrollView.contentOffset = CGPointMake(offset * width, 0);  
180 - }  
181 -}  
182 -  
183 -// 开始拖,暂停时钟!  
184 -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {  
185 -  
186 - _timer.fireDate = [NSDate distantFuture];  
187 -}  
188 -  
189 -// 结束拖,继续时钟!  
190 -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {  
191 -  
192 - _timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:_timerDuration];  
193 -}  
194 -  
195 -// 选择  
196 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath  
197 -{  
198 -  
199 - LVCChannelDetailsModel *details = [_modelArray safetyObjectAtIndex:indexPath.row % 5];  
200 - self.viewController.tabBarController.tabBar.hidden = YES;  
201 - LVCLivePlayerController *playVC = [[LVCLivePlayerController alloc] init];  
202 - playVC.model = details;  
203 - self.viewController.navigationController.navigationBar.hidden = YES;  
204 - self.viewController.hidesBottomBarWhenPushed = YES;  
205 - [self.viewController.navigationController pushViewController:playVC animated:YES];  
206 - self.viewController.hidesBottomBarWhenPushed = NO;  
207 -}  
208 -  
209 -#pragma mark - 第一个组头设置界面  
210 -- (void)setupUI {  
211 -  
212 - CZSlideLayout *layout = [[CZSlideLayout alloc] init];  
213 - UICollectionView *cv = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 7, SCREEN_WIDTH-20, (SCREEN_WIDTH-20)/2) collectionViewLayout:layout];  
214 - cv.backgroundColor = [UIColor whiteColor];  
215 -  
216 - [self addSubview:cv];  
217 -  
218 - [cv registerClass:[LVCHeaderRollCollectionViewCell class] forCellWithReuseIdentifier:cellId];  
219 -  
220 - cv.dataSource = self;  
221 - cv.delegate = self;  
222 -  
223 - cv.pagingEnabled = YES;  
224 - cv.showsVerticalScrollIndicator = NO;  
225 - cv.showsHorizontalScrollIndicator = NO;  
226 - cv.bounces = NO;  
227 -  
228 - UIPageControl *pager = [[UIPageControl alloc] init];  
229 - pager.numberOfPages = 0;  
230 - pager.currentPage = 0;  
231 - pager.currentPageIndicatorTintColor = [UIColor yellowColor];  
232 - pager.pageIndicatorTintColor = [UIColor redColor];  
233 - pager.userInteractionEnabled = NO;  
234 -  
235 - _collectionView = cv;  
236 - _pageControl = pager;  
237 -}  
238 -  
239 -- (void)removeFromSuperview {  
240 - [super removeFromSuperview];  
241 -  
242 - [_timer invalidate];  
243 -}  
244 -  
245 -// 添加了时钟 & 运行循环,dealloc 方法不会被调用!  
246 -- (void)dealloc {  
247 -  
248 -}  
249 -  
250 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCHeaderRollCollectionViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCHeaderRollCollectionViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCHeaderRollCollectionViewCell : UICollectionViewCell  
12 -  
13 -@property (nonatomic, strong) NSURL *imageUrl;  
14 -  
15 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCHeaderRollCollectionViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCHeaderRollCollectionViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCHeaderRollCollectionViewCell.h"  
10 -  
11 -@interface LVCHeaderRollCollectionViewCell ()  
12 -  
13 -@property (nonatomic, strong) UIImageView *imageView;  
14 -  
15 -@end  
16 -  
17 -@implementation LVCHeaderRollCollectionViewCell  
18 -  
19 -- (instancetype)initWithFrame:(CGRect)frame  
20 -{  
21 - self = [super initWithFrame:frame];  
22 - if (self) {  
23 -  
24 - [self.contentView addSubview:self.imageView];  
25 -  
26 - }  
27 - return self;  
28 -}  
29 -  
30 -#pragma mark -  
31 -#pragma mark - setter  
32 -- (void)setImageUrl:(NSURL *)imageUrl {  
33 - _imageUrl = imageUrl;  
34 - [_imageView sd_setImageWithURL:imageUrl placeholderImage:[UIImage imageNamed:@"load_03"]];  
35 -}  
36 -  
37 -#pragma mark -  
38 -#pragma mark - gstter  
39 -- (UIImageView *)imageView  
40 -{  
41 - if (!_imageView) {  
42 - _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-20, (SCREEN_WIDTH-20)/2)];  
43 - _imageView.backgroundColor = [UIColor whiteColor];  
44 - _imageView.contentMode = UIViewContentModeScaleToFill;  
45 - }  
46 - return _imageView;  
47 -}  
48 -  
49 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCLiveListCollectionViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCLiveListCollectionViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -#import "LVCChannelDetailsModel.h"  
11 -  
12 -@interface LVCLiveListCollectionViewCell : UICollectionViewCell  
13 -  
14 -@property (nonatomic, strong) LVCChannelDetailsModel *details;  
15 -  
16 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCLiveListCollectionViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCLiveListCollectionViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCLiveListCollectionViewCell.h"  
10 -  
11 -// 首页横版cell比例  
12 -#define H_Cell_Ratio (196.0/300)  
13 -  
14 -@interface LVCLiveListCollectionViewCell ()  
15 -  
16 -@property (nonatomic, strong)UIImageView *image;  
17 -@property (nonatomic, strong)UILabel *title;  
18 -@property (nonatomic, strong)UILabel *detail;  
19 -  
20 -@end  
21 -  
22 -@implementation LVCLiveListCollectionViewCell  
23 -  
24 -- (instancetype)initWithFrame:(CGRect)frame  
25 -{  
26 - self = [super initWithFrame:frame];  
27 - if (self) {  
28 -  
29 - self.contentView.backgroundColor = [UIColor whiteColor];  
30 - [self.contentView addSubview:self.image];  
31 - [self.contentView addSubview:self.title];  
32 - [self.contentView addSubview:self.detail];  
33 -  
34 - }  
35 - return self;  
36 -}  
37 -  
38 -- (void)setDetails:(LVCChannelDetailsModel *)details {  
39 -  
40 - self.title.font = [UIFont systemFontOfSize:13];  
41 - self.detail.font = [UIFont systemFontOfSize:12];  
42 - self.title.text = [NSString stringWithFormat:@"正在直播:%@", details.currentPlay];  
43 - self.detail.text = [NSString stringWithFormat:@"即将直播:%@", details.nextPlay];  
44 - [self.image sd_setImageWithURL:[NSURL URLWithString:details.img] placeholderImage:[UIImage imageNamed:@"load_03"]];  
45 -  
46 -}  
47 -  
48 -#pragma mark -  
49 -#pragma mark - getter  
50 -- (UIImageView *)image  
51 -{  
52 - if (!_image) {  
53 - _image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.contentView.width, (self.contentView.width)*H_Cell_Ratio)];  
54 - _image.backgroundColor = [UIColor grayColor];  
55 - _image.contentMode = UIViewContentModeScaleAspectFill;  
56 - _image.clipsToBounds = YES;  
57 - }  
58 - return _image;  
59 -}  
60 -  
61 -- (UILabel *)title  
62 -{  
63 - if (!_title) {  
64 - _title = [[UILabel alloc] initWithFrame:CGRectMake(0, self.image.bottom+7, self.contentView.width, 12)];  
65 - _title.font = [UIFont systemFontOfSize:14];  
66 - _title.textColor = [UIColor blackColorZX];  
67 - }  
68 - return _title;  
69 -}  
70 -  
71 -- (UILabel *)detail  
72 -{  
73 - if (!_detail) {  
74 - _detail = [[UILabel alloc] initWithFrame:CGRectMake(0, self.title.bottom+7, self.contentView.width, 11)];  
75 - _detail.font = [UIFont systemFontOfSize:12];  
76 - _detail.textColor = [UIColor grayColorZX];  
77 - }  
78 - return _detail;  
79 -}  
80 -  
81 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCMoreSortTableViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCMoreSortTableViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -#import "LVCProgramModel.h"  
11 -  
12 -@interface LVCMoreSortTableViewCell : UITableViewCell  
13 -  
14 -@property (nonatomic, strong) LVCProgramModel *model;  
15 -  
16 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCMoreSortTableViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCMoreSortTableViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCMoreSortTableViewCell.h"  
10 -  
11 -@interface LVCMoreSortTableViewCell ()  
12 -  
13 -@property(nonatomic,strong)UIImageView *imgView;  
14 -@property(nonatomic,strong)UILabel *titleLab;  
15 -@property(nonatomic,strong)UILabel *desLab;  
16 -  
17 -@end  
18 -  
19 -@implementation LVCMoreSortTableViewCell  
20 -  
21 -#pragma mark - Calculate Size Specs  
22 -  
23 -- (CGFloat)imageWidth {  
24 -  
25 - if (SCREEN_WIDTH == 320.0) {  
26 - return 96.0;  
27 - } else if (SCREEN_WIDTH == 375.0) {  
28 - return 112.0;  
29 - } else if (SCREEN_WIDTH == 414.0) {  
30 - return 124.0;  
31 - }  
32 -  
33 - return SCREEN_WIDTH*0.3;  
34 -}  
35 -  
36 -- (CGFloat)imageHeight {  
37 - if (SCREEN_WIDTH == 320.0) {  
38 - return 62.5;  
39 - } else if (SCREEN_WIDTH == 375.0) {  
40 - return 73.0;  
41 - } else if (SCREEN_WIDTH == 414.0) {  
42 - return 81.0;  
43 - }  
44 -  
45 - return SCREEN_WIDTH*0.3*146/224;  
46 -}  
47 -  
48 -- (CGFloat)imageMargin {  
49 - if (SCREEN_WIDTH == 320.0) {  
50 - return 8.0;  
51 - } else if (SCREEN_WIDTH == 375.0) {  
52 - return 10.0;  
53 - } else if (SCREEN_WIDTH == 414.0) {  
54 - return 11.0;  
55 - }  
56 -  
57 - return 10.0;  
58 -}  
59 -  
60 -- (CGFloat)titleMargin {  
61 - if (SCREEN_WIDTH == 320.0) {  
62 - return 24.0;  
63 - } else if (SCREEN_WIDTH == 375.0) {  
64 - return 28.0;  
65 - } else if (SCREEN_WIDTH == 414.0) {  
66 - return 31.0;  
67 - }  
68 -  
69 - return 28.0;  
70 -}  
71 -  
72 -- (CGFloat)subtitleMargin  
73 -{  
74 - if (SCREEN_WIDTH == 320.0) {  
75 - return 48.0;  
76 - } else if (SCREEN_WIDTH == 375.0) {  
77 - return 55.0;  
78 - } else if (SCREEN_WIDTH == 414.0) {  
79 - return 60.0;  
80 - }  
81 -  
82 - return 53.0;  
83 -}  
84 -  
85 -- (CGFloat)titleFontSize  
86 -{  
87 - if (SCREEN_WIDTH == 320.0) {  
88 - return 14.0;  
89 - } else if (SCREEN_WIDTH == 375.0) {  
90 - return 17.0;  
91 - } else if (SCREEN_WIDTH == 414.0) {  
92 - return 19.0;  
93 - }  
94 -  
95 - return 17.0;  
96 -}  
97 -  
98 -- (CGFloat)subtitleFontSize  
99 -{  
100 - if (SCREEN_WIDTH == 320.0) {  
101 - return 12.0;  
102 - } else if (SCREEN_WIDTH == 375.0) {  
103 - return 14.0;  
104 - } else if (SCREEN_WIDTH == 414.0) {  
105 - return 15.0;  
106 - }  
107 -  
108 - return 14.0;  
109 -}  
110 -  
111 -- (CGFloat)cellHeight  
112 -{  
113 - if (SCREEN_WIDTH == 320.0) {  
114 - return 80.0;  
115 - } else if (SCREEN_WIDTH == 375.0) {  
116 - return 93.0;  
117 - } else if (SCREEN_WIDTH == 414.0) {  
118 - return 103.0;  
119 - }  
120 - return 93.0;  
121 -}  
122 -  
123 -#pragma mark  
124 -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier  
125 -{  
126 - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];  
127 - if (self) {  
128 - self.selectionStyle = UITableViewCellSelectionStyleNone;  
129 - [self.contentView addSubview:self.imgView];  
130 - [self.contentView addSubview:self.titleLab];  
131 - [self.contentView addSubview:self.desLab];  
132 - }  
133 - return self;  
134 -}  
135 -  
136 --(UIImageView*)imgView  
137 -{  
138 - if (!_imgView) {  
139 -  
140 - _imgView=[[UIImageView alloc] initWithFrame:CGRectMake(10, [self imageMargin], [self imageWidth], [self imageHeight])];  
141 - }  
142 - return _imgView;  
143 -}  
144 -  
145 --(UILabel*)titleLab  
146 -{  
147 - if (!_titleLab) {  
148 - _titleLab=[[UILabel alloc] initWithFrame:CGRectMake([self imageWidth]+20.0, [self titleMargin], SCREEN_WIDTH-[self imageWidth]-30, [self titleFontSize])];  
149 - _titleLab.textColor=[UIColor blackColorZX];  
150 - _titleLab.font=[UIFont systemFontOfSize:[self titleFontSize]];  
151 - }  
152 - return _titleLab;  
153 -}  
154 -  
155 --(UILabel*)desLab  
156 -{  
157 - if (!_desLab) {  
158 - _desLab=[[UILabel alloc] initWithFrame:CGRectMake([self imageWidth]+20.0, [self subtitleMargin], SCREEN_WIDTH-[self imageWidth]-30, [self subtitleFontSize])];  
159 - _desLab.textColor=[UIColor colorWithHexString:@"#969797"];  
160 - _desLab.font=[UIFont systemFontOfSize:[self subtitleFontSize]];  
161 - _desLab.numberOfLines=0;  
162 - }  
163 - return _desLab;  
164 -}  
165 -  
166 -- (void)setModel:(LVCProgramModel *)model  
167 -{  
168 - self.titleLab.text=model.title;  
169 - self.desLab.text=model.subTitle;  
170 - if (model.img) {  
171 -  
172 - [self.imgView sd_setImageWithURL:[NSURL URLWithString:model.img] placeholderImage:[UIImage imageNamed:@"load_03"]];  
173 - }  
174 -}  
175 -  
176 -- (void)awakeFromNib {  
177 - [super awakeFromNib];  
178 - // Initialization code  
179 -}  
180 -  
181 -- (void)setSelected:(BOOL)selected animated:(BOOL)animated {  
182 - [super setSelected:selected animated:animated];  
183 -  
184 - // Configure the view for the selected state  
185 -}  
186 -  
187 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCOtherHeaderReusableView.h deleted 100644 → 0
1 -//  
2 -// LVCOtherHeaderCollectionReusableView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -#import "LVCChannelDetailsModel.h"  
11 -#import "LVCChannelsModel.h"  
12 -  
13 -@interface LVCOtherHeaderReusableView : UICollectionReusableView  
14 -  
15 -@property (nonatomic, strong) LVCChannelsModel *model;  
16 -  
17 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCOtherHeaderReusableView.m deleted 100644 → 0
1 -//  
2 -// LVCOtherHeaderCollectionReusableView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCOtherHeaderReusableView.h"  
10 -  
11 -@interface LVCOtherHeaderReusableView ()  
12 -  
13 -@property (nonatomic, strong)UIButton *button;  
14 -@property (nonatomic, strong)UIView *intervalView;  
15 -  
16 -@end  
17 -  
18 -@implementation LVCOtherHeaderReusableView  
19 -  
20 -- (instancetype)initWithFrame:(CGRect)frame  
21 -{  
22 - self = [super initWithFrame:frame];  
23 - if (self) {  
24 -  
25 - self.backgroundColor = [UIColor whiteColor];  
26 -  
27 - UIView *intervalView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, 6)];  
28 - intervalView.backgroundColor = [UIColor backgroundColorZX];  
29 - [self addSubview:intervalView];  
30 - [self addSubview:self.button];  
31 -  
32 - }  
33 - return self;  
34 -}  
35 -  
36 -#pragma mark -  
37 -#pragma mark - setter  
38 -- (void)setModel:(LVCChannelsModel *)model {  
39 -  
40 - _model = model;  
41 - [self.button setTitle:[NSString stringWithFormat:@" %@", model.title] forState:UIControlStateNormal];  
42 -}  
43 -  
44 -#pragma mark -  
45 -#pragma mark - gatter  
46 -- (UIButton *)button  
47 -{  
48 - if (!_button) {  
49 - _button = [UIButton buttonWithType:UIButtonTypeCustom];  
50 - _button.frame = CGRectMake(0, 6, self.frame.size.width, 47);  
51 - [_button setTitleColor:[UIColor blackColorZX] forState:UIControlStateNormal];  
52 - _button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;  
53 - _button.titleLabel.font = [UIFont boldSystemFontOfSize:18];  
54 - }  
55 - return _button;  
56 -}  
57 -  
58 -@end  
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCPlayer.h
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 -#import "LVCChannelDetailsModel.h" 10 +#import "LVCTelevisionModel.h"
11 11
12 @class LVCPlayer; 12 @class LVCPlayer;
13 13
@@ -29,13 +29,13 @@ typedef void(^HideInputViewBlock)(BOOL hide); @@ -29,13 +29,13 @@ typedef void(^HideInputViewBlock)(BOOL hide);
29 @property (nonatomic, strong) UIImageView *topBgView; //顶部蒙版 29 @property (nonatomic, strong) UIImageView *topBgView; //顶部蒙版
30 @property (nonatomic, strong) UIImageView *bottomBgView; //底部蒙版 30 @property (nonatomic, strong) UIImageView *bottomBgView; //底部蒙版
31 @property (nonatomic, strong) UIImageView *contentView; //所有空间统一管理在这个view中 31 @property (nonatomic, strong) UIImageView *contentView; //所有空间统一管理在这个view中
32 -@property (nonatomic, strong) LVCChannelDetailsModel *model; //所有空间统一管理在这个view中 32 +@property (nonatomic, strong) LVCTelevisionModel *model; //所有空间统一管理在这个view中
33 @property (nonatomic, readwrite, assign) BOOL isFullScreen; //是否是全屏 33 @property (nonatomic, readwrite, assign) BOOL isFullScreen; //是否是全屏
34 @property (nonatomic, copy) HideInputViewBlock hideBlock; //全屏模式下是否隐藏输入框 34 @property (nonatomic, copy) HideInputViewBlock hideBlock; //全屏模式下是否隐藏输入框
35 @property (nonatomic, assign, readonly) BOOL displayBarrage; //是否显示弹幕 35 @property (nonatomic, assign, readonly) BOOL displayBarrage; //是否显示弹幕
36 @property (nonatomic, assign) id<LVCPlayerDelegate> delegate; 36 @property (nonatomic, assign) id<LVCPlayerDelegate> delegate;
37 37
38 -- (instancetype)initWithFrame:(CGRect)frame playerModel:(LVCChannelDetailsModel *)model; 38 +- (instancetype)initWithFrame:(CGRect)frame playerModel:(LVCTelevisionModel *)model;
39 39
40 - (void)autoHideControlView; //自动隐藏上下功能条 40 - (void)autoHideControlView; //自动隐藏上下功能条
41 41
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCPlayer.m
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 12
13 @interface LVCPlayer ()<UIGestureRecognizerDelegate,LVCPlayerLoadingViewDelegate> 13 @interface LVCPlayer ()<UIGestureRecognizerDelegate,LVCPlayerLoadingViewDelegate>
14 { 14 {
15 - LVCChannelDetailsModel *_model; 15 + LVCTelevisionModel *_model;
16 } 16 }
17 17
18 @property (nonatomic, strong) CNLiveMoviePlayerController *player; 18 @property (nonatomic, strong) CNLiveMoviePlayerController *player;
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 NSLog(@"LVCPlayer dealloc"); 35 NSLog(@"LVCPlayer dealloc");
36 } 36 }
37 37
38 -- (instancetype)initWithFrame:(CGRect)frame playerModel:(LVCChannelDetailsModel *)model 38 +- (instancetype)initWithFrame:(CGRect)frame playerModel:(LVCTelevisionModel *)model
39 { 39 {
40 self = [super initWithFrame:frame]; 40 self = [super initWithFrame:frame];
41 if (self) { 41 if (self) {
@@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
62 } 62 }
63 #pragma mark - 63 #pragma mark -
64 #pragma mark - initPlayer 64 #pragma mark - initPlayer
65 -- (void)initPlayerWithModel:(LVCChannelDetailsModel *)model 65 +- (void)initPlayerWithModel:(LVCTelevisionModel *)model
66 { 66 {
67 /* 67 /*
68 */ 68 */
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionView.h renamed to LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionCell.h
1 // 1 //
2 -// LVCTelevisionView.h 2 +// LVCTelevisionCell.h
3 // LiveVideoCloud 3 // LiveVideoCloud
4 // 4 //
5 -// Created by iOS on 17/3/27. 5 +// Created by iOS on 2017/6/27.
6 // Copyright © 2017年 cnlive. All rights reserved. 6 // Copyright © 2017年 cnlive. All rights reserved.
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
  10 +#import "LVCTelevisionModel.h"
10 11
11 -@interface LVCTelevisionView : UIView 12 +@interface LVCTelevisionCell : UITableViewCell
  13 +
  14 +@property (nonatomic, strong) LVCTelevisionModel *model;
12 15
13 @end 16 @end
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionCell.m 0 → 100644
  1 +//
  2 +// LVCTelevisionCell.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by iOS on 2017/6/27.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "LVCTelevisionCell.h"
  10 +
  11 +@interface LVCTelevisionCell ()
  12 +
  13 +@property (nonatomic, strong) UIImageView *imgView;
  14 +@property (nonatomic, strong) UILabel *titleLab;
  15 +
  16 +@end
  17 +
  18 +@implementation LVCTelevisionCell
  19 +
  20 +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
  21 +{
  22 + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  23 + if (self) {
  24 + self.contentView.backgroundColor = [UIColor whiteColor];
  25 +
  26 + [self.contentView addSubview:self.imgView];
  27 + [self.contentView addSubview:self.titleLab];
  28 + }
  29 + return self;
  30 +}
  31 +
  32 +- (void)setModel:(LVCTelevisionModel *)model {
  33 + [_imgView sd_setImageWithURL:[NSURL URLWithString:model.img] placeholderImage:[UIImage imageNamed:@"load_03"]];
  34 + _titleLab.text = model.title;
  35 +
  36 +}
  37 +
  38 +#pragma mark -
  39 +#pragma mark - getter
  40 +- (UIImageView *)imgView
  41 +{
  42 + if (!_imgView) {
  43 + _imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_WIDTH*9/16)];
  44 + }
  45 + return _imgView;
  46 +}
  47 +
  48 +- (UILabel *)titleLab
  49 +{
  50 + if (!_titleLab) {
  51 + _titleLab = [[UILabel alloc] initWithFrame:CGRectMake(10, SCREEN_WIDTH*9/16, SCREEN_WIDTH-20, 40)];
  52 + }
  53 + return _titleLab;
  54 +}
  55 +
  56 +- (void)awakeFromNib {
  57 + [super awakeFromNib];
  58 + // Initialization code
  59 +}
  60 +
  61 +- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  62 + [super setSelected:selected animated:animated];
  63 +
  64 + // Configure the view for the selected state
  65 +}
  66 +
  67 +@end
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionView.m deleted 100644 → 0
1 -//  
2 -// LVCTelevisionView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCTelevisionView.h"  
10 -#import "LVCLiveListCollectionViewCell.h"  
11 -#import "LVCFirstHeaderReusableView.h"  
12 -#import "LVCOtherHeaderReusableView.h"  
13 -#import "LVCChannelDetailsModel.h"  
14 -#import "LVCChannelsModel.h"  
15 -#import "LVCLivePlayerController.h"  
16 -  
17 -static NSString *cellId = @"LVCLiveListCollectionViewCell";  
18 -static NSString *firstHeaderId = @"LVCFirstHeaderReusableView";  
19 -static NSString *otherHeaderId = @"LVCOtherHeaderReusableView";  
20 -  
21 -@interface LVCTelevisionView ()<UICollectionViewDelegate,UICollectionViewDataSource>  
22 -  
23 -@property (nonatomic, strong) UICollectionView *collectionView;  
24 -@property (nonatomic, strong) NSArray *bannerModelArray; //banner数据源  
25 -@property (nonatomic, strong) NSArray *marqueeModelArray;  
26 -@property (nonatomic, strong) NSArray *channelsModelArray;  
27 -  
28 -@end  
29 -  
30 -@implementation LVCTelevisionView  
31 -  
32 -- (instancetype)initWithFrame:(CGRect)frame  
33 -{  
34 - self = [super initWithFrame:frame];  
35 - if (self) {  
36 -  
37 - self.backgroundColor = [UIColor whiteColor];  
38 -  
39 - [self addSubview:self.collectionView];  
40 - [self loadData];  
41 -  
42 - }  
43 - return self;  
44 -}  
45 -  
46 -#pragma mark -  
47 -#pragma mark - UICollectionViewDataSource  
48 -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {  
49 - if (self.channelsModelArray.count > 0) {  
50 - return self.channelsModelArray.count + 1;  
51 - }  
52 - return self.channelsModelArray.count;  
53 -}  
54 -  
55 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
56 -  
57 - if (section == 0) {  
58 - return 0;  
59 - }  
60 - LVCChannelsModel *model = self.channelsModelArray[section - 1];  
61 -  
62 - NSArray *array = model.programs;  
63 -  
64 - return array.count;  
65 -}  
66 -  
67 -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {  
68 -  
69 - LVCLiveListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];  
70 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
71 -  
72 - LVCChannelDetailsModel *details = model.programs[indexPath.item];  
73 -  
74 - cell.details = details;  
75 -  
76 - return cell;  
77 -}  
78 -  
79 -- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {  
80 -  
81 - if (kind == UICollectionElementKindSectionHeader) {  
82 -  
83 - if (indexPath.section == 0) {  
84 -  
85 - LVCFirstHeaderReusableView *firstHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:firstHeaderId forIndexPath:indexPath];  
86 -  
87 - firstHeaderView.imageUrls = [self bannerImage];  
88 - firstHeaderView.modelArray = self.bannerModelArray;  
89 -  
90 - return firstHeaderView;  
91 - } else {  
92 -  
93 - LVCOtherHeaderReusableView *otherHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:otherHeaderId forIndexPath:indexPath];  
94 -  
95 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
96 -  
97 - otherHeaderView.model = model;  
98 -  
99 - return otherHeaderView;  
100 - }  
101 - }  
102 - return nil;  
103 -}  
104 -  
105 -- (NSArray <NSURL *>*)bannerImage {  
106 -  
107 - NSMutableArray *arrayM = [NSMutableArray array];  
108 - for (LVCChannelDetailsModel *model in _bannerModelArray) {  
109 - NSString *imgStr = model.img;  
110 - NSURL *url = [NSURL URLWithString:imgStr];  
111 - [arrayM addObject:url];  
112 - }  
113 - return arrayM.copy;  
114 -}  
115 -  
116 -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {  
117 -  
118 - if (section == 0) {  
119 - return CGSizeMake(SCREEN_WIDTH, SCREEN_WIDTH * 0.5);  
120 - }else {  
121 - return CGSizeMake(SCREEN_WIDTH, 47);  
122 - }  
123 -}  
124 -  
125 -#pragma mark -  
126 -#pragma mark - UICollectionViewDelegate  
127 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {  
128 -  
129 - LVCChannelsModel *model = _channelsModelArray[indexPath.section - 1];  
130 - LVCChannelDetailsModel *details = model.programs[indexPath.item];  
131 - self.viewController.hidesBottomBarWhenPushed = YES;  
132 - LVCLivePlayerController *playVC = [[LVCLivePlayerController alloc] init];  
133 - playVC.model = details;  
134 - self.viewController.navigationController.navigationBar.hidden = YES;  
135 - [self.viewController.navigationController pushViewController:playVC animated:YES];  
136 - self.viewController.hidesBottomBarWhenPushed = NO;  
137 -}  
138 -  
139 -#pragma mark -  
140 -#pragma mark - 加载数据  
141 -- (void)loadData {  
142 -  
143 - NSString *path = [[NSBundle mainBundle] pathForResource:@"JsonFile" ofType:@"json"];  
144 - NSData *data=[NSData dataWithContentsOfFile:path];  
145 - NSError *error;  
146 - id responseObject=[NSJSONSerialization JSONObjectWithData:data  
147 - options:NSJSONReadingAllowFragments  
148 - error:&error];  
149 -// NSLog(@"%@",responseObject);  
150 -  
151 - if (responseObject[@"channels"] && [responseObject[@"channels"] isKindOfClass:[NSArray class]]) {  
152 -  
153 - NSMutableArray *arrayM = [[NSMutableArray alloc]init];  
154 - for (NSDictionary *dict in responseObject[@"channels"]) {  
155 - LVCChannelsModel *model = [LVCChannelsModel mj_objectWithKeyValues:dict];  
156 - [arrayM addObject:model];  
157 - }  
158 - self.channelsModelArray = arrayM;  
159 - }  
160 - if (responseObject[@"banner"] && [responseObject[@"banner"] isKindOfClass:[NSArray class]]) {  
161 -  
162 - NSMutableArray *arrayM = [NSMutableArray array];  
163 - for (NSDictionary *dict in responseObject[@"banner"]) {  
164 - LVCChannelDetailsModel *rollModel = [LVCChannelDetailsModel mj_objectWithKeyValues:dict];  
165 - [arrayM addObject:rollModel];  
166 - }  
167 - self.bannerModelArray = arrayM;  
168 - }  
169 - [self.collectionView reloadData];  
170 -  
171 -}  
172 -  
173 -#pragma mark -  
174 -#pragma mark - getter  
175 -- (UICollectionView *)collectionView {  
176 -  
177 - if (!_collectionView) {  
178 -  
179 - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];  
180 - layout.itemSize = CGSizeMake((SCREEN_WIDTH-30)/2, (SCREEN_WIDTH-30)/2*9/16+65);  
181 - layout.minimumLineSpacing = 0;  
182 - layout.minimumInteritemSpacing = 0;  
183 - layout.sectionInset = UIEdgeInsetsMake(6, 10, 0, 10);  
184 - _collectionView.showsHorizontalScrollIndicator = NO;  
185 -  
186 - _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-64-49) collectionViewLayout:layout];  
187 - _collectionView.backgroundColor = [UIColor whiteColor];  
188 -  
189 - [_collectionView registerClass:[LVCLiveListCollectionViewCell class] forCellWithReuseIdentifier:cellId];  
190 - [_collectionView registerClass:[LVCFirstHeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:firstHeaderId];  
191 - [_collectionView registerClass:[LVCOtherHeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:otherHeaderId];  
192 - _collectionView.scrollsToTop = NO;  
193 - _collectionView.dataSource = self;  
194 - _collectionView.delegate = self;  
195 - }  
196 - return _collectionView;  
197 -}  
198 -  
199 -/*  
200 -// Only override drawRect: if you perform custom drawing.  
201 -// An empty implementation adversely affects performance during animation.  
202 -- (void)drawRect:(CGRect)rect {  
203 - // Drawing code  
204 -}  
205 -*/  
206 -  
207 -@end  
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCTVLiveViewController.h deleted 100644 → 0
1 -//  
2 -// LVCLiveViewController.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseViewController.h"  
10 -  
11 -@interface LVCTVLiveViewController : UIViewController  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCTVLiveViewController.m deleted 100644 → 0
1 -//  
2 -// LVCLiveViewController.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by iOS on 17/3/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCTVLiveViewController.h"  
10 -#import "LVCTelevisionView.h"  
11 -  
12 -@interface LVCTVLiveViewController ()  
13 -  
14 -@property (nonatomic, strong) LVCTelevisionView *tvView;  
15 -  
16 -@end  
17 -  
18 -@implementation LVCTVLiveViewController  
19 -  
20 -- (void)viewDidLoad {  
21 - [super viewDidLoad];  
22 -  
23 - self.view.backgroundColor = [UIColor whiteColor];  
24 -  
25 - [self.view addSubview:self.tvView];  
26 -}  
27 -  
28 -- (LVCTelevisionView *)tvView  
29 -{  
30 - if (!_tvView) {  
31 - _tvView = [[LVCTelevisionView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];  
32 - }  
33 - return _tvView;  
34 -}  
35 -  
36 -- (void)didReceiveMemoryWarning {  
37 - [super didReceiveMemoryWarning];  
38 - // Dispose of any resources that can be recreated.  
39 -}  
40 -  
41 -/*  
42 -#pragma mark - Navigation  
43 -  
44 -// In a storyboard-based application, you will often want to do a little preparation before navigation  
45 -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
46 - // Get the new view controller using [segue destinationViewController].  
47 - // Pass the selected object to the new view controller.  
48 -}  
49 -*/  
50 -  
51 -@end  
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCUGCLivePlayerController.m
@@ -13,8 +13,7 @@ @@ -13,8 +13,7 @@
13 #import "UIImage+LVCVagueImage.h" 13 #import "UIImage+LVCVagueImage.h"
14 #import "LiveBaseView.h" 14 #import "LiveBaseView.h"
15 #import "MineLiveController.h" 15 #import "MineLiveController.h"
16 -#import "HomeViewController.h"  
17 - 16 +#import "LVCUGCLiveListController.h"
18 17
19 @interface LVCUGCLivePlayerController () { 18 @interface LVCUGCLivePlayerController () {
20 19
@@ -119,8 +118,9 @@ @@ -119,8 +118,9 @@
119 if ([controller isKindOfClass:[MineLiveController class]]) { 118 if ([controller isKindOfClass:[MineLiveController class]]) {
120 MineLiveController *revise =(MineLiveController *)controller; 119 MineLiveController *revise =(MineLiveController *)controller;
121 [self.navigationController popToViewController:revise animated:YES]; 120 [self.navigationController popToViewController:revise animated:YES];
122 - } else if ([controller isKindOfClass:[HomeViewController class]]) {  
123 - HomeViewController *revise =(HomeViewController *)controller; 121 + }
  122 + else if ([controller isKindOfClass:[LVCUGCLiveListController class]]) {
  123 + LVCUGCLiveListController *revise =(LVCUGCLiveListController *)controller;
124 [self.navigationController popToViewController:revise animated:YES]; 124 [self.navigationController popToViewController:revise animated:YES];
125 } 125 }
126 } 126 }
LiveVideoCloud/Classes/Sections/homeSections/Controller/HomeViewController.m 0 → 100644
  1 +//
  2 +// HomeViewController.m
  3 +// ZXBaseProject
  4 +//
  5 +// Created by 张旭 on 2017/1/10.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "HomeViewController.h"
  10 +#import "LVCLivePlayerController.h"
  11 +#import "LVCLivePlayerController.h"
  12 +#import "LVCUGCLivePlayerController.h"
  13 +#import "LVCUGCLiveListView.h"
  14 +#import "LVCVodPlayerListView.h"
  15 +
  16 +@interface HomeViewController ()<V8HorizontalPickerViewDataSource, V8HorizontalPickerViewDelegate,MHPagingScrollViewDelegate,UIScrollViewDelegate>
  17 +{
  18 + NSArray *_titleArr;
  19 + CGFloat _titleSpace;
  20 +
  21 +}
  22 +
  23 +@property (nonatomic, strong)V8HorizontalPickerView *titleView;
  24 +@property (nonatomic, strong)MHPagingScrollView *pageView;
  25 +
  26 +@end
  27 +
  28 +@implementation HomeViewController
  29 +
  30 +- (void)viewDidLoad {
  31 + [super viewDidLoad];
  32 + self.view.backgroundColor = [UIColor whiteColor];
  33 +
  34 + _titleArr = @[@"电视台"];
  35 +// CGFloat width = 0;
  36 +// for (NSString *title in _titleArr) {
  37 +// CGSize size = [title sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];
  38 +// width += size.width+5;
  39 +// }
  40 +// if (width < self.titleView.width) {
  41 +// _titleSpace = (self.titleView.width-width)/_titleArr.count;
  42 +// } else {
  43 +// _titleSpace = 0;
  44 +// }
  45 +//
  46 +// self.navigationItem.titleView = self.titleView;
  47 +//
  48 +// [_pageView reloadPages];
  49 +// [_titleView reloadData];
  50 +// [self.view addSubview:self.pageView];
  51 +////
  52 +// NSArray *arr = @[ @{
  53 +// @"mediaId": @"liveshow",
  54 +// @"title": @"LiveShow",
  55 +// @"img": @"http://yweb0.cnliveimg.com/cnlive/public/150417133551285_693.png",
  56 +// @"docID": @"408481",
  57 +// @"type": @"live"},
  58 +//
  59 +// @{
  60 +// @"mediaId": @"news",
  61 +// @"title": @"快新闻",
  62 +// @"img": @"http://yweb1.cnliveimg.com/img/cnlive/160121113653827_867.png",
  63 +// @"docID": @"285697",
  64 +// @"type": @"live"},
  65 +//
  66 +//
  67 +// @{
  68 +// @"mediaId": @"eyule",
  69 +// @"title": @"e娱乐",
  70 +// @"img": @"http://yweb2.cnliveimg.com/img/cnlive/160121113659992_585.png",
  71 +// @"docID": @"408480",
  72 +// @"type": @"live"},
  73 +//
  74 +// @{
  75 +// @"mediaId": @"chaotiyu",
  76 +// @"title": @"潮体育",
  77 +// @"img": @"http://yweb3.cnliveimg.com/img/cnlive/160121113706887_696.png",
  78 +// @"docID": @"285698",
  79 +// @"type": @"live"},
  80 +//
  81 +// @{
  82 +// @"mediaId": @"xuanhanyu",
  83 +// @"title": @"炫韩娱",
  84 +// @"img": @"http://yweb0.cnliveimg.com/cnlive/public/150417133341123_878.png",
  85 +// @"docID": @"408487",
  86 +// @"type": @"live"},
  87 +// @{
  88 +// @"mediaId": @"inyuetai",
  89 +// @"title": @"in乐台",
  90 +// @"img": @"http://yweb1.cnliveimg.com/cnlive/public/150417144750615_185.png",
  91 +// @"docID": @"285696",
  92 +// @"type": @"live"},
  93 +//
  94 +// ];
  95 +//
  96 +// NSData *data=[NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:nil];
  97 +// NSString *jsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  98 +// NSLog(@"%@", jsonStr);
  99 +//
  100 +// NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  101 +// NSString *path=[paths objectAtIndex:0];
  102 +// NSString *Json_path=[path stringByAppendingPathComponent:@"TelevisionData.json"];
  103 +// //==写入文件
  104 +// NSLog(@"%@",[data writeToFile:Json_path atomically:YES] ? @"Succeed":@"Failed");
  105 +
  106 +}
  107 +
  108 +#pragma mark - V8HorizontalPickerViewDataSource
  109 +
  110 +- (NSInteger)numberOfElementsInHorizontalPickerView:(V8HorizontalPickerView *)picker
  111 +{
  112 + return _titleArr.count;
  113 +}
  114 +
  115 +#pragma mark - V8HorizontalPickerViewDelegate
  116 +
  117 +- (NSString *)horizontalPickerView:(V8HorizontalPickerView *)picker titleForElementAtIndex:(NSInteger)index
  118 +{
  119 + return _titleArr[index];
  120 +}
  121 +
  122 +- (NSInteger)horizontalPickerView:(V8HorizontalPickerView *)picker widthForElementAtIndex:(NSInteger)index
  123 +{
  124 +
  125 + if (_titleSpace != 0) {
  126 +
  127 + CGSize size = [_titleArr[index] sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];
  128 + return size.width +_titleSpace;
  129 + } else {
  130 +
  131 + CGSize size = [_titleArr[index] sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];
  132 + return size.width + 15;
  133 + }
  134 +}
  135 +
  136 +- (void)horizontalPickerView:(V8HorizontalPickerView *)picker didSelectElementAtIndex:(NSInteger)index
  137 +{
  138 + if (self.pageView.indexOfSelectedPage != index) {
  139 + [self.pageView selectPageAtIndex:index animated:YES];
  140 + }
  141 +}
  142 +
  143 +#pragma mark - UIScrollViewDelegate
  144 +
  145 +- (void)scrollViewDidScroll:(UIScrollView *)scrollView
  146 +{
  147 +
  148 + if (self.titleView.currentSelectedIndex != self.pageView.indexOfSelectedPage) {
  149 +
  150 + [self.titleView scrollToElement:self.pageView.indexOfSelectedPage animated:YES];
  151 +
  152 + }
  153 + [self.pageView scrollViewDidScroll];
  154 +
  155 +}
  156 +
  157 +#pragma mark - MHPagingScrollViewDelegate
  158 +
  159 +- (NSUInteger)numberOfPagesInPagingScrollView:(MHPagingScrollView *)pagingScrollView
  160 +{
  161 + return _titleArr.count;
  162 +}
  163 +
  164 +- (UIView *)pagingScrollView:(MHPagingScrollView *)pagingScrollView pageForIndex:(NSUInteger)index
  165 +{
  166 +// if ([_titleArr[index] isEqualToString:@"电视台"]) {
  167 +//
  168 +// LVCTelevisionView *tvView = (LVCTelevisionView *)[pagingScrollView pageViewByIndex:index];
  169 +// if (!tvView) {
  170 +// tvView = [[LVCTelevisionView alloc] init];
  171 +// }
  172 +// return tvView;
  173 +// }
  174 +// else if ([_titleArr[index] isEqualToString:@"直播"]) {
  175 +//
  176 +// LVCUGCLiveListView *liveListView = (LVCUGCLiveListView *)[pagingScrollView pageViewByIndex:index];
  177 +// if (!liveListView) {
  178 +// liveListView = [[LVCUGCLiveListView alloc] initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT - 114)];
  179 +// } else {
  180 +// [liveListView isNeedToRefresh];
  181 +// }
  182 +// liveListView.scrollToTop = YES;
  183 +// return liveListView;
  184 +// }else if ([_titleArr[index] isEqualToString:@"点播"]) {
  185 +//
  186 +// LVCVodPlayerListView *vodListView = (LVCVodPlayerListView *)[pagingScrollView pageViewByIndex:index];
  187 +// if (!vodListView) {
  188 +// vodListView = [[LVCVodPlayerListView alloc] initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT - 114)];
  189 +// } else {
  190 +//// [vodListView isNeedToRefresh];
  191 +// }
  192 +//// vodListView.scrollToTop = YES;
  193 +// return vodListView;
  194 +// }
  195 + return nil;
  196 +}
  197 +
  198 +- (V8HorizontalPickerView *)titleView
  199 +{
  200 + if (!_titleView) {
  201 +
  202 + _titleView = [[V8HorizontalPickerView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-120, 44) home:YES];
  203 + _titleView.textColor = [UIColor colorWithHexString:@"#7e7e7d"];
  204 + _titleView.selectedTextColor = [UIColor blackColorZX];
  205 + _titleView.delegate = self;
  206 + _titleView.dataSource = self;
  207 + _titleView.elementFont = [UIFont boldSystemFontOfSize:18];
  208 + _titleView.scrollView.scrollsToTop = NO;
  209 +
  210 + }
  211 + return _titleView;
  212 +}
  213 +
  214 +- (MHPagingScrollView *)pageView
  215 +{
  216 + if (!_pageView) {
  217 + _pageView = [[MHPagingScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-49)];
  218 + _pageView.pagingDelegate = self;
  219 + _pageView.delegate = self;
  220 + _pageView.scrollsToTop = NO;
  221 + }
  222 + return _pageView;
  223 +}
  224 +
  225 +- (void)didReceiveMemoryWarning {
  226 + [super didReceiveMemoryWarning];
  227 + // Dispose of any resources that can be recreated.
  228 +}
  229 +
  230 +/*
  231 +#pragma mark - Navigation
  232 +
  233 +// In a storyboard-based application, you will often want to do a little preparation before navigation
  234 +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  235 + // Get the new view controller using [segue destinationViewController].
  236 + // Pass the selected object to the new view controller.
  237 +}
  238 +*/
  239 +
  240 +@end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerListController.m
@@ -8,7 +8,15 @@ @@ -8,7 +8,15 @@
8 8
9 #import "LVCVodPlayerListController.h" 9 #import "LVCVodPlayerListController.h"
10 10
11 -@interface LVCVodPlayerListController () 11 +static NSString *vodCellId = @"vodCellId";
  12 +
  13 +@interface LVCVodPlayerListController ()<UITableViewDelegate, UITableViewDataSource> {
  14 +
  15 + AFHTTPRequestOperation *_operation;
  16 + NSMutableArray *_programArrayM;
  17 +}
  18 +
  19 +@property (nonatomic, strong)UITableView *tableView;
12 20
13 @end 21 @end
14 22
@@ -19,21 +27,99 @@ @@ -19,21 +27,99 @@
19 27
20 self.navigationItem.title = @"点播"; 28 self.navigationItem.title = @"点播";
21 self.view.backgroundColor = [UIColor whiteColor]; 29 self.view.backgroundColor = [UIColor whiteColor];
  30 + _programArrayM = [[NSMutableArray alloc] init];
22 } 31 }
23 32
24 -- (void)didReceiveMemoryWarning {  
25 - [super didReceiveMemoryWarning];  
26 - // Dispose of any resources that can be recreated. 33 +- (void)requestVodPlayerList {
  34 +
  35 + NSString *uid;
  36 + if ([UserTools isLogin]) {
  37 + uid = [UserInformationModel manager].uid;
  38 + } else {
  39 + uid = [NSString stringWithFormat:@"%u", arc4random()%3];
  40 + }
  41 + NSString *tm = [NSString stringWithFormat:@"%u_%@", arc4random()%10, uid];
  42 +
  43 + NSDictionary *parameter = @{@"cid": @"82_news/",
  44 + @"page": [NSString stringWithFormat:@"%d", 1],
  45 + @"pagesize": @"15",
  46 + @"tm": tm};
  47 +
  48 + [[AFHTTPRequestOperationManager manager] GET:Newslist parameters:[self addParameters:parameter] success:^(AFHTTPRequestOperation *operation, id responseObject) {
  49 +
  50 + responseObject = [responseObject validatedDictionary];
  51 +
  52 + if (responseObject[@"programs"] && [responseObject[@"programs"] isKindOfClass:[NSArray class]]) {
  53 +
  54 + for (NSDictionary *dic in responseObject[@"programs"]) {
  55 + ProgramModel *programModel = [ProgramModel modelWithDic:dic];
  56 + [_programArrayM addObject:programModel];
  57 + if (dic[@"comments"] && [dic[@"comments"] isKindOfClass:[NSArray class]] && [dic[@"comments"] count] > 0) {
  58 + NSMutableArray *comments = [[NSMutableArray alloc] init];
  59 + for (NSDictionary *commentDic in dic[@"comments"]) {
  60 + LVCCommentModel *commentModel = [LVCCommentModel modelWithDic:commentDic];
  61 + [comments addObject:commentModel];
  62 + }
  63 + [_programArrayM addObject:comments];
  64 + }
  65 + }
  66 + }
  67 + [self.tableView reloadData];
  68 +
  69 + } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  70 +
  71 + NSLog(@"点播列表请求失败!");
  72 + }];
  73 +}
  74 +
  75 +#pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!!!!!
  76 +
  77 +#pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!!!
  78 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  79 + return _programArrayM.count;
  80 +}
  81 +
  82 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  83 +
  84 + return nil;
  85 +}
  86 +
  87 +#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!
  88 +- (UITableView *)tableView {
  89 +
  90 + if (!_tableView) {
  91 + _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
  92 + _tableView.dataSource = self;
  93 + _tableView.delegate = self;
  94 + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  95 +
  96 + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -KScreenHeight, KScreenWidth, KScreenHeight)];
  97 + view.backgroundColor = [UIColor backgroundColor];
  98 + [_tableView addSubview:view];
  99 +
  100 + [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:vodCellId];
  101 + }
  102 + return _tableView;
27 } 103 }
28 104
29 -/*  
30 -#pragma mark - Navigation 105 +#pragma mark ------------------------------ 分割线 ----------------------------------------------
  106 +- (NSDictionary *)addParameters:(NSDictionary *)dict {
  107 +
  108 + if (![dict isKindOfClass:[NSDictionary class]]) {
  109 + return dict;
  110 + }
  111 + if (!dict) {
  112 + return @{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion};
  113 + } else {
  114 + NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:dict];
  115 + [dic addEntriesFromDictionary:@{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion}];
  116 + return [[NSDictionary alloc] initWithDictionary:dic];
  117 + }
  118 +}
31 119
32 -// In a storyboard-based application, you will often want to do a little preparation before navigation  
33 -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
34 - // Get the new view controller using [segue destinationViewController].  
35 - // Pass the selected object to the new view controller. 120 +- (void)didReceiveMemoryWarning {
  121 + [super didReceiveMemoryWarning];
  122 + // Dispose of any resources that can be recreated.
36 } 123 }
37 -*/  
38 124
39 @end 125 @end
LiveVideoCloud/Classes/Sections/homeSections/View/LVCVodPlayerListView.h deleted 100644 → 0
1 -//  
2 -// LVCVodPlayerListView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/26.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCVodPlayerListView : UIView  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/homeSections/View/LVCVodPlayerListView.m deleted 100644 → 0
1 -//  
2 -// LVCVodPlayerListView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/26.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCVodPlayerListView.h"  
10 -#import "LVCVodPlayerTableViewCell.h"  
11 -  
12 -static NSString *vodCellId = @"vodCellId";  
13 -  
14 -@interface LVCVodPlayerListView()<UITableViewDelegate, UITableViewDataSource> {  
15 -  
16 - AFHTTPRequestOperation *_operation;  
17 - NSMutableArray *_programArrayM;  
18 -}  
19 -  
20 -@property (nonatomic, strong)UITableView *tableView;  
21 -  
22 -@end  
23 -  
24 -@implementation LVCVodPlayerListView  
25 -  
26 -- (instancetype)initWithFrame:(CGRect)frame  
27 -{  
28 - self = [super initWithFrame:frame];  
29 - if (self) {  
30 - self.backgroundColor = [UIColor whiteColor];  
31 - _programArrayM = [[NSMutableArray alloc] init];  
32 - [self requestVodPlayerList];  
33 - }  
34 - return self;  
35 -}  
36 -  
37 -- (void)requestVodPlayerList {  
38 -  
39 - NSString *uid;  
40 - if ([UserTools isLogin]) {  
41 - uid = [UserInformationModel manager].uid;  
42 - } else {  
43 - uid = [NSString stringWithFormat:@"%u", arc4random()%3];  
44 - }  
45 - NSString *tm = [NSString stringWithFormat:@"%u_%@", arc4random()%10, uid];  
46 -  
47 - NSDictionary *parameter = @{@"cid": @"82_news/",  
48 - @"page": [NSString stringWithFormat:@"%d", 1],  
49 - @"pagesize": @"15",  
50 - @"tm": tm};  
51 -  
52 - [[AFHTTPRequestOperationManager manager] GET:Newslist parameters:[self addParameters:parameter] success:^(AFHTTPRequestOperation *operation, id responseObject) {  
53 -  
54 - responseObject = [responseObject validatedDictionary];  
55 -  
56 - if (responseObject[@"programs"] && [responseObject[@"programs"] isKindOfClass:[NSArray class]]) {  
57 -  
58 - for (NSDictionary *dic in responseObject[@"programs"]) {  
59 - ProgramModel *programModel = [ProgramModel modelWithDic:dic];  
60 - [_programArrayM addObject:programModel];  
61 - if (dic[@"comments"] && [dic[@"comments"] isKindOfClass:[NSArray class]] && [dic[@"comments"] count] > 0) {  
62 - NSMutableArray *comments = [[NSMutableArray alloc] init];  
63 - for (NSDictionary *commentDic in dic[@"comments"]) {  
64 - LVCCommentModel *commentModel = [LVCCommentModel modelWithDic:commentDic];  
65 - [comments addObject:commentModel];  
66 - }  
67 - [_programArrayM addObject:comments];  
68 - }  
69 - }  
70 - }  
71 - [self.tableView reloadData];  
72 -  
73 - } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
74 -  
75 - NSLog(@"点播列表请求失败!");  
76 - }];  
77 -}  
78 -  
79 -#pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!!!!!  
80 -  
81 -#pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!!!  
82 -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  
83 - return _programArrayM.count;  
84 -}  
85 -  
86 -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
87 -  
88 - return nil;  
89 -}  
90 -  
91 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!  
92 -- (UITableView *)tableView {  
93 -  
94 - if (!_tableView) {  
95 - _tableView = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];  
96 - _tableView.dataSource = self;  
97 - _tableView.delegate = self;  
98 - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;  
99 -  
100 - UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -KScreenHeight, KScreenWidth, KScreenHeight)];  
101 - view.backgroundColor = [UIColor backgroundColor];  
102 - [_tableView addSubview:view];  
103 -  
104 - [_tableView registerClass:[LVCVodPlayerTableViewCell class] forCellReuseIdentifier:vodCellId];  
105 - }  
106 - return _tableView;  
107 -}  
108 -  
109 -#pragma mark ------------------------------ 分割线 ----------------------------------------------  
110 -- (NSDictionary *)addParameters:(NSDictionary *)dict {  
111 -  
112 - if (![dict isKindOfClass:[NSDictionary class]]) {  
113 - return dict;  
114 - }  
115 - if (!dict) {  
116 - return @{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion};  
117 - } else {  
118 - NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:dict];  
119 - [dic addEntriesFromDictionary:@{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion}];  
120 - return [[NSDictionary alloc] initWithDictionary:dic];  
121 - }  
122 -}  
123 -  
124 -@end  
LiveVideoCloud/Classes/Sections/homeSections/View/LVCVodPlayerTableViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCVodPlayerTableViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCVodPlayerTableViewCell : UITableViewCell  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/homeSections/View/LVCVodPlayerTableViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCVodPlayerTableViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCVodPlayerTableViewCell.h"  
10 -  
11 -@implementation LVCVodPlayerTableViewCell  
12 -  
13 -- (void)awakeFromNib {  
14 - [super awakeFromNib];  
15 - // Initialization code  
16 -}  
17 -  
18 -- (void)setSelected:(BOOL)selected animated:(BOOL)animated {  
19 - [super setSelected:selected animated:animated];  
20 -  
21 - // Configure the view for the selected state  
22 -}  
23 -  
24 -@end  
LiveVideoCloud/Resource/TelevisionData.json 0 → 100644
  1 +[
  2 + {
  3 + "docID" : "408481",
  4 + "title" : "LiveShow",
  5 + "img" : "http:\/\/yweb0.cnliveimg.com\/cnlive\/public\/150417133551285_693.png",
  6 + "type" : "live",
  7 + "mediaId" : "liveshow"
  8 + },
  9 + {
  10 + "docID" : "285697",
  11 + "title" : "快新闻",
  12 + "img" : "http:\/\/yweb1.cnliveimg.com\/img\/cnlive\/160121113653827_867.png",
  13 + "type" : "live",
  14 + "mediaId" : "news"
  15 + },
  16 + {
  17 + "docID" : "408480",
  18 + "title" : "e娱乐",
  19 + "img" : "http:\/\/yweb2.cnliveimg.com\/img\/cnlive\/160121113659992_585.png",
  20 + "type" : "live",
  21 + "mediaId" : "eyule"
  22 + },
  23 + {
  24 + "docID" : "285698",
  25 + "title" : "潮体育",
  26 + "img" : "http:\/\/yweb3.cnliveimg.com\/img\/cnlive\/160121113706887_696.png",
  27 + "type" : "live",
  28 + "mediaId" : "chaotiyu"
  29 + },
  30 + {
  31 + "docID" : "408487",
  32 + "title" : "炫韩娱",
  33 + "img" : "http:\/\/yweb0.cnliveimg.com\/cnlive\/public\/150417133341123_878.png",
  34 + "type" : "live",
  35 + "mediaId" : "xuanhanyu"
  36 + },
  37 + {
  38 + "docID" : "285696",
  39 + "title" : "in乐台",
  40 + "img" : "http:\/\/yweb1.cnliveimg.com\/cnlive\/public\/150417144750615_185.png",
  41 + "type" : "live",
  42 + "mediaId" : "inyuetai"
  43 + }
  44 +]
0 \ No newline at end of file 45 \ No newline at end of file