Commit 65cd56af0a35307ff10d7d33faeeebfc2fa5de81

Authored by 张旭
2 parents 05a8b790 0f7409ad

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

# Conflicts:
#	LiveVideoCloud.xcodeproj/project.pbxproj
#	LiveVideoCloud/PrefixHeader.pch
Showing 50 changed files with 321 additions and 3260 deletions
LiveVideoCloud.xcodeproj/project.pbxproj
@@ -85,7 +85,6 @@ @@ -85,7 +85,6 @@
85 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4351F02045500AA78A4 /* CNBarrageManager.m */; }; 85 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4351F02045500AA78A4 /* CNBarrageManager.m */; };
86 8178D44B1F02045500AA78A4 /* CNBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4371F02045500AA78A4 /* CNBarrageView.m */; }; 86 8178D44B1F02045500AA78A4 /* CNBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4371F02045500AA78A4 /* CNBarrageView.m */; };
87 8178D4511F02045500AA78A4 /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4431F02045500AA78A4 /* LVCPlayer.m */; }; 87 8178D4511F02045500AA78A4 /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4431F02045500AA78A4 /* LVCPlayer.m */; };
88 - 8178D4521F02045500AA78A4 /* LVCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */; };  
89 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */; }; 88 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */; };
90 8178D4571F0204D600AA78A4 /* LVCTelevisioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */; }; 89 8178D4571F0204D600AA78A4 /* LVCTelevisioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4561F0204D600AA78A4 /* LVCTelevisioController.m */; };
91 8178D4611F02060B00AA78A4 /* LVCChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45A1F02060B00AA78A4 /* LVCChatView.m */; }; 90 8178D4611F02060B00AA78A4 /* LVCChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D45A1F02060B00AA78A4 /* LVCChatView.m */; };
@@ -95,9 +94,8 @@ @@ -95,9 +94,8 @@
95 8178D4681F021C4500AA78A4 /* TelevisionData.json in Resources */ = {isa = PBXBuildFile; fileRef = 8178D4671F021C4500AA78A4 /* TelevisionData.json */; }; 94 8178D4681F021C4500AA78A4 /* TelevisionData.json in Resources */ = {isa = PBXBuildFile; fileRef = 8178D4671F021C4500AA78A4 /* TelevisionData.json */; };
96 8178D46B1F021ED800AA78A4 /* LVCTelevisionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */; }; 95 8178D46B1F021ED800AA78A4 /* LVCTelevisionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */; };
97 8178D46E1F0225E500AA78A4 /* LVCTelevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */; }; 96 8178D46E1F0225E500AA78A4 /* LVCTelevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */; };
  97 + 8178D4711F0239AD00AA78A4 /* LVCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4701F0239AD00AA78A4 /* LVCPlayerLoadingView.m */; };
98 81A483081E88B6140097A80A /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A483071E88B6140097A80A /* UIView+ViewController.m */; }; 98 81A483081E88B6140097A80A /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A483071E88B6140097A80A /* UIView+ViewController.m */; };
99 - 81DFC4261F0113B40029BCB3 /* JsonFile.json in Resources */ = {isa = PBXBuildFile; fileRef = 81DFC4251F0113B40029BCB3 /* JsonFile.json */; };  
100 - 81F1C8381E8BBDDA0085C2B8 /* MHPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C8371E8BBDDA0085C2B8 /* MHPagingScrollView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };  
101 81F1C8401E8BC5CC0085C2B8 /* NSArray+Safety.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C83F1E8BC5CC0085C2B8 /* NSArray+Safety.m */; }; 99 81F1C8401E8BC5CC0085C2B8 /* NSArray+Safety.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C83F1E8BC5CC0085C2B8 /* NSArray+Safety.m */; };
102 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB5B3B1E7A6FFC00F98E1D /* SevenSwitch.m */; }; 100 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB5B3B1E7A6FFC00F98E1D /* SevenSwitch.m */; };
103 D2029B861E6EAAA50027CD92 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D2029B851E6EAAA50027CD92 /* main.m */; }; 101 D2029B861E6EAAA50027CD92 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D2029B851E6EAAA50027CD92 /* main.m */; };
@@ -186,13 +184,9 @@ @@ -186,13 +184,9 @@
186 D209AD6B1EC580F100D82E3B /* LVCWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD6A1EC580F100D82E3B /* LVCWebViewController.m */; }; 184 D209AD6B1EC580F100D82E3B /* LVCWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD6A1EC580F100D82E3B /* LVCWebViewController.m */; };
187 D209AD6E1EC583B700D82E3B /* MineMessageController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD6D1EC583B700D82E3B /* MineMessageController.m */; }; 185 D209AD6E1EC583B700D82E3B /* MineMessageController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD6D1EC583B700D82E3B /* MineMessageController.m */; };
188 D209AD711EC583D100D82E3B /* MineAccountController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD701EC583D100D82E3B /* MineAccountController.m */; }; 186 D209AD711EC583D100D82E3B /* MineAccountController.m in Sources */ = {isa = PBXBuildFile; fileRef = D209AD701EC583D100D82E3B /* MineAccountController.m */; };
189 - D20C82BE1EEEA89700BB609F /* LVCHomePageListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D20C82BD1EEEA89700BB609F /* LVCHomePageListModel.m */; };  
190 - D214CB4F1EF7BD890014EEBA /* V8HorizontalPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D214CB4D1EF7BD890014EEBA /* V8HorizontalPickerView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };  
191 - D214CB521EF7CB310014EEBA /* LVCChannelPagingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D214CB511EF7CB310014EEBA /* LVCChannelPagingView.m */; };  
192 D217A24A1E7B76C7003B44CB /* PresentView.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2471E7B76C7003B44CB /* PresentView.m */; }; 187 D217A24A1E7B76C7003B44CB /* PresentView.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2471E7B76C7003B44CB /* PresentView.m */; };
193 D217A24B1E7B76C7003B44CB /* PresentViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2491E7B76C7003B44CB /* PresentViewCell.m */; }; 188 D217A24B1E7B76C7003B44CB /* PresentViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A2491E7B76C7003B44CB /* PresentViewCell.m */; };
194 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A24D1E7B77C7003B44CB /* ComboCell.m */; }; 189 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D217A24D1E7B77C7003B44CB /* ComboCell.m */; };
195 - D219E86B1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */; };  
196 D224B1971E826ED800CC61D0 /* ChatBarrageAnimAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */; }; 190 D224B1971E826ED800CC61D0 /* ChatBarrageAnimAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */; };
197 D22830F11E778C0F00627701 /* LiveBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830F01E778C0F00627701 /* LiveBaseView.m */; }; 191 D22830F11E778C0F00627701 /* LiveBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830F01E778C0F00627701 /* LiveBaseView.m */; };
198 D22830FC1E77C2D900627701 /* BottomToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830FB1E77C2D900627701 /* BottomToolView.m */; }; 192 D22830FC1E77C2D900627701 /* BottomToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D22830FB1E77C2D900627701 /* BottomToolView.m */; };
@@ -225,9 +219,6 @@ @@ -225,9 +219,6 @@
225 D245715C1E83A62B00AA85D6 /* BounceView.m in Sources */ = {isa = PBXBuildFile; fileRef = D245715B1E83A62B00AA85D6 /* BounceView.m */; }; 219 D245715C1E83A62B00AA85D6 /* BounceView.m in Sources */ = {isa = PBXBuildFile; fileRef = D245715B1E83A62B00AA85D6 /* BounceView.m */; };
226 D245715F1E83B09900AA85D6 /* userInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D245715E1E83B09900AA85D6 /* userInfoModel.m */; }; 220 D245715F1E83B09900AA85D6 /* userInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D245715E1E83B09900AA85D6 /* userInfoModel.m */; };
227 D24571631E83C40B00AA85D6 /* PrivateView.m in Sources */ = {isa = PBXBuildFile; fileRef = D24571621E83C40B00AA85D6 /* PrivateView.m */; }; 221 D24571631E83C40B00AA85D6 /* PrivateView.m in Sources */ = {isa = PBXBuildFile; fileRef = D24571621E83C40B00AA85D6 /* PrivateView.m */; };
228 - D24CFC201EFA092300AA6ADB /* JBBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D24CFC1F1EFA092300AA6ADB /* JBBannerView.m */; };  
229 - D24F40921EFB727000833738 /* JBAutoRollTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D24F40911EFB727000833738 /* JBAutoRollTableView.m */; };  
230 - D24F40951EFB965A00833738 /* JBSearchView.m in Sources */ = {isa = PBXBuildFile; fileRef = D24F40941EFB965A00833738 /* JBSearchView.m */; };  
231 D25530001E7909AC00DF38A5 /* GiftAnimOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2552FFF1E7909AC00DF38A5 /* GiftAnimOperation.m */; }; 222 D25530001E7909AC00DF38A5 /* GiftAnimOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2552FFF1E7909AC00DF38A5 /* GiftAnimOperation.m */; };
232 D25530031E79115100DF38A5 /* AnimQueueManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D25530021E79115100DF38A5 /* AnimQueueManager.m */; }; 223 D25530031E79115100DF38A5 /* AnimQueueManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D25530021E79115100DF38A5 /* AnimQueueManager.m */; };
233 D25530061E7911A800DF38A5 /* GiftAnimationAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D25530051E7911A800DF38A5 /* GiftAnimationAction.m */; }; 224 D25530061E7911A800DF38A5 /* GiftAnimationAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D25530051E7911A800DF38A5 /* GiftAnimationAction.m */; };
@@ -266,11 +257,9 @@ @@ -266,11 +257,9 @@
266 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; }; 257 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; };
267 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; }; 258 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; };
268 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */; }; 259 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */; };
269 - D2EBC8641F02105C00F198FB /* LVCHomePageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */; };  
270 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; }; 260 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; };
271 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; }; 261 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; };
272 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; }; 262 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; };
273 - D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86E1F02108000F198FB /* LVCUGCLiveListView.m */; };  
274 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */; }; 263 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */; };
275 D2EBC87B1F02108F00F198FB /* LVCUGCLiveListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8781F02108F00F198FB /* LVCUGCLiveListModel.m */; }; 264 D2EBC87B1F02108F00F198FB /* LVCUGCLiveListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8781F02108F00F198FB /* LVCUGCLiveListModel.m */; };
276 D2EBC87C1F02108F00F198FB /* LVCUGCLivePlayerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC87A1F02108F00F198FB /* LVCUGCLivePlayerModel.m */; }; 265 D2EBC87C1F02108F00F198FB /* LVCUGCLivePlayerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC87A1F02108F00F198FB /* LVCUGCLivePlayerModel.m */; };
@@ -278,6 +267,8 @@ @@ -278,6 +267,8 @@
278 D2EBC8841F02109C00F198FB /* LVCUGCLivePlayerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8801F02109C00F198FB /* LVCUGCLivePlayerCell.m */; }; 267 D2EBC8841F02109C00F198FB /* LVCUGCLivePlayerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8801F02109C00F198FB /* LVCUGCLivePlayerCell.m */; };
279 D2EBC8851F02109C00F198FB /* LVCUGCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8821F02109C00F198FB /* LVCUGCPlayerLoadingView.m */; }; 268 D2EBC8851F02109C00F198FB /* LVCUGCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8821F02109C00F198FB /* LVCUGCPlayerLoadingView.m */; };
280 D2EBC8881F0225D900F198FB /* LVCVodPlayerListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */; }; 269 D2EBC8881F0225D900F198FB /* LVCVodPlayerListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */; };
  270 + D2EBC88B1F02361600F198FB /* LVCUGCLiveListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC88A1F02361600F198FB /* LVCUGCLiveListView.m */; };
  271 + D2EBC88E1F023AA400F198FB /* LVCVodPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC88D1F023AA400F198FB /* LVCVodPlayerController.m */; };
281 /* End PBXBuildFile section */ 272 /* End PBXBuildFile section */
282 273
283 /* Begin PBXContainerItemProxy section */ 274 /* Begin PBXContainerItemProxy section */
@@ -476,8 +467,6 @@ @@ -476,8 +467,6 @@
476 8178D4371F02045500AA78A4 /* CNBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageView.m; sourceTree = "<group>"; }; 467 8178D4371F02045500AA78A4 /* CNBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNBarrageView.m; sourceTree = "<group>"; };
477 8178D4421F02045500AA78A4 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; }; 468 8178D4421F02045500AA78A4 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; };
478 8178D4431F02045500AA78A4 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; }; 469 8178D4431F02045500AA78A4 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; };
479 - 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayerLoadingView.h; sourceTree = "<group>"; };  
480 - 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayerLoadingView.m; sourceTree = "<group>"; };  
481 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCRequestFailedView.h; sourceTree = "<group>"; }; 470 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCRequestFailedView.h; sourceTree = "<group>"; };
482 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCRequestFailedView.m; sourceTree = "<group>"; }; 471 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCRequestFailedView.m; sourceTree = "<group>"; };
483 8178D4551F0204D600AA78A4 /* LVCTelevisioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisioController.h; sourceTree = "<group>"; }; 472 8178D4551F0204D600AA78A4 /* LVCTelevisioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisioController.h; sourceTree = "<group>"; };
@@ -495,11 +484,10 @@ @@ -495,11 +484,10 @@
495 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionModel.m; sourceTree = "<group>"; }; 484 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionModel.m; sourceTree = "<group>"; };
496 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisionCell.h; sourceTree = "<group>"; }; 485 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTelevisionCell.h; sourceTree = "<group>"; };
497 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionCell.m; sourceTree = "<group>"; }; 486 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionCell.m; sourceTree = "<group>"; };
  487 + 8178D46F1F0239AD00AA78A4 /* LVCPlayerLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayerLoadingView.h; sourceTree = "<group>"; };
  488 + 8178D4701F0239AD00AA78A4 /* LVCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayerLoadingView.m; sourceTree = "<group>"; };
498 81A483061E88B6140097A80A /* UIView+ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ViewController.h"; sourceTree = "<group>"; }; 489 81A483061E88B6140097A80A /* UIView+ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ViewController.h"; sourceTree = "<group>"; };
499 81A483071E88B6140097A80A /* UIView+ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ViewController.m"; sourceTree = "<group>"; }; 490 81A483071E88B6140097A80A /* UIView+ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ViewController.m"; sourceTree = "<group>"; };
500 - 81DFC4251F0113B40029BCB3 /* JsonFile.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = JsonFile.json; sourceTree = "<group>"; };  
501 - 81F1C8361E8BBDDA0085C2B8 /* MHPagingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MHPagingScrollView.h; sourceTree = "<group>"; };  
502 - 81F1C8371E8BBDDA0085C2B8 /* MHPagingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MHPagingScrollView.m; sourceTree = "<group>"; };  
503 81F1C83E1E8BC5CC0085C2B8 /* NSArray+Safety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Safety.h"; sourceTree = "<group>"; }; 491 81F1C83E1E8BC5CC0085C2B8 /* NSArray+Safety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Safety.h"; sourceTree = "<group>"; };
504 81F1C83F1E8BC5CC0085C2B8 /* NSArray+Safety.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Safety.m"; sourceTree = "<group>"; }; 492 81F1C83F1E8BC5CC0085C2B8 /* NSArray+Safety.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Safety.m"; sourceTree = "<group>"; };
505 81FB5B3A1E7A6FFC00F98E1D /* SevenSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SevenSwitch.h; sourceTree = "<group>"; }; 493 81FB5B3A1E7A6FFC00F98E1D /* SevenSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SevenSwitch.h; sourceTree = "<group>"; };
@@ -688,13 +676,6 @@ @@ -688,13 +676,6 @@
688 D209AD6D1EC583B700D82E3B /* MineMessageController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineMessageController.m; sourceTree = "<group>"; }; 676 D209AD6D1EC583B700D82E3B /* MineMessageController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineMessageController.m; sourceTree = "<group>"; };
689 D209AD6F1EC583D100D82E3B /* MineAccountController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MineAccountController.h; sourceTree = "<group>"; }; 677 D209AD6F1EC583D100D82E3B /* MineAccountController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MineAccountController.h; sourceTree = "<group>"; };
690 D209AD701EC583D100D82E3B /* MineAccountController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineAccountController.m; sourceTree = "<group>"; }; 678 D209AD701EC583D100D82E3B /* MineAccountController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineAccountController.m; sourceTree = "<group>"; };
691 - D20C82BC1EEEA89700BB609F /* LVCHomePageListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCHomePageListModel.h; sourceTree = "<group>"; };  
692 - D20C82BD1EEEA89700BB609F /* LVCHomePageListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCHomePageListModel.m; sourceTree = "<group>"; };  
693 - D214CB4C1EF7BD890014EEBA /* V8HorizontalPickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = V8HorizontalPickerView.h; sourceTree = "<group>"; };  
694 - D214CB4D1EF7BD890014EEBA /* V8HorizontalPickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = V8HorizontalPickerView.m; sourceTree = "<group>"; };  
695 - D214CB4E1EF7BD890014EEBA /* V8HorizontalPickerViewProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = V8HorizontalPickerViewProtocol.h; sourceTree = "<group>"; };  
696 - D214CB501EF7CB310014EEBA /* LVCChannelPagingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCChannelPagingView.h; sourceTree = "<group>"; };  
697 - D214CB511EF7CB310014EEBA /* LVCChannelPagingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCChannelPagingView.m; sourceTree = "<group>"; };  
698 D217A2451E7B76C7003B44CB /* PresentModelAble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentModelAble.h; sourceTree = "<group>"; }; 679 D217A2451E7B76C7003B44CB /* PresentModelAble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentModelAble.h; sourceTree = "<group>"; };
699 D217A2461E7B76C7003B44CB /* PresentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentView.h; sourceTree = "<group>"; }; 680 D217A2461E7B76C7003B44CB /* PresentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentView.h; sourceTree = "<group>"; };
700 D217A2471E7B76C7003B44CB /* PresentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresentView.m; sourceTree = "<group>"; }; 681 D217A2471E7B76C7003B44CB /* PresentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresentView.m; sourceTree = "<group>"; };
@@ -702,8 +683,6 @@ @@ -702,8 +683,6 @@
702 D217A2491E7B76C7003B44CB /* PresentViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresentViewCell.m; sourceTree = "<group>"; }; 683 D217A2491E7B76C7003B44CB /* PresentViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresentViewCell.m; sourceTree = "<group>"; };
703 D217A24C1E7B77C7003B44CB /* ComboCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComboCell.h; path = Present/ComboCell.h; sourceTree = "<group>"; }; 684 D217A24C1E7B77C7003B44CB /* ComboCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComboCell.h; path = Present/ComboCell.h; sourceTree = "<group>"; };
704 D217A24D1E7B77C7003B44CB /* ComboCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ComboCell.m; path = Present/ComboCell.m; sourceTree = "<group>"; }; 685 D217A24D1E7B77C7003B44CB /* ComboCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ComboCell.m; path = Present/ComboCell.m; sourceTree = "<group>"; };
705 - D219E8691EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCBigHorizontalCollectionViewCell.h; sourceTree = "<group>"; };  
706 - D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCBigHorizontalCollectionViewCell.m; sourceTree = "<group>"; };  
707 D224B1951E826ED800CC61D0 /* ChatBarrageAnimAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageAnimAction.h; sourceTree = "<group>"; }; 686 D224B1951E826ED800CC61D0 /* ChatBarrageAnimAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageAnimAction.h; sourceTree = "<group>"; };
708 D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageAnimAction.m; sourceTree = "<group>"; }; 687 D224B1961E826ED800CC61D0 /* ChatBarrageAnimAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageAnimAction.m; sourceTree = "<group>"; };
709 D22830EF1E778C0F00627701 /* LiveBaseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveBaseView.h; sourceTree = "<group>"; }; 688 D22830EF1E778C0F00627701 /* LiveBaseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveBaseView.h; sourceTree = "<group>"; };
@@ -768,12 +747,6 @@ @@ -768,12 +747,6 @@
768 D245715E1E83B09900AA85D6 /* userInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = userInfoModel.m; sourceTree = "<group>"; }; 747 D245715E1E83B09900AA85D6 /* userInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = userInfoModel.m; sourceTree = "<group>"; };
769 D24571611E83C40B00AA85D6 /* PrivateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateView.h; sourceTree = "<group>"; }; 748 D24571611E83C40B00AA85D6 /* PrivateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateView.h; sourceTree = "<group>"; };
770 D24571621E83C40B00AA85D6 /* PrivateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivateView.m; sourceTree = "<group>"; }; 749 D24571621E83C40B00AA85D6 /* PrivateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivateView.m; sourceTree = "<group>"; };
771 - D24CFC1E1EFA092300AA6ADB /* JBBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBBannerView.h; sourceTree = "<group>"; };  
772 - D24CFC1F1EFA092300AA6ADB /* JBBannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBBannerView.m; sourceTree = "<group>"; };  
773 - D24F40901EFB727000833738 /* JBAutoRollTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBAutoRollTableView.h; sourceTree = "<group>"; };  
774 - D24F40911EFB727000833738 /* JBAutoRollTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBAutoRollTableView.m; sourceTree = "<group>"; };  
775 - D24F40931EFB965A00833738 /* JBSearchView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JBSearchView.h; sourceTree = "<group>"; };  
776 - D24F40941EFB965A00833738 /* JBSearchView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JBSearchView.m; sourceTree = "<group>"; };  
777 D2552FFE1E7909AC00DF38A5 /* GiftAnimOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiftAnimOperation.h; sourceTree = "<group>"; }; 750 D2552FFE1E7909AC00DF38A5 /* GiftAnimOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiftAnimOperation.h; sourceTree = "<group>"; };
778 D2552FFF1E7909AC00DF38A5 /* GiftAnimOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GiftAnimOperation.m; sourceTree = "<group>"; }; 751 D2552FFF1E7909AC00DF38A5 /* GiftAnimOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GiftAnimOperation.m; sourceTree = "<group>"; };
779 D25530011E79115100DF38A5 /* AnimQueueManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimQueueManager.h; sourceTree = "<group>"; }; 752 D25530011E79115100DF38A5 /* AnimQueueManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimQueueManager.h; sourceTree = "<group>"; };
@@ -838,16 +811,12 @@ @@ -838,16 +811,12 @@
838 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; }; 811 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; };
839 D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCCommentModel.h; sourceTree = "<group>"; }; 812 D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCCommentModel.h; sourceTree = "<group>"; };
840 D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCCommentModel.m; sourceTree = "<group>"; }; 813 D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCCommentModel.m; sourceTree = "<group>"; };
841 - D2EBC8621F02105C00F198FB /* LVCHomePageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCHomePageViewController.h; sourceTree = "<group>"; };  
842 - D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCHomePageViewController.m; sourceTree = "<group>"; };  
843 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; }; 814 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; };
844 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; }; 815 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; };
845 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; }; 816 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; };
846 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLiveActivityInfoService.m; sourceTree = "<group>"; }; 817 D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLiveActivityInfoService.m; sourceTree = "<group>"; };
847 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListController.h; sourceTree = "<group>"; }; 818 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListController.h; sourceTree = "<group>"; };
848 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListController.m; sourceTree = "<group>"; }; 819 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListController.m; sourceTree = "<group>"; };
849 - D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListView.h; sourceTree = "<group>"; };  
850 - D2EBC86E1F02108000F198FB /* LVCUGCLiveListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListView.m; sourceTree = "<group>"; };  
851 D2EBC86F1F02108000F198FB /* LVCUGCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLivePlayerController.h; sourceTree = "<group>"; }; 820 D2EBC86F1F02108000F198FB /* LVCUGCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLivePlayerController.h; sourceTree = "<group>"; };
852 D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLivePlayerController.m; sourceTree = "<group>"; }; 821 D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLivePlayerController.m; sourceTree = "<group>"; };
853 D2EBC8771F02108F00F198FB /* LVCUGCLiveListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListModel.h; sourceTree = "<group>"; }; 822 D2EBC8771F02108F00F198FB /* LVCUGCLiveListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListModel.h; sourceTree = "<group>"; };
@@ -862,6 +831,10 @@ @@ -862,6 +831,10 @@
862 D2EBC8821F02109C00F198FB /* LVCUGCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCPlayerLoadingView.m; sourceTree = "<group>"; }; 831 D2EBC8821F02109C00F198FB /* LVCUGCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCPlayerLoadingView.m; sourceTree = "<group>"; };
863 D2EBC8861F0225D900F198FB /* LVCVodPlayerListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodPlayerListController.h; sourceTree = "<group>"; }; 832 D2EBC8861F0225D900F198FB /* LVCVodPlayerListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodPlayerListController.h; sourceTree = "<group>"; };
864 D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodPlayerListController.m; sourceTree = "<group>"; }; 833 D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodPlayerListController.m; sourceTree = "<group>"; };
  834 + D2EBC8891F02361600F198FB /* LVCUGCLiveListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLiveListView.h; sourceTree = "<group>"; };
  835 + D2EBC88A1F02361600F198FB /* LVCUGCLiveListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLiveListView.m; sourceTree = "<group>"; };
  836 + D2EBC88C1F023AA400F198FB /* LVCVodPlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodPlayerController.h; sourceTree = "<group>"; };
  837 + D2EBC88D1F023AA400F198FB /* LVCVodPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodPlayerController.m; sourceTree = "<group>"; };
865 /* End PBXFileReference section */ 838 /* End PBXFileReference section */
866 839
867 /* Begin PBXFrameworksBuildPhase section */ 840 /* Begin PBXFrameworksBuildPhase section */
@@ -1196,8 +1169,8 @@ @@ -1196,8 +1169,8 @@
1196 8178D4431F02045500AA78A4 /* LVCPlayer.m */, 1169 8178D4431F02045500AA78A4 /* LVCPlayer.m */,
1197 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */, 1170 8178D46C1F0225E500AA78A4 /* LVCTelevisionCell.h */,
1198 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */, 1171 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */,
1199 - 8178D4441F02045500AA78A4 /* LVCPlayerLoadingView.h */,  
1200 - 8178D4451F02045500AA78A4 /* LVCPlayerLoadingView.m */, 1172 + 8178D46F1F0239AD00AA78A4 /* LVCPlayerLoadingView.h */,
  1173 + 8178D4701F0239AD00AA78A4 /* LVCPlayerLoadingView.m */,
1201 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */, 1174 8178D4461F02045500AA78A4 /* LVCRequestFailedView.h */,
1202 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */, 1175 8178D4471F02045500AA78A4 /* LVCRequestFailedView.m */,
1203 ); 1176 );
@@ -1239,15 +1212,6 @@ @@ -1239,15 +1212,6 @@
1239 path = Model; 1212 path = Model;
1240 sourceTree = "<group>"; 1213 sourceTree = "<group>";
1241 }; 1214 };
1242 - 81F1C8351E8BBDDA0085C2B8 /* MHPagingScrollView */ = {  
1243 - isa = PBXGroup;  
1244 - children = (  
1245 - 81F1C8361E8BBDDA0085C2B8 /* MHPagingScrollView.h */,  
1246 - 81F1C8371E8BBDDA0085C2B8 /* MHPagingScrollView.m */,  
1247 - );  
1248 - path = MHPagingScrollView;  
1249 - sourceTree = "<group>";  
1250 - };  
1251 81FB5B391E7A6FFC00F98E1D /* SevenSwitch */ = { 1215 81FB5B391E7A6FFC00F98E1D /* SevenSwitch */ = {
1252 isa = PBXGroup; 1216 isa = PBXGroup;
1253 children = ( 1217 children = (
@@ -1386,7 +1350,6 @@ @@ -1386,7 +1350,6 @@
1386 D2393D041F02505400D3EE17 /* QQSDK */, 1350 D2393D041F02505400D3EE17 /* QQSDK */,
1387 D214CB4B1EF7BD890014EEBA /* V8HorizontalPickerView */, 1351 D214CB4B1EF7BD890014EEBA /* V8HorizontalPickerView */,
1388 4BD855D41EBACD530082061D /* AFNetworking */, 1352 4BD855D41EBACD530082061D /* AFNetworking */,
1389 - 81F1C8351E8BBDDA0085C2B8 /* MHPagingScrollView */,  
1390 81FB5B391E7A6FFC00F98E1D /* SevenSwitch */, 1353 81FB5B391E7A6FFC00F98E1D /* SevenSwitch */,
1391 810B64E41E779B1F00133E15 /* Masonry */, 1354 810B64E41E779B1F00133E15 /* Masonry */,
1392 D2029BF81E6EADE10027CD92 /* MBProgressHUD */, 1355 D2029BF81E6EADE10027CD92 /* MBProgressHUD */,
@@ -1625,7 +1588,6 @@ @@ -1625,7 +1588,6 @@
1625 D2888D951E6EBAA7003A77C8 /* LiveSections */, 1588 D2888D951E6EBAA7003A77C8 /* LiveSections */,
1626 D2575C431E76846900E3A8FC /* InteractionSections */, 1589 D2575C431E76846900E3A8FC /* InteractionSections */,
1627 D2029C751E6EADE10027CD92 /* ZXSections(例子) */, 1590 D2029C751E6EADE10027CD92 /* ZXSections(例子) */,
1628 - D233EE731EEA8A1500674ED5 /* HomePageSections */,  
1629 ); 1591 );
1630 path = Sections; 1592 path = Sections;
1631 sourceTree = "<group>"; 1593 sourceTree = "<group>";
@@ -1819,54 +1781,6 @@ @@ -1819,54 +1781,6 @@
1819 name = Model; 1781 name = Model;
1820 sourceTree = "<group>"; 1782 sourceTree = "<group>";
1821 }; 1783 };
1822 - D20C82BF1EEEA89E00BB609F /* Model */ = {  
1823 - isa = PBXGroup;  
1824 - children = (  
1825 - D20C82BC1EEEA89700BB609F /* LVCHomePageListModel.h */,  
1826 - D20C82BD1EEEA89700BB609F /* LVCHomePageListModel.m */,  
1827 - D23BBDB91EF8E8B2002FE0B8 /* LVCBannerAndMarqueeModel.h */,  
1828 - D23BBDBA1EF8E8B2002FE0B8 /* LVCBannerAndMarqueeModel.m */,  
1829 - D23BBDBC1EF8ED4A002FE0B8 /* LVCChannelDetailModel.h */,  
1830 - D23BBDBD1EF8ED4A002FE0B8 /* LVCChannelDetailModel.m */,  
1831 - D23BBDBF1EF8F513002FE0B8 /* LVCBqWqXgModel.h */,  
1832 - D23BBDC01EF8F513002FE0B8 /* LVCBqWqXgModel.m */,  
1833 - );  
1834 - name = Model;  
1835 - sourceTree = "<group>";  
1836 - };  
1837 - D214CB4B1EF7BD890014EEBA /* V8HorizontalPickerView */ = {  
1838 - isa = PBXGroup;  
1839 - children = (  
1840 - D214CB4C1EF7BD890014EEBA /* V8HorizontalPickerView.h */,  
1841 - D214CB4D1EF7BD890014EEBA /* V8HorizontalPickerView.m */,  
1842 - D214CB4E1EF7BD890014EEBA /* V8HorizontalPickerViewProtocol.h */,  
1843 - );  
1844 - path = V8HorizontalPickerView;  
1845 - sourceTree = "<group>";  
1846 - };  
1847 - D214CB531EF7CB380014EEBA /* View */ = {  
1848 - isa = PBXGroup;  
1849 - children = (  
1850 - D214CB501EF7CB310014EEBA /* LVCChannelPagingView.h */,  
1851 - D214CB511EF7CB310014EEBA /* LVCChannelPagingView.m */,  
1852 - D23BBDB61EF8D15D002FE0B8 /* LVCMainHeaderCollectionReusableView.h */,  
1853 - D23BBDB71EF8D15D002FE0B8 /* LVCMainHeaderCollectionReusableView.m */,  
1854 - D23BBDC51EF8FBD1002FE0B8 /* LVCSectionHeaderCollectionReusableView.h */,  
1855 - D23BBDC61EF8FBD1002FE0B8 /* LVCSectionHeaderCollectionReusableView.m */,  
1856 - D23BBDC21EF8FB99002FE0B8 /* LVCMainHorizontalCollectionViewCell.h */,  
1857 - D23BBDC31EF8FB99002FE0B8 /* LVCMainHorizontalCollectionViewCell.m */,  
1858 - D219E8691EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.h */,  
1859 - D219E86A1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m */,  
1860 - D24F40931EFB965A00833738 /* JBSearchView.h */,  
1861 - D24F40941EFB965A00833738 /* JBSearchView.m */,  
1862 - D24CFC1E1EFA092300AA6ADB /* JBBannerView.h */,  
1863 - D24CFC1F1EFA092300AA6ADB /* JBBannerView.m */,  
1864 - D24F40901EFB727000833738 /* JBAutoRollTableView.h */,  
1865 - D24F40911EFB727000833738 /* JBAutoRollTableView.m */,  
1866 - );  
1867 - name = View;  
1868 - sourceTree = "<group>";  
1869 - };  
1870 D217A2441E7B76C7003B44CB /* Present */ = { 1784 D217A2441E7B76C7003B44CB /* Present */ = {
1871 isa = PBXGroup; 1785 isa = PBXGroup;
1872 children = ( 1786 children = (
@@ -1936,25 +1850,6 @@ @@ -1936,25 +1850,6 @@
1936 path = GiftModel; 1850 path = GiftModel;
1937 sourceTree = "<group>"; 1851 sourceTree = "<group>";
1938 }; 1852 };
1939 - D233EE731EEA8A1500674ED5 /* HomePageSections */ = {  
1940 - isa = PBXGroup;  
1941 - children = (  
1942 - D233EE741EEE26C700674ED5 /* Controller */,  
1943 - D20C82BF1EEEA89E00BB609F /* Model */,  
1944 - D214CB531EF7CB380014EEBA /* View */,  
1945 - );  
1946 - path = HomePageSections;  
1947 - sourceTree = "<group>";  
1948 - };  
1949 - D233EE741EEE26C700674ED5 /* Controller */ = {  
1950 - isa = PBXGroup;  
1951 - children = (  
1952 - D2EBC8621F02105C00F198FB /* LVCHomePageViewController.h */,  
1953 - D2EBC8631F02105C00F198FB /* LVCHomePageViewController.m */,  
1954 - );  
1955 - name = Controller;  
1956 - sourceTree = "<group>";  
1957 - };  
1958 D236968F1E7FC83800E4BF71 /* ChatMsgModel */ = { 1853 D236968F1E7FC83800E4BF71 /* ChatMsgModel */ = {
1959 isa = PBXGroup; 1854 isa = PBXGroup;
1960 children = ( 1855 children = (
@@ -2123,7 +2018,6 @@ @@ -2123,7 +2018,6 @@
2123 isa = PBXGroup; 2018 isa = PBXGroup;
2124 children = ( 2019 children = (
2125 8178D4671F021C4500AA78A4 /* TelevisionData.json */, 2020 8178D4671F021C4500AA78A4 /* TelevisionData.json */,
2126 - 81DFC4251F0113B40029BCB3 /* JsonFile.json */,  
2127 D25BF88C1E7F7F77007FB138 /* Images */, 2021 D25BF88C1E7F7F77007FB138 /* Images */,
2128 D25BF88B1E7F7F77007FB138 /* Fonts */, 2022 D25BF88B1E7F7F77007FB138 /* Fonts */,
2129 D25BF88D1E7F7F77007FB138 /* Sound */, 2023 D25BF88D1E7F7F77007FB138 /* Sound */,
@@ -2223,6 +2117,8 @@ @@ -2223,6 +2117,8 @@
2223 children = ( 2117 children = (
2224 D2EBC8861F0225D900F198FB /* LVCVodPlayerListController.h */, 2118 D2EBC8861F0225D900F198FB /* LVCVodPlayerListController.h */,
2225 D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */, 2119 D2EBC8871F0225D900F198FB /* LVCVodPlayerListController.m */,
  2120 + D2EBC88C1F023AA400F198FB /* LVCVodPlayerController.h */,
  2121 + D2EBC88D1F023AA400F198FB /* LVCVodPlayerController.m */,
2226 ); 2122 );
2227 path = Controller; 2123 path = Controller;
2228 sourceTree = "<group>"; 2124 sourceTree = "<group>";
@@ -2262,16 +2158,14 @@ @@ -2262,16 +2158,14 @@
2262 D2EBC85F1F020F3C00F198FB /* Controller */ = { 2158 D2EBC85F1F020F3C00F198FB /* Controller */ = {
2263 isa = PBXGroup; 2159 isa = PBXGroup;
2264 children = ( 2160 children = (
2265 - D2EBC8651F02108000F198FB /* LiveListService.h */,  
2266 - D2EBC8661F02108000F198FB /* LiveListService.m */,  
2267 - D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */,  
2268 - D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */,  
2269 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */, 2161 D2EBC86B1F02108000F198FB /* LVCUGCLiveListController.h */,
2270 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */, 2162 D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */,
2271 - D2EBC86D1F02108000F198FB /* LVCUGCLiveListView.h */,  
2272 - D2EBC86E1F02108000F198FB /* LVCUGCLiveListView.m */,  
2273 D2EBC86F1F02108000F198FB /* LVCUGCLivePlayerController.h */, 2163 D2EBC86F1F02108000F198FB /* LVCUGCLivePlayerController.h */,
2274 D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */, 2164 D2EBC8701F02108000F198FB /* LVCUGCLivePlayerController.m */,
  2165 + D2EBC8651F02108000F198FB /* LiveListService.h */,
  2166 + D2EBC8661F02108000F198FB /* LiveListService.m */,
  2167 + D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */,
  2168 + D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */,
2275 ); 2169 );
2276 path = Controller; 2170 path = Controller;
2277 sourceTree = "<group>"; 2171 sourceTree = "<group>";
@@ -2290,6 +2184,8 @@ @@ -2290,6 +2184,8 @@
2290 D2EBC8611F020F3C00F198FB /* View */ = { 2184 D2EBC8611F020F3C00F198FB /* View */ = {
2291 isa = PBXGroup; 2185 isa = PBXGroup;
2292 children = ( 2186 children = (
  2187 + D2EBC8891F02361600F198FB /* LVCUGCLiveListView.h */,
  2188 + D2EBC88A1F02361600F198FB /* LVCUGCLiveListView.m */,
2293 D2EBC87D1F02109C00F198FB /* LVCUGCBackgroundView.h */, 2189 D2EBC87D1F02109C00F198FB /* LVCUGCBackgroundView.h */,
2294 D2EBC87E1F02109C00F198FB /* LVCUGCBackgroundView.m */, 2190 D2EBC87E1F02109C00F198FB /* LVCUGCBackgroundView.m */,
2295 D2EBC87F1F02109C00F198FB /* LVCUGCLivePlayerCell.h */, 2191 D2EBC87F1F02109C00F198FB /* LVCUGCLivePlayerCell.h */,
@@ -2411,7 +2307,6 @@ @@ -2411,7 +2307,6 @@
2411 files = ( 2307 files = (
2412 D2393D081F02505400D3EE17 /* TencentOpenApi_IOS_Bundle.bundle in Resources */, 2308 D2393D081F02505400D3EE17 /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
2413 D2029C971E6EADE10027CD92 /* Info.plist in Resources */, 2309 D2029C971E6EADE10027CD92 /* Info.plist in Resources */,
2414 - 81DFC4261F0113B40029BCB3 /* JsonFile.json in Resources */,  
2415 D2575C7F1E76A4F300E3A8FC /* NHPlaneViews.xib in Resources */, 2310 D2575C7F1E76A4F300E3A8FC /* NHPlaneViews.xib in Resources */,
2416 D2393D0F1F0250A100D3EE17 /* read_me.txt in Resources */, 2311 D2393D0F1F0250A100D3EE17 /* read_me.txt in Resources */,
2417 D2393D1E1F0250A700D3EE17 /* WeiboSDK.bundle in Resources */, 2312 D2393D1E1F0250A700D3EE17 /* WeiboSDK.bundle in Resources */,
@@ -2457,7 +2352,6 @@ @@ -2457,7 +2352,6 @@
2457 D2029CC01E6EADE10027CD92 /* UIImage+GIF.m in Sources */, 2352 D2029CC01E6EADE10027CD92 /* UIImage+GIF.m in Sources */,
2458 4B45CE851EB86A590079AFB7 /* LVCClearCachesCell.m in Sources */, 2353 4B45CE851EB86A590079AFB7 /* LVCClearCachesCell.m in Sources */,
2459 4B45CE9B1EB86A760079AFB7 /* ZXUIKit.m in Sources */, 2354 4B45CE9B1EB86A760079AFB7 /* ZXUIKit.m in Sources */,
2460 - D214CB4F1EF7BD890014EEBA /* V8HorizontalPickerView.m in Sources */,  
2461 D2029BCF1E6EADD70027CD92 /* ZXTabBarController.m in Sources */, 2355 D2029BCF1E6EADD70027CD92 /* ZXTabBarController.m in Sources */,
2462 D2029CB81E6EADE10027CD92 /* SDImageCache.m in Sources */, 2356 D2029CB81E6EADE10027CD92 /* SDImageCache.m in Sources */,
2463 D2029CBB1E6EADE10027CD92 /* SDWebImageDownloader.m in Sources */, 2357 D2029CBB1E6EADE10027CD92 /* SDWebImageDownloader.m in Sources */,
@@ -2467,7 +2361,6 @@ @@ -2467,7 +2361,6 @@
2467 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */, 2361 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */,
2468 D2029C861E6EADE10027CD92 /* Tools.m in Sources */, 2362 D2029C861E6EADE10027CD92 /* Tools.m in Sources */,
2469 4B42A6C41EC00CC800DA09D7 /* UIAlertView+Blocks.m in Sources */, 2363 4B42A6C41EC00CC800DA09D7 /* UIAlertView+Blocks.m in Sources */,
2470 - D214CB521EF7CB310014EEBA /* LVCChannelPagingView.m in Sources */,  
2471 4B45CE861EB86A590079AFB7 /* LVCLoginShowView.m in Sources */, 2364 4B45CE861EB86A590079AFB7 /* LVCLoginShowView.m in Sources */,
2472 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */, 2365 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */,
2473 4BD855FE1EBACD530082061D /* AFSecurityPolicy.m in Sources */, 2366 4BD855FE1EBACD530082061D /* AFSecurityPolicy.m in Sources */,
@@ -2475,7 +2368,6 @@ @@ -2475,7 +2368,6 @@
2475 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */, 2368 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */,
2476 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */, 2369 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */,
2477 D22831091E77D8D500627701 /* GiftModel.m in Sources */, 2370 D22831091E77D8D500627701 /* GiftModel.m in Sources */,
2478 - D23BBDBE1EF8ED4A002FE0B8 /* LVCChannelDetailModel.m in Sources */,  
2479 D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */, 2371 D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */,
2480 4BD8560F1EBACEF80082061D /* CNLiveWebView.m in Sources */, 2372 4BD8560F1EBACEF80082061D /* CNLiveWebView.m in Sources */,
2481 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, 2373 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
@@ -2487,7 +2379,6 @@ @@ -2487,7 +2379,6 @@
2487 81F1C8401E8BC5CC0085C2B8 /* NSArray+Safety.m in Sources */, 2379 81F1C8401E8BC5CC0085C2B8 /* NSArray+Safety.m in Sources */,
2488 D2029D011E6EAE2E0027CD92 /* UIColor+HexString.m in Sources */, 2380 D2029D011E6EAE2E0027CD92 /* UIColor+HexString.m in Sources */,
2489 4B45CE7D1EB86A590079AFB7 /* ModifyInfomationController.m in Sources */, 2381 4B45CE7D1EB86A590079AFB7 /* ModifyInfomationController.m in Sources */,
2490 - D23BBDBB1EF8E8B2002FE0B8 /* LVCBannerAndMarqueeModel.m in Sources */,  
2491 D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */, 2382 D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */,
2492 D2575C7A1E76A4F300E3A8FC /* NHCarViews.m in Sources */, 2383 D2575C7A1E76A4F300E3A8FC /* NHCarViews.m in Sources */,
2493 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */, 2384 8178D44A1F02045500AA78A4 /* CNBarrageManager.m in Sources */,
@@ -2504,7 +2395,6 @@ @@ -2504,7 +2395,6 @@
2504 4BD8561D1EBAD6490082061D /* ZXConst.m in Sources */, 2395 4BD8561D1EBAD6490082061D /* ZXConst.m in Sources */,
2505 D2029CB71E6EADE10027CD92 /* NSData+ImageContentType.m in Sources */, 2396 D2029CB71E6EADE10027CD92 /* NSData+ImageContentType.m in Sources */,
2506 D23DC1551ECC41C100103B0E /* LVCVerifyViewController.m in Sources */, 2397 D23DC1551ECC41C100103B0E /* LVCVerifyViewController.m in Sources */,
2507 - D2EBC8641F02105C00F198FB /* LVCHomePageViewController.m in Sources */,  
2508 D29E81ED1E88DC5B008C9906 /* PriChatCell.m in Sources */, 2398 D29E81ED1E88DC5B008C9906 /* PriChatCell.m in Sources */,
2509 D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */, 2399 D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */,
2510 D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */, 2400 D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */,
@@ -2515,9 +2405,7 @@ @@ -2515,9 +2405,7 @@
2515 D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */, 2405 D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */,
2516 D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, 2406 D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */,
2517 4B45CE7A1EB86A590079AFB7 /* MineLiveController.m in Sources */, 2407 4B45CE7A1EB86A590079AFB7 /* MineLiveController.m in Sources */,
2518 - D24F40951EFB965A00833738 /* JBSearchView.m in Sources */,  
2519 D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */, 2408 D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */,
2520 - 81F1C8381E8BBDDA0085C2B8 /* MHPagingScrollView.m in Sources */,  
2521 D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */, 2409 D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */,
2522 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */, 2410 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */,
2523 4BD855FB1EBACD530082061D /* AFHTTPRequestOperationManager.m in Sources */, 2411 4BD855FB1EBACD530082061D /* AFHTTPRequestOperationManager.m in Sources */,
@@ -2532,7 +2420,6 @@ @@ -2532,7 +2420,6 @@
2532 4B45CEA61EB86B9F0079AFB7 /* NSNumber+ScaleHeight.m in Sources */, 2420 4B45CEA61EB86B9F0079AFB7 /* NSNumber+ScaleHeight.m in Sources */,
2533 810B65031E779B1F00133E15 /* MASViewConstraint.m in Sources */, 2421 810B65031E779B1F00133E15 /* MASViewConstraint.m in Sources */,
2534 D2029BCE1E6EADD70027CD92 /* ZXNavigationController.m in Sources */, 2422 D2029BCE1E6EADD70027CD92 /* ZXNavigationController.m in Sources */,
2535 - D23BBDC71EF8FBD1002FE0B8 /* LVCSectionHeaderCollectionReusableView.m in Sources */,  
2536 D2029CA21E6EADE10027CD92 /* MJRefreshAutoFooter.m in Sources */, 2423 D2029CA21E6EADE10027CD92 /* MJRefreshAutoFooter.m in Sources */,
2537 D2029CC71E6EADE10027CD92 /* SVIndefiniteAnimatedView.m in Sources */, 2424 D2029CC71E6EADE10027CD92 /* SVIndefiniteAnimatedView.m in Sources */,
2538 D2029CA31E6EADE10027CD92 /* MJRefreshBackFooter.m in Sources */, 2425 D2029CA31E6EADE10027CD92 /* MJRefreshBackFooter.m in Sources */,
@@ -2542,16 +2429,13 @@ @@ -2542,16 +2429,13 @@
2542 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */, 2429 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */,
2543 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */, 2430 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */,
2544 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */, 2431 D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */,
2545 - D23BBDB81EF8D15D002FE0B8 /* LVCMainHeaderCollectionReusableView.m in Sources */, 2432 + D2EBC88B1F02361600F198FB /* LVCUGCLiveListView.m in Sources */,
2546 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */, 2433 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */,
2547 D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */, 2434 D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */,
2548 4B45CE801EB86A590079AFB7 /* idAndPwdView.m in Sources */, 2435 4B45CE801EB86A590079AFB7 /* idAndPwdView.m in Sources */,
2549 - 8178D4521F02045500AA78A4 /* LVCPlayerLoadingView.m in Sources */,  
2550 - D23BBDC41EF8FB99002FE0B8 /* LVCMainHorizontalCollectionViewCell.m in Sources */,  
2551 8178D4251F02043500AA78A4 /* LVCLivePlayerController.m in Sources */, 2436 8178D4251F02043500AA78A4 /* LVCLivePlayerController.m in Sources */,
2552 D236967E1E7F9E4100E4BF71 /* GiftPayButton.m in Sources */, 2437 D236967E1E7F9E4100E4BF71 /* GiftPayButton.m in Sources */,
2553 4BD8560A1EBACD530082061D /* UIWebView+AFNetworking.m in Sources */, 2438 4BD8560A1EBACD530082061D /* UIWebView+AFNetworking.m in Sources */,
2554 - D219E86B1EFD04A700650F38 /* LVCBigHorizontalCollectionViewCell.m in Sources */,  
2555 D2EBC8881F0225D900F198FB /* LVCVodPlayerListController.m in Sources */, 2439 D2EBC8881F0225D900F198FB /* LVCVodPlayerListController.m in Sources */,
2556 4B45CE831EB86A590079AFB7 /* LVCMineModel.m in Sources */, 2440 4B45CE831EB86A590079AFB7 /* LVCMineModel.m in Sources */,
2557 4B45CE791EB86A590079AFB7 /* MineAboutUsController.m in Sources */, 2441 4B45CE791EB86A590079AFB7 /* MineAboutUsController.m in Sources */,
@@ -2560,8 +2444,8 @@ @@ -2560,8 +2444,8 @@
2560 D2029CC81E6EADE10027CD92 /* SVProgressAnimatedView.m in Sources */, 2444 D2029CC81E6EADE10027CD92 /* SVProgressAnimatedView.m in Sources */,
2561 4B45CE891EB86A590079AFB7 /* LVCPersonalImageCell.m in Sources */, 2445 4B45CE891EB86A590079AFB7 /* LVCPersonalImageCell.m in Sources */,
2562 D2029C961E6EADE10027CD92 /* MBProgressHUD.m in Sources */, 2446 D2029C961E6EADE10027CD92 /* MBProgressHUD.m in Sources */,
2563 - D24F40921EFB727000833738 /* JBAutoRollTableView.m in Sources */,  
2564 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */, 2447 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */,
  2448 + D2EBC88E1F023AA400F198FB /* LVCVodPlayerController.m in Sources */,
2565 D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */, 2449 D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */,
2566 4BD856031EBACD530082061D /* AFNetworkActivityIndicatorManager.m in Sources */, 2450 4BD856031EBACD530082061D /* AFNetworkActivityIndicatorManager.m in Sources */,
2567 4BD855CD1EBAC4B70082061D /* CNLiveKeychainWrapper.m in Sources */, 2451 4BD855CD1EBAC4B70082061D /* CNLiveKeychainWrapper.m in Sources */,
@@ -2657,13 +2541,10 @@ @@ -2657,13 +2541,10 @@
2657 4BD856041EBACD530082061D /* UIActivityIndicatorView+AFNetworking.m in Sources */, 2541 4BD856041EBACD530082061D /* UIActivityIndicatorView+AFNetworking.m in Sources */,
2658 4B45CE781EB86A590079AFB7 /* LVCMineViewController.m in Sources */, 2542 4B45CE781EB86A590079AFB7 /* LVCMineViewController.m in Sources */,
2659 D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */, 2543 D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */,
2660 - D20C82BE1EEEA89700BB609F /* LVCHomePageListModel.m in Sources */,  
2661 4B42A6C71EC0171800DA09D7 /* PlayRecordCell.m in Sources */, 2544 4B42A6C71EC0171800DA09D7 /* PlayRecordCell.m in Sources */,
2662 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */, 2545 D217A24E1E7B77C7003B44CB /* ComboCell.m in Sources */,
2663 - D24CFC201EFA092300AA6ADB /* JBBannerView.m in Sources */,  
2664 D2029CBD1E6EADE10027CD92 /* SDWebImageManager.m in Sources */, 2546 D2029CBD1E6EADE10027CD92 /* SDWebImageManager.m in Sources */,
2665 D2029CB41E6EADE10027CD92 /* UIView+MJExtension.m in Sources */, 2547 D2029CB41E6EADE10027CD92 /* UIView+MJExtension.m in Sources */,
2666 - D2EBC8751F02108000F198FB /* LVCUGCLiveListView.m in Sources */,  
2667 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */, 2548 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */,
2668 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */, 2549 D2EBC8761F02108000F198FB /* LVCUGCLivePlayerController.m in Sources */,
2669 D2029CA91E6EADE10027CD92 /* MJRefreshAutoStateFooter.m in Sources */, 2550 D2029CA91E6EADE10027CD92 /* MJRefreshAutoStateFooter.m in Sources */,
@@ -2671,9 +2552,9 @@ @@ -2671,9 +2552,9 @@
2671 D2029D061E6EAE2E0027CD92 /* UIView+Extension.m in Sources */, 2552 D2029D061E6EAE2E0027CD92 /* UIView+Extension.m in Sources */,
2672 D25530001E7909AC00DF38A5 /* GiftAnimOperation.m in Sources */, 2553 D25530001E7909AC00DF38A5 /* GiftAnimOperation.m in Sources */,
2673 D2029C9D1E6EADE10027CD92 /* NSObject+MJClass.m in Sources */, 2554 D2029C9D1E6EADE10027CD92 /* NSObject+MJClass.m in Sources */,
2674 - D23BBDC11EF8F513002FE0B8 /* LVCBqWqXgModel.m in Sources */,  
2675 D2029CCF1E6EADE10027CD92 /* SearchHttp.m in Sources */, 2555 D2029CCF1E6EADE10027CD92 /* SearchHttp.m in Sources */,
2676 810B65001E779B1F00133E15 /* MASConstraintMaker.m in Sources */, 2556 810B65001E779B1F00133E15 /* MASConstraintMaker.m in Sources */,
  2557 + 8178D4711F0239AD00AA78A4 /* LVCPlayerLoadingView.m in Sources */,
2677 D245715C1E83A62B00AA85D6 /* BounceView.m in Sources */, 2558 D245715C1E83A62B00AA85D6 /* BounceView.m in Sources */,
2678 D2029D021E6EAE2E0027CD92 /* UIImage+ScaleImageSize.m in Sources */, 2559 D2029D021E6EAE2E0027CD92 /* UIImage+ScaleImageSize.m in Sources */,
2679 D2029BCC1E6EADD70027CD92 /* BaseView.m in Sources */, 2560 D2029BCC1E6EADD70027CD92 /* BaseView.m in Sources */,
LiveVideoCloud.xcodeproj/xcuserdata/cnlive.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -10,54 +10,6 @@ @@ -10,54 +10,6 @@
10 ignoreCount = "0" 10 ignoreCount = "0"
11 continueAfterRunningActions = "No" 11 continueAfterRunningActions = "No"
12 filePath = "LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m" 12 filePath = "LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m"
13 - timestampString = "520247902.968764"  
14 - startingColumnNumber = "9223372036854775807"  
15 - endingColumnNumber = "9223372036854775807"  
16 - startingLineNumber = "111"  
17 - endingLineNumber = "111"  
18 - landmarkName = "-verificationBtnAction"  
19 - landmarkType = "7">  
20 - </BreakpointContent>  
21 - </BreakpointProxy>  
22 - <BreakpointProxy  
23 - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">  
24 - <BreakpointContent  
25 - shouldBeEnabled = "Yes"  
26 - ignoreCount = "0"  
27 - continueAfterRunningActions = "No"  
28 - filePath = "LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m"  
29 - timestampString = "520247904.16889"  
30 - startingColumnNumber = "9223372036854775807"  
31 - endingColumnNumber = "9223372036854775807"  
32 - startingLineNumber = "116"  
33 - endingLineNumber = "116"  
34 - landmarkName = "-verificationBtnAction"  
35 - landmarkType = "7">  
36 - </BreakpointContent>  
37 - </BreakpointProxy>  
38 - <BreakpointProxy  
39 - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">  
40 - <BreakpointContent  
41 - shouldBeEnabled = "Yes"  
42 - ignoreCount = "0"  
43 - continueAfterRunningActions = "No"  
44 - filePath = "LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m"  
45 - timestampString = "520248047.063621"  
46 - startingColumnNumber = "9223372036854775807"  
47 - endingColumnNumber = "9223372036854775807"  
48 - startingLineNumber = "101"  
49 - endingLineNumber = "101"  
50 - landmarkName = "-verificationBtnAction"  
51 - landmarkType = "7">  
52 - </BreakpointContent>  
53 - </BreakpointProxy>  
54 - <BreakpointProxy  
55 - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">  
56 - <BreakpointContent  
57 - shouldBeEnabled = "Yes"  
58 - ignoreCount = "0"  
59 - continueAfterRunningActions = "No"  
60 - filePath = "LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m"  
61 timestampString = "520251044.009626" 13 timestampString = "520251044.009626"
62 startingColumnNumber = "9223372036854775807" 14 startingColumnNumber = "9223372036854775807"
63 endingColumnNumber = "9223372036854775807" 15 endingColumnNumber = "9223372036854775807"
LiveVideoCloud/AppCustoms/Main/ZXTabBarController.m
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 - (void)createUI 52 - (void)createUI
53 { 53 {
54 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCVodPlayerListController alloc]init]] title:@"" image:@"ic_home" selectedImage:@"ic_home_sel"]; 54 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCVodPlayerListController alloc]init]] title:@"" image:@"ic_home" selectedImage:@"ic_home_sel"];
55 - [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[UIViewController alloc]init]] title:@"" image:@"ic_live_tv" selectedImage:@"ic_live_tv_sel"]; 55 + [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCTelevisioController alloc]init]] title:@"" image:@"ic_live_tv" selectedImage:@"ic_live_tv_sel"];
56 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCUGCLiveListController alloc]init]] title:@"" image:@"ic_videocam" selectedImage:@"ic_videocam_sel"]; 56 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCUGCLiveListController alloc]init]] title:@"" image:@"ic_videocam" selectedImage:@"ic_videocam_sel"];
57 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCMineViewController alloc]init]] title:@"" image:@"ic_person" selectedImage:@"ic_person_sel"]; 57 [self setupOneChildViewController:[[ZXNavigationController alloc]initWithRootViewController:[[LVCMineViewController alloc]init]] title:@"" image:@"ic_person" selectedImage:@"ic_person_sel"];
58 } 58 }
LiveVideoCloud/AppDelegate/AppDelegate.m
@@ -23,12 +23,12 @@ @@ -23,12 +23,12 @@
23 self.window.rootViewController = [[ZXTabBarController alloc] init]; 23 self.window.rootViewController = [[ZXTabBarController alloc] init];
24 24
25 //初始化直播SDK 25 //初始化直播SDK
26 - [[CNLiveWebcastManager manager] initWithAppId:UserAppId appKey:UserAppKey]; 26 + [[CNLiveWebcastManager manager] initWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:YES];
27 27
28 //初始化聊天SDK并连接服务器 28 //初始化聊天SDK并连接服务器
29 - [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:UserAppKey appId:UserAppId]; 29 + [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:UserAppKey appId:UserAppId ];
30 30
31 - //初始化用户SDK(用户SDK无测试环境) 31 + //初始化用户SDK
32 [CNLiveUserSystemCenter setAppId:UserAppId appKey:UserAppKey appSecret:UserAppSceret isTestEnvironment:YES]; 32 [CNLiveUserSystemCenter setAppId:UserAppId appKey:UserAppKey appSecret:UserAppSceret isTestEnvironment:YES];
33 33
34 /* 34 /*
@@ -52,6 +52,7 @@ @@ -52,6 +52,7 @@
52 } error:^(CNLiveChatConnectErrorCode errors) { 52 } error:^(CNLiveChatConnectErrorCode errors) {
53 NSLog(@"连接服务器失败-----%ld", errors); 53 NSLog(@"连接服务器失败-----%ld", errors);
54 }]; 54 }];
  55 +
55 [self.window makeKeyAndVisible]; 56 [self.window makeKeyAndVisible];
56 57
57 return YES; 58 return YES;
LiveVideoCloud/Classes/SDK/MHPagingScrollView/MHPagingScrollView.h deleted 100755 → 0
1 -  
2 -#import <Foundation/Foundation.h>  
3 -#import <UIKit/UIKit.h>  
4 -@class MHPagingScrollView;  
5 -  
6 -/*  
7 - * Delegate protocol for MHPagingScrollView.  
8 - */  
9 -@protocol MHPagingScrollViewDelegate <NSObject>  
10 -  
11 -/*  
12 - * Asks the delegate to return the number of pages.  
13 - */  
14 -- (NSUInteger)numberOfPagesInPagingScrollView:(MHPagingScrollView *)pagingScrollView;  
15 -  
16 -/*  
17 - * Asks the delegate for a page to insert. The delegate should ask for a  
18 - * reusable view using dequeueReusablePageView.  
19 - */  
20 -- (UIView *)pagingScrollView:(MHPagingScrollView *)pagingScrollView pageForIndex:(NSUInteger)index;  
21 -  
22 -@end  
23 -  
24 -/*  
25 - * A paging scroll view that employs a reusable page mechanism like UITableView.  
26 - *  
27 - * MHPagingScrollView allows you to show partial previews of the pages to the  
28 - * left and right of the current page. The bounds of the scroll view always  
29 - * correspond to a single page. To allow these previews, make the scroll view  
30 - * smaller to make room for the preview pages and set the previewInsets  
31 - * property.  
32 - */  
33 -@interface MHPagingScrollView : UIScrollView  
34 -  
35 -/* The delegate for paging events. */  
36 -@property (nonatomic, weak) id <MHPagingScrollViewDelegate> pagingDelegate;  
37 -  
38 -/* The width of the preview pages. */  
39 -@property (nonatomic, assign) UIEdgeInsets previewInsets;  
40 -  
41 -/* set prepare, default is 0 */  
42 -@property (nonatomic, assign) NSUInteger rightPrepareCount;  
43 -@property (nonatomic, assign) NSUInteger leftPrepareCount;  
44 -  
45 -//- (void)refreshPage;  
46 -  
47 -/*  
48 - * Makes the page at the requested index visible.  
49 - */  
50 -- (void)selectPageAtIndex:(NSUInteger)index animated:(BOOL)animated;  
51 -  
52 -/*  
53 - * Returns the index of the page that is currently visible.  
54 - */  
55 -- (NSUInteger)indexOfSelectedPage;  
56 -  
57 -/*  
58 - * Returns a reusable UIView object.  
59 - */  
60 -- (UIView *)dequeueReusablePage;  
61 -  
62 -- (UIView *)dequeueReusablePageWithIdentify:(NSString *)identify;  
63 -  
64 -/*  
65 - * Reloads the pages. Call this method when the number of pages has changed.  
66 - */  
67 -- (void)reloadPages;  
68 -  
69 -/*  
70 - * Call this from your view controller's UIScrollViewDelegate.  
71 - */  
72 -- (void)scrollViewDidScroll;  
73 -  
74 -/*  
75 - * Call this from your view controller's willRotateToInterfaceOrientation if  
76 - * you want to support autorotation.  
77 - */  
78 -- (void)beforeRotation;  
79 -  
80 -/*  
81 - * Call this from your view controller's willAnimateRotationToInterfaceOrientation  
82 - * if you want to support autorotation.  
83 - */  
84 -- (void)afterRotation;  
85 -  
86 -/*  
87 - * Call this from your view controller's didReceiveMemoryWarning.  
88 - */  
89 -- (void)didReceiveMemoryWarning;  
90 -  
91 -@end  
92 -  
93 -@interface MHPagingScrollView (UNREUSE)  
94 -  
95 -/*  
96 - * Returns a UIView object by index.  
97 - */  
98 -- (UIView *)pageViewByIndex:(NSInteger)index;  
99 -  
100 -/*  
101 - * Returns the select UIView object .  
102 - */  
103 -- (UIView *)selectPageView;  
104 -  
105 -- (BOOL)isLoadedPageByIndex:(NSInteger)index;  
106 -  
107 -- (void)preLoadedPageView:(UIView*)view index:(NSInteger)index;  
108 -  
109 -@end  
LiveVideoCloud/Classes/SDK/MHPagingScrollView/MHPagingScrollView.m deleted 100755 → 0
1 -  
2 -#import "MHPagingScrollView.h"  
3 -  
4 -@interface MHPage : NSObject  
5 -  
6 -@property (nonatomic, strong) UIView *view;  
7 -@property (nonatomic, assign) NSUInteger index;  
8 -  
9 -@end  
10 -  
11 -@implementation MHPage  
12 -  
13 -@end  
14 -  
15 -@implementation MHPagingScrollView  
16 -{  
17 - NSMutableSet *_recycledPages;  
18 - NSMutableSet *_visiblePages;  
19 - NSUInteger _firstVisiblePageIndexBeforeRotation; // for autorotation  
20 - CGFloat _percentScrolledIntoFirstVisiblePage;  
21 -}  
22 -  
23 -- (void)commonInit  
24 -{  
25 - _recycledPages = [[NSMutableSet alloc] init];  
26 - _visiblePages = [[NSMutableSet alloc] init];  
27 -  
28 - self.pagingEnabled = YES;  
29 - self.showsVerticalScrollIndicator = NO;  
30 - self.showsHorizontalScrollIndicator = NO;  
31 - self.contentOffset = CGPointZero;  
32 -}  
33 -  
34 -- (id)initWithFrame:(CGRect)frame  
35 -{  
36 - if ((self = [super initWithFrame:frame]))  
37 - {  
38 - [self commonInit];  
39 - }  
40 - return self;  
41 -}  
42 -  
43 -- (id)initWithCoder:(NSCoder *)aDecoder  
44 -{  
45 - if ((self = [super initWithCoder:aDecoder]))  
46 - {  
47 - [self commonInit];  
48 - }  
49 - return self;  
50 -}  
51 -  
52 -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event  
53 -{  
54 - // This allows for touch handling outside of the scroll view's bounds.  
55 -  
56 - CGPoint parentLocation = [self convertPoint:point toView:self.superview];  
57 -  
58 - CGRect responseRect = self.frame;  
59 - responseRect.origin.x -= _previewInsets.left;  
60 - responseRect.origin.y -= _previewInsets.top;  
61 - responseRect.size.width += (_previewInsets.left + _previewInsets.right);  
62 - responseRect.size.height += (_previewInsets.top + _previewInsets.bottom);  
63 -  
64 - return CGRectContainsPoint(responseRect, parentLocation);  
65 -}  
66 -  
67 -- (void)selectPageAtIndex:(NSUInteger)index animated:(BOOL)animated  
68 -{  
69 - if (animated) {  
70 -  
71 - [UIView beginAnimations:nil context:NULL];  
72 - [UIView setAnimationDuration:0.3f];  
73 - [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  
74 - }  
75 -  
76 - self.contentOffset = CGPointMake(self.bounds.size.width * index, 0);  
77 - if (animated) {  
78 -  
79 - [UIView commitAnimations];  
80 - }  
81 -}  
82 -  
83 -- (NSUInteger)indexOfSelectedPage  
84 -{  
85 - CGFloat width = self.bounds.size.width;  
86 - int currentPage = (self.contentOffset.x + width/2.0f) / width;  
87 - return currentPage;  
88 -}  
89 -  
90 -- (NSUInteger)numberOfPages  
91 -{  
92 - return [_pagingDelegate numberOfPagesInPagingScrollView:self];  
93 -}  
94 -  
95 -- (CGSize)contentSizeForPagingScrollView  
96 -{  
97 - CGRect rect = self.bounds;  
98 - return CGSizeMake(rect.size.width * [self numberOfPages], rect.size.height);  
99 -}  
100 -  
101 -- (BOOL)isDisplayingPageForIndex:(NSUInteger)index  
102 -{  
103 - for (MHPage *page in _visiblePages)  
104 - {  
105 - if (page.index == index)  
106 - return YES;  
107 - }  
108 - return NO;  
109 -}  
110 -  
111 -- (UIView *)dequeueReusablePage  
112 -{  
113 - MHPage *page = [_recycledPages anyObject];  
114 - if (page != nil)  
115 - {  
116 - UIView *view = page.view;  
117 - [_recycledPages removeObject:page];  
118 - return view;  
119 - }  
120 - return nil;  
121 -}  
122 -  
123 -- (UIView *)dequeueReusablePageWithIdentify:(NSString *)identify  
124 -{  
125 - for (MHPage *page in _recycledPages) {  
126 - if (page != nil) {  
127 - if ([[NSString stringWithFormat:@"%ld", (long)page.view.tag] isEqualToString:identify]) {  
128 - UIView *view = page.view;  
129 - [_recycledPages removeObject:page];  
130 - return view;  
131 - }  
132 - }  
133 - }  
134 - return nil;  
135 -}  
136 -  
137 -- (CGRect)frameForPageAtIndex:(NSUInteger)index  
138 -{  
139 - CGRect rect = self.bounds;  
140 - rect.origin.x = rect.size.width * index;  
141 - return rect;  
142 -}  
143 -  
144 -- (void)tilePages  
145 -{  
146 - CGRect visibleBounds = self.bounds;  
147 - CGFloat pageWidth = CGRectGetWidth(visibleBounds);  
148 - visibleBounds.origin.x -= _previewInsets.left;  
149 - visibleBounds.size.width += (_previewInsets.left + _previewInsets.right);  
150 -  
151 - int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / pageWidth)-self.leftPrepareCount;  
152 - int lastNeededPageIndex = floorf((CGRectGetMaxX(visibleBounds) - 1.0f) / pageWidth)+self.rightPrepareCount;  
153 - firstNeededPageIndex = MAX(firstNeededPageIndex, 0);  
154 - lastNeededPageIndex = MIN(lastNeededPageIndex, (int)[self numberOfPages] - 1);  
155 -  
156 - for (MHPage *page in _visiblePages)  
157 - {  
158 - if ((int)page.index < firstNeededPageIndex || (int)page.index > lastNeededPageIndex)  
159 - {  
160 - [_recycledPages addObject:page];  
161 - [page.view removeFromSuperview];  
162 - }  
163 - }  
164 -  
165 - [_visiblePages minusSet:_recycledPages];  
166 - for (UIView *view in _recycledPages) {  
167 - if ([view isKindOfClass:[UIScrollView class]]) {  
168 - UIScrollView *scroll = (UIScrollView *)view;  
169 - scroll.scrollsToTop = NO;  
170 - }  
171 - }  
172 -  
173 - for (int i = firstNeededPageIndex; i <= lastNeededPageIndex; ++i)  
174 - {  
175 - if (![self isDisplayingPageForIndex:i])  
176 - {  
177 - UIView *pageView = [_pagingDelegate pagingScrollView:self pageForIndex:i];  
178 - if ([pageView isKindOfClass:[UIScrollView class]]) {  
179 - UIScrollView *scroll = (UIScrollView *)pageView;  
180 - scroll.scrollsToTop = YES;  
181 - }  
182 - pageView.frame = [self frameForPageAtIndex:i];  
183 - pageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;  
184 - [self addSubview:pageView];  
185 -  
186 - MHPage *page = [[MHPage alloc] init];  
187 - page.index = i;  
188 - page.view = pageView;  
189 - [_visiblePages addObject:page];  
190 - }  
191 - }  
192 -}  
193 -  
194 -- (void)reloadPages  
195 -{  
196 - self.contentSize = [self contentSizeForPagingScrollView];  
197 - for (MHPage *page in _visiblePages) {  
198 - [page.view removeFromSuperview];  
199 - }  
200 - for (MHPage *page in _recycledPages) {  
201 - [page.view removeFromSuperview];  
202 - }  
203 - [_visiblePages removeAllObjects];  
204 - [_recycledPages removeAllObjects];  
205 - [self tilePages];  
206 -}  
207 -  
208 -- (void)scrollViewDidScroll  
209 -{  
210 - [self tilePages];  
211 -}  
212 -  
213 -- (void)beforeRotation  
214 -{  
215 - CGFloat offset = self.contentOffset.x;  
216 - CGFloat pageWidth = self.bounds.size.width;  
217 -  
218 - if (offset >= 0)  
219 - _firstVisiblePageIndexBeforeRotation = floorf(offset / pageWidth);  
220 - else  
221 - _firstVisiblePageIndexBeforeRotation = 0;  
222 -  
223 - _percentScrolledIntoFirstVisiblePage = offset / pageWidth - _firstVisiblePageIndexBeforeRotation;  
224 -}  
225 -  
226 -- (void)afterRotation  
227 -{  
228 - self.contentSize = [self contentSizeForPagingScrollView];  
229 -  
230 - for (MHPage *page in _visiblePages)  
231 - page.view.frame = [self frameForPageAtIndex:page.index];  
232 -  
233 - CGFloat pageWidth = self.bounds.size.width;  
234 - CGFloat newOffset = (_firstVisiblePageIndexBeforeRotation + _percentScrolledIntoFirstVisiblePage) * pageWidth;  
235 - self.contentOffset = CGPointMake(newOffset, 0);  
236 -}  
237 -  
238 -- (void)didReceiveMemoryWarning  
239 -{  
240 - [_recycledPages removeAllObjects];  
241 -}  
242 -  
243 -@end  
244 -  
245 -@implementation MHPagingScrollView (UNREUSE)  
246 -  
247 -- (UIView *)pageViewByIndex:(NSInteger)index{  
248 - for (MHPage* page in _recycledPages) {  
249 - if (page.index == index) {  
250 - UIView *view = page.view;  
251 - [_recycledPages removeObject:page];  
252 - return view;  
253 - }  
254 - }  
255 - for (MHPage *page in _visiblePages) {  
256 - if (page.index == index) {  
257 - UIView *view = page.view;  
258 - return view;  
259 - }  
260 - }  
261 - return nil;  
262 -}  
263 -  
264 -- (UIView *)selectPageView{  
265 - NSUInteger index = [self indexOfSelectedPage];  
266 - for (MHPage *page in _visiblePages) {  
267 - if (page.index == index) {  
268 - UIView *view = page.view;  
269 - return view;  
270 - }  
271 - }  
272 - return nil;  
273 -}  
274 -  
275 -- (BOOL)isLoadedPageByIndex:(NSInteger)index{  
276 -  
277 - for (MHPage* page in _recycledPages) {  
278 - if (page.index == index) {  
279 - return true;  
280 - }  
281 - }  
282 - for (MHPage *page in _visiblePages) {  
283 - if (page.index == index) {  
284 - return true;  
285 - }  
286 - }  
287 - return false;  
288 -  
289 -}  
290 -  
291 -- (void)preLoadedPageView:(UIView*)view index:(NSInteger)index{  
292 -  
293 - MHPage *page = [[MHPage alloc] init];  
294 - page.index = index;  
295 - page.view = view;  
296 - [_recycledPages addObject:page];  
297 -  
298 -}  
299 -  
300 -- (void)refreshPage  
301 -{  
302 - [_pagingDelegate pagingScrollView:self pageForIndex:0];  
303 -}  
304 -  
305 -@end  
306 \ No newline at end of file 0 \ No newline at end of file
LiveVideoCloud/Classes/SDK/V8HorizontalPickerView/V8HorizontalPickerView.h deleted 100755 → 0
1 -//  
2 -// V8HorizontalPickerView.h  
3 -//  
4 -// Created by Shawn Veader on 9/17/10.  
5 -// Copyright 2010 V8 Labs, LLC. All rights reserved.  
6 -//  
7 -  
8 -#import <UIKit/UIKit.h>  
9 -#import "V8HorizontalPickerViewProtocol.h"  
10 -  
11 -@interface V8HorizontalPickerView : UIView <UIScrollViewDelegate> { }  
12 -  
13 -// delegate and datasources to feed scroll view. this view only maintains a weak reference to these  
14 -@property (nonatomic, assign) id <V8HorizontalPickerViewDataSource> dataSource;  
15 -@property (nonatomic, assign) id <V8HorizontalPickerViewDelegate> delegate;  
16 -  
17 -@property (nonatomic, readonly) NSInteger numberOfElements;  
18 -@property (nonatomic, readonly) NSInteger currentSelectedIndex;  
19 -  
20 -// what font to use for the element labels?  
21 -@property (nonatomic, retain) UIFont *elementFont;  
22 -  
23 -// color of labels used in picker  
24 -@property (nonatomic, retain) UIColor *textColor;  
25 -@property (nonatomic, retain) UIColor *selectedTextColor; // color of current selected element  
26 -  
27 -// select bg image  
28 -@property (nonatomic, retain) UIImage *currentBgImage;  
29 -@property (nonatomic, retain) NSString *isChatRoom;  
30 -  
31 -// views to display on edges of picker (eg: gradients, etc)  
32 -@property (nonatomic, retain) UIView *leftEdgeView;  
33 -@property (nonatomic, retain) UIView *rightEdgeView;  
34 -  
35 -// views for left and right of scrolling area  
36 -@property (nonatomic, retain) UIView *leftScrollEdgeView;  
37 -@property (nonatomic, retain) UIView *rightScrollEdgeView;  
38 -  
39 -// padding for left/right scroll edge views  
40 -@property (nonatomic, assign) CGFloat scrollEdgeViewPadding;  
41 -  
42 -@property (nonatomic, assign) NSInteger elementPadding;  
43 -@property (nonatomic, retain) UIScrollView *scrollView;  
44 -@property (nonatomic, retain) NSMutableArray *elementWidths;  
45 -  
46 -@property (nonatomic, assign) BOOL clickElementEnable;  
47 -  
48 -@property (nonatomic, assign) BOOL plugins;  
49 -@property (nonatomic, assign) BOOL myVideos;  
50 -@property (nonatomic, assign) BOOL home;  
51 -  
52 -- (id)initWithFrame:(CGRect)frame plugins:(BOOL)plugins myVideos:(BOOL)myVideos;  
53 -- (id)initWithFrame:(CGRect)frame home:(BOOL)home;  
54 -  
55 -- (void)reloadData;  
56 -- (void)scrollToElement:(NSInteger)index animated:(BOOL)animate;  
57 -@end  
58 -  
59 -// sub-class of UILabel that knows how to change it's state  
60 -@interface V8HorizontalPickerLabel : UILabel <V8HorizontalPickerElementState> { }  
61 -  
62 -@property (nonatomic, assign) BOOL selectedElement;  
63 -@property (nonatomic, retain) UIColor *selectedStateColor;  
64 -@property (nonatomic, retain) UIColor *normalStateColor;  
65 -  
66 -@end  
LiveVideoCloud/Classes/SDK/V8HorizontalPickerView/V8HorizontalPickerView.m deleted 100755 → 0
1 -//  
2 -// V8HorizontalPickerView.m  
3 -//  
4 -// Created by Shawn Veader on 9/17/10.  
5 -// Copyright 2010 V8 Labs, LLC. All rights reserved.  
6 -//  
7 -  
8 -#import "V8HorizontalPickerView.h"  
9 -  
10 -#define CurrentBgTag 9999  
11 -  
12 -#pragma mark - Internal Method Interface  
13 -@interface V8HorizontalPickerView () {  
14 - UIScrollView *_scrollView;  
15 - UIView *_currentBg;  
16 -  
17 - // collection of widths of each element.  
18 - NSMutableArray *_elementWidths;  
19 -  
20 - // state keepers  
21 - BOOL dataHasBeenLoaded;  
22 - BOOL scrollSizeHasBeenSet;  
23 -  
24 - // keep track of which elements are visible for tiling  
25 - int firstVisibleElement;  
26 - int lastVisibleElement;  
27 -  
28 - NSMutableArray *_lineArray;  
29 - BOOL _reload;  
30 -}  
31 -  
32 -@end  
33 -  
34 -  
35 -#pragma mark - Implementation  
36 -@implementation V8HorizontalPickerView : UIView  
37 -  
38 -@synthesize dataSource, delegate;  
39 -@synthesize numberOfElements, currentSelectedIndex; // readonly  
40 -@synthesize elementFont, textColor, selectedTextColor, currentBgImage;  
41 -@synthesize leftEdgeView, rightEdgeView;  
42 -@synthesize leftScrollEdgeView, rightScrollEdgeView, scrollEdgeViewPadding,elementPadding;  
43 -  
44 -#pragma mark - Init/Dealloc  
45 -- (id)initWithFrame:(CGRect)frame {  
46 - if ((self = [super initWithFrame:frame])) {  
47 - _elementWidths = [[NSMutableArray array] retain];  
48 - _lineArray = [[NSMutableArray array] retain];  
49 -  
50 - [self addScrollView];  
51 -  
52 - self.textColor = [UIColor blackColor];  
53 - self.elementFont = [UIFont systemFontOfSize:12.0f];  
54 -  
55 - currentSelectedIndex = -1; // nothing is selected yet  
56 -  
57 - numberOfElements = 0;  
58 - elementPadding = 8;  
59 - dataHasBeenLoaded = NO;  
60 - scrollSizeHasBeenSet = NO;  
61 -  
62 - firstVisibleElement = -1;  
63 - lastVisibleElement = -1;  
64 -  
65 - scrollEdgeViewPadding = 0.0f;  
66 -  
67 - self.autoresizesSubviews = YES;  
68 - _reload = NO;  
69 - self.clickElementEnable = YES;  
70 - }  
71 - return self;  
72 -}  
73 -  
74 -- (id)initWithFrame:(CGRect)frame plugins:(BOOL)plugins myVideos:(BOOL)myVideos  
75 -{  
76 - if ((self = [super initWithFrame:frame])) {  
77 - _plugins = plugins;  
78 - _myVideos = myVideos;  
79 - _elementWidths = [[NSMutableArray array] retain];  
80 - _lineArray = [[NSMutableArray array] retain];  
81 -  
82 - [self addScrollView];  
83 -  
84 - self.textColor = [UIColor blackColor];  
85 - self.elementFont = [UIFont systemFontOfSize:12.0f];  
86 -  
87 - currentSelectedIndex = -1; // nothing is selected yet  
88 -  
89 - numberOfElements = 0;  
90 - elementPadding = 8;  
91 - dataHasBeenLoaded = NO;  
92 - scrollSizeHasBeenSet = NO;  
93 -  
94 - firstVisibleElement = -1;  
95 - lastVisibleElement = -1;  
96 -  
97 - scrollEdgeViewPadding = 0.0f;  
98 -  
99 - self.autoresizesSubviews = YES;  
100 - _reload = NO;  
101 - self.clickElementEnable = YES;  
102 - }  
103 - return self;  
104 -}  
105 -  
106 -- (id)initWithFrame:(CGRect)frame home:(BOOL)home  
107 -{  
108 - if ((self = [super initWithFrame:frame])) {  
109 -  
110 - _home = home;  
111 -  
112 - _elementWidths = [[NSMutableArray array] retain];  
113 - _lineArray = [[NSMutableArray array] retain];  
114 -  
115 - [self addScrollView];  
116 -  
117 - self.textColor = [UIColor blackColor];  
118 - self.elementFont = [UIFont systemFontOfSize:12.0f];  
119 -  
120 - currentSelectedIndex = -1; // nothing is selected yet  
121 -  
122 - numberOfElements = 0;  
123 - elementPadding = 8;  
124 - dataHasBeenLoaded = NO;  
125 - scrollSizeHasBeenSet = NO;  
126 -  
127 - firstVisibleElement = -1;  
128 - lastVisibleElement = -1;  
129 -  
130 - scrollEdgeViewPadding = 0.0f;  
131 -  
132 - self.autoresizesSubviews = YES;  
133 - _reload = NO;  
134 - self.clickElementEnable = YES;  
135 - }  
136 - return self;  
137 -}  
138 -  
139 -- (void)dealloc {  
140 - _scrollView.delegate = nil;  
141 -  
142 - [_lineArray release];  
143 - [_scrollView release];  
144 - [_elementWidths release];  
145 - [elementFont release];  
146 - [leftEdgeView release];  
147 - [rightEdgeView release];  
148 -  
149 - [leftScrollEdgeView release];  
150 - [rightScrollEdgeView release];  
151 -  
152 - [textColor release];  
153 - [_currentBg release];  
154 - [super dealloc];  
155 -}  
156 -  
157 -  
158 -#pragma mark - LayoutSubViews  
159 -- (void)layoutSubviews {  
160 - [super layoutSubviews];  
161 -  
162 -// if (!(_isChatRoom && [_isChatRoom isEqualToString:@"yes"])) {  
163 -// if (![self viewWithTag:1110]) {  
164 -// UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height-0.5, self.frame.size.width, 0.5)];  
165 -// line.tag = 1110;  
166 -// [self addSubview:line];  
167 -// line.backgroundColor = [Tools colorWithHexString:@"#d5d5d5"];  
168 -// [line release];  
169 -// }  
170 -// }  
171 -  
172 - BOOL adjustWhenFinished = NO;  
173 -  
174 - if (!dataHasBeenLoaded) {  
175 - [self collectData];  
176 - }  
177 - if (!scrollSizeHasBeenSet) {  
178 - adjustWhenFinished = YES;  
179 - [self setTotalWidthOfScrollContent];  
180 - }  
181 -  
182 - SEL titleForElementSelector = @selector(horizontalPickerView:titleForElementAtIndex:);  
183 - SEL viewForElementSelector = @selector(horizontalPickerView:viewForElementAtIndex:);  
184 - SEL setSelectedSelector = @selector(setSelectedElement:);  
185 -  
186 - CGRect visibleBounds = [self bounds];  
187 - CGRect scaledViewFrame = CGRectZero;  
188 -  
189 - // remove any subviews that are no longer visible  
190 - for (UIView *view in [_scrollView subviews]) {  
191 - scaledViewFrame = [_scrollView convertRect:[view frame] toView:self];  
192 -  
193 - // if the view doesn't intersect, it's not visible, so we can recycle it  
194 - if (view.tag!=CurrentBgTag&&!CGRectIntersectsRect(scaledViewFrame, visibleBounds)) {  
195 - [view removeFromSuperview];  
196 - }else { // if it is still visible, update it's selected state  
197 - if ([view respondsToSelector:setSelectedSelector]) {  
198 - // view's tag is it's index  
199 - BOOL isSelected = (currentSelectedIndex == [self indexForElement:view]);  
200 - // casting to V8HorizontalPickerLabel so we can call this without all the NSInvocation jazz  
201 - [(V8HorizontalPickerLabel *)view setSelectedElement:isSelected];  
202 - } else {  
203 - for (UIView *view1 in [view subviews]) {  
204 - if ([view1 respondsToSelector:setSelectedSelector]) {  
205 - // view's tag is it's index  
206 - BOOL isSelected = (currentSelectedIndex == view1.tag-100);  
207 - // casting to V8HorizontalPickerLabel so we can call this without all the NSInvocation jazz  
208 - [(V8HorizontalPickerLabel *)view1 setSelectedElement:isSelected];  
209 - }  
210 - }  
211 - }  
212 - }  
213 - }  
214 -  
215 - // find needed elements by looking at left and right edges of frame  
216 - CGPoint offset = _scrollView.contentOffset;  
217 - int firstNeededElement = [self nearestElementToPoint:CGPointMake(offset.x, 0.0f)];  
218 - int lastNeededElement = [self nearestElementToPoint:CGPointMake(offset.x + visibleBounds.size.width, 0.0f)];  
219 -  
220 - // add any views that have become visible  
221 - UIView *view = nil;  
222 - CGRect tmpViewFrame = CGRectZero;  
223 - CGPoint itemViewCenter = CGPointZero;  
224 - for (int i = firstNeededElement; i <= lastNeededElement; i++) {  
225 - view = nil; // paranoia  
226 - view = [_scrollView viewWithTag:[self tagForElementAtIndex:i]];  
227 - if (!view) {  
228 - if (i < numberOfElements) { // make sure we are not requesting data out of range  
229 - if (self.delegate && [self.delegate respondsToSelector:titleForElementSelector]) {  
230 - NSString *title = [self.delegate horizontalPickerView:self titleForElementAtIndex:i];  
231 - view = [self labelForForElementAtIndex:i withTitle:title];  
232 - } else if (self.delegate && [self.delegate respondsToSelector:viewForElementSelector]) {  
233 - view = [self.delegate horizontalPickerView:self viewForElementAtIndex:i];  
234 - // move view's center to the center of item's ideal frame  
235 - tmpViewFrame = [self frameForElementAtIndex:i currentBg:NO];  
236 - itemViewCenter = CGPointMake((tmpViewFrame.size.width / 2.0f) + tmpViewFrame.origin.x, (tmpViewFrame.size.height / 2.0f));  
237 - view.center = itemViewCenter;  
238 - }  
239 -  
240 - if (view) {  
241 - // use the index as the tag so we can find it later  
242 - view.tag = [self tagForElementAtIndex:i];  
243 -  
244 - [_scrollView addSubview:view];  
245 - }  
246 - }  
247 - }  
248 - }  
249 -  
250 - // add the left or right edge views if visible  
251 - CGRect viewFrame = CGRectZero;  
252 - if (leftScrollEdgeView) {  
253 - viewFrame = [self frameForLeftScrollEdgeView];  
254 - scaledViewFrame = [_scrollView convertRect:viewFrame toView:self];  
255 - if (CGRectIntersectsRect(scaledViewFrame, visibleBounds) && ![leftScrollEdgeView isDescendantOfView:_scrollView]) {  
256 - leftScrollEdgeView.frame = viewFrame;  
257 - [_scrollView addSubview:leftScrollEdgeView];  
258 - }  
259 - }  
260 - if (rightScrollEdgeView) {  
261 - viewFrame = [self frameForRightScrollEdgeView];  
262 - scaledViewFrame = [_scrollView convertRect:viewFrame toView:self];  
263 - if (CGRectIntersectsRect(scaledViewFrame, visibleBounds) && ![rightScrollEdgeView isDescendantOfView:_scrollView]) {  
264 - rightScrollEdgeView.frame = viewFrame;  
265 - [_scrollView addSubview:rightScrollEdgeView];  
266 - }  
267 - }  
268 -  
269 - // save off what's visible now  
270 - firstVisibleElement = firstNeededElement;  
271 - lastVisibleElement = lastNeededElement;  
272 -  
273 - // determine if scroll view needs to shift in response to resizing?  
274 - if (currentSelectedIndex > -1 && adjustWhenFinished) {  
275 - [self scrollToElement:currentSelectedIndex animated:NO];  
276 - }  
277 -  
278 - if (_reload) {  
279 - for (UIView *view in _lineArray) {  
280 - [view removeFromSuperview];  
281 - }  
282 - [_lineArray removeAllObjects];  
283 - }  
284 -  
285 -// if (_lineArray.count == 0) {  
286 -// int x = 0;  
287 -// int i = 0;  
288 -// for (NSNumber *number in _elementWidths) {  
289 -// if (i < _elementWidths.count-1) {  
290 -// NSInteger width = [number integerValue];  
291 -// x += width;  
292 -// UIView *line = [[UIView alloc] initWithFrame:CGRectMake(x+8*i+3, (self.bounds.size.height-15)/2, 0.5, 15)];  
293 -// line.backgroundColor = [Tools colorWithHexString:@"#d5d5d5"];  
294 -// if (_isChatRoom && [_isChatRoom isEqualToString:@"yes"]) {  
295 -// line.backgroundColor = [UIColor whiteColor];  
296 -// }  
297 -// [_lineArray addObject:line];  
298 -// [line release];  
299 -// }  
300 -// i++;  
301 -// }  
302 -// if (_lineArray.count != 0) {  
303 -// _reload = NO;  
304 -// [self setNeedsLayout];  
305 -// }  
306 -// } else {  
307 -// for (UIView *view in _lineArray) {  
308 -// if (view.superview == nil) {  
309 -// [_scrollView addSubview:view];  
310 -// }  
311 -// }  
312 -// }  
313 -  
314 -}  
315 -  
316 -  
317 -#pragma mark - Getters and Setters  
318 -- (void)setDelegate:(id)newDelegate {  
319 - if (delegate != newDelegate) {  
320 - delegate = newDelegate;  
321 - [self collectData];  
322 - }  
323 -}  
324 -  
325 -- (void)setDataSource:(id)newDataSource {  
326 - if (dataSource != newDataSource) {  
327 - dataSource = newDataSource;  
328 - [self collectData];  
329 - }  
330 -}  
331 -  
332 -// allow the setting of this views background color to change the scroll view  
333 -- (void)setBackgroundColor:(UIColor *)newColor {  
334 - [super setBackgroundColor:newColor];  
335 - _scrollView.backgroundColor = newColor;  
336 - // TODO: set all subviews as well?  
337 -}  
338 -  
339 -- (void)setLeftEdgeView:(UIView *)leftView {  
340 - if (leftEdgeView != leftView) {  
341 - if (leftEdgeView) {  
342 - [leftEdgeView removeFromSuperview];  
343 - [leftEdgeView release];  
344 - }  
345 - leftEdgeView = [leftView retain];  
346 -  
347 - CGRect tmpFrame = leftEdgeView.frame;  
348 - tmpFrame.origin.x = 0.0f;  
349 - tmpFrame.origin.y = 0.0f;  
350 - leftEdgeView.frame = tmpFrame;  
351 - [self addSubview:leftEdgeView];  
352 - }  
353 -}  
354 -  
355 -- (void)setRightEdgeView:(UIView *)rightView {  
356 - if (rightEdgeView != rightView) {  
357 - if (rightEdgeView) {  
358 - [rightEdgeView removeFromSuperview];  
359 - [rightEdgeView release];  
360 - }  
361 - rightEdgeView = [rightView retain];  
362 -  
363 - CGRect tmpFrame = rightEdgeView.frame;  
364 - tmpFrame.origin.x = self.frame.size.width - tmpFrame.size.width;  
365 - tmpFrame.origin.y = 0.0f;  
366 - rightEdgeView.frame = tmpFrame;  
367 - [self addSubview:rightEdgeView];  
368 - }  
369 -}  
370 -  
371 -- (void)setLeftScrollEdgeView:(UIView *)leftView {  
372 - if (leftScrollEdgeView != leftView) {  
373 - if (leftScrollEdgeView) {  
374 - [leftScrollEdgeView removeFromSuperview];  
375 - [leftScrollEdgeView release];  
376 - }  
377 - leftScrollEdgeView = [leftView retain];  
378 -  
379 - scrollSizeHasBeenSet = NO;  
380 - [self setNeedsLayout];  
381 - }  
382 -}  
383 -  
384 -- (void)setRightScrollEdgeView:(UIView *)rightView {  
385 - if (rightScrollEdgeView != rightView) {  
386 - if (rightScrollEdgeView) {  
387 - [rightScrollEdgeView removeFromSuperview];  
388 - [rightScrollEdgeView release];  
389 - }  
390 - rightScrollEdgeView = [rightView retain];  
391 -  
392 - scrollSizeHasBeenSet = NO;  
393 - [self setNeedsLayout];  
394 - }  
395 -}  
396 -  
397 -- (void)setFrame:(CGRect)newFrame {  
398 - if (!CGRectEqualToRect(self.frame, newFrame)) {  
399 - // causes recalulation of offsets, etc based on new size  
400 - scrollSizeHasBeenSet = NO;  
401 - }  
402 - [super setFrame:newFrame];  
403 -}  
404 -  
405 -- (void)setCurrentBgImage:(UIImage *)bgImage{  
406 - if (currentBgImage != bgImage) {  
407 - if (currentBgImage) {  
408 - [currentBgImage release];  
409 - }  
410 - currentBgImage = [bgImage retain];  
411 -  
412 - if (_currentBg) {  
413 - if (_isChatRoom && [_isChatRoom isEqualToString:@"yes"]) {  
414 -  
415 - CGFloat y = self.plugins ? (self.bounds.size.height-27)/2 : self.height - 4;  
416 - CGFloat height = self.plugins ? 27 : 4;  
417 - _currentBg.frame = CGRectMake(0, y, 0, height);  
418 - _currentBg.backgroundColor = [UIColor whiteColor];  
419 - }  
420 - }  
421 - }  
422 -}  
423 -  
424 -#pragma mark - Data Fetching Methods  
425 -- (void)reloadData {  
426 - // remove all scrollview subviews and "recycle" them  
427 - for (UIView *view in [_scrollView subviews]) {  
428 - if (view.tag==CurrentBgTag) {  
429 - view.frame = CGRectZero;  
430 - continue;  
431 - }  
432 - [view removeFromSuperview];  
433 - }  
434 - _reload = YES;  
435 - firstVisibleElement = NSIntegerMax;  
436 - lastVisibleElement = NSIntegerMin;  
437 -  
438 - [self collectData];  
439 -}  
440 -  
441 -- (void)collectData {  
442 - scrollSizeHasBeenSet = NO;  
443 - dataHasBeenLoaded = NO;  
444 -  
445 - [self getNumberOfElementsFromDataSource];  
446 - [self getElementWidthsFromDelegate];  
447 - [self setTotalWidthOfScrollContent];  
448 -  
449 - dataHasBeenLoaded = YES;  
450 - [self setNeedsLayout];  
451 -  
452 - [self scrollToElement:currentSelectedIndex animated:NO];  
453 -}  
454 -  
455 -  
456 -#pragma mark - Scroll To Element Method  
457 -- (void)scrollToElement:(NSInteger)index animated:(BOOL)animate {  
458 - if (numberOfElements < 1) {  
459 - return ;  
460 - }else if (index<0) {  
461 - index = 0;  
462 - }else if (index>numberOfElements-1) {  
463 - index = numberOfElements-1;  
464 - }  
465 -  
466 - currentSelectedIndex = index;  
467 -  
468 - [UIView beginAnimations:nil context:nil];  
469 - _currentBg.frame = [self frameForElementAtIndex:index currentBg:YES];  
470 - if (self.plugins) {  
471 - _currentBg.frame = CGRectMake(_currentBg.frame.origin.x+(_currentBg.bounds.size.width-100)/2, (self.bounds.size.height-28)/2, 100, 28);  
472 - }  
473 -// _selectLine.frame = CGRectMake([self frameForElementAtIndex:index].origin.x, 35, [self frameForElementAtIndex:index].size.width, 2);  
474 - [UIView commitAnimations];  
475 -  
476 - int offsetX = [self offsetForElementAtIndex:index];  
477 - int width = [self widthOfElementAtIndex:index];  
478 -  
479 - if (offsetX < _scrollView.contentOffset.x) {  
480 - [_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:animate];  
481 - }else if((offsetX+width) > (_scrollView.contentOffset.x+self.bounds.size.width)){  
482 - [_scrollView setContentOffset:CGPointMake((offsetX+width-self.bounds.size.width), 0) animated:animate];  
483 - }  
484 -  
485 - // notify delegate of the selected index  
486 - SEL delegateCall = @selector(horizontalPickerView:didSelectElementAtIndex:);  
487 - if (self.delegate && [self.delegate respondsToSelector:delegateCall]) {  
488 - [self.delegate horizontalPickerView:self didSelectElementAtIndex:index];  
489 - }  
490 -  
491 -#if (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_4_3)  
492 - [self setNeedsLayout];  
493 -#endif  
494 -}  
495 -  
496 -#pragma mark - UIScrollViewDelegate Methods  
497 -- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
498 -#if (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_4_3)  
499 - [self setNeedsLayout];  
500 -#endif  
501 -}  
502 -  
503 -#pragma mark - View Creation Methods (Internal Methods)  
504 -- (void)addScrollView {  
505 - if (_scrollView == nil) {  
506 - _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];  
507 - _scrollView.delegate = self;  
508 - _scrollView.scrollEnabled = YES;  
509 - _scrollView.scrollsToTop = NO;  
510 - _scrollView.showsVerticalScrollIndicator = NO;  
511 - _scrollView.showsHorizontalScrollIndicator = NO;  
512 - _scrollView.bouncesZoom = NO;  
513 - _scrollView.alwaysBounceHorizontal = YES;  
514 - _scrollView.alwaysBounceVertical = NO;  
515 - _scrollView.minimumZoomScale = 1.0; // setting min/max the same disables zooming  
516 - _scrollView.maximumZoomScale = 1.0;  
517 - _scrollView.contentInset = UIEdgeInsetsZero;  
518 - _scrollView.decelerationRate = 0.1; //UIScrollViewDecelerationRateNormal;  
519 - _scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;  
520 - _scrollView.autoresizesSubviews = YES;  
521 -  
522 - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTapped:)];  
523 - [_scrollView addGestureRecognizer:tapRecognizer];  
524 - [tapRecognizer release];  
525 -  
526 - if (self.plugins || self.myVideos || self.home) {  
527 -  
528 - CGFloat y = self.plugins ? (self.bounds.size.height-27)/2 : self.height - 4;  
529 - CGFloat height = self.plugins ? 27 : 4;  
530 -  
531 - _currentBg = [[UIImageView alloc]init];  
532 - _currentBg = [[UIView alloc] initWithFrame:CGRectMake(0, y, 0, height)];  
533 - _currentBg.tag = CurrentBgTag;  
534 - _currentBg.backgroundColor = self.plugins ? [UIColor colorWithHexString:@"#fff100"] : [UIColor yellowColorCNLive];  
535 - _currentBg.layer.borderColor = [UIColor colorWithHexString:@"#f6e80e"].CGColor;  
536 - _currentBg.layer.borderWidth = 0.5;  
537 -  
538 - if (self.plugins) {  
539 - _currentBg.layer.cornerRadius = 13.5;  
540 - _currentBg.layer.masksToBounds = YES;  
541 -  
542 - }  
543 - [_scrollView addSubview:_currentBg];  
544 - }  
545 -  
546 - [self addSubview:_scrollView];  
547 -  
548 - }  
549 -}  
550 -  
551 -// create a UILabel for this element.  
552 -- (V8HorizontalPickerLabel *)labelForForElementAtIndex:(NSInteger)index withTitle:(NSString *)title {  
553 - CGRect labelFrame = [self frameForElementAtIndex:index currentBg:NO];  
554 - V8HorizontalPickerLabel *elementLabel = [[V8HorizontalPickerLabel alloc] initWithFrame:labelFrame];  
555 -  
556 - elementLabel.textAlignment = NSTextAlignmentCenter;  
557 - elementLabel.backgroundColor = [UIColor clearColor];  
558 - elementLabel.text = title;  
559 - elementLabel.font = self.elementFont;  
560 -  
561 - elementLabel.normalStateColor = self.textColor;  
562 - elementLabel.selectedStateColor = self.selectedTextColor;  
563 -  
564 - elementLabel.selectedElement = (currentSelectedIndex == index);  
565 -  
566 - return [elementLabel autorelease];  
567 -}  
568 -  
569 -  
570 -#pragma mark - DataSource Calling Method (Internal Method)  
571 -- (void)getNumberOfElementsFromDataSource {  
572 - SEL dataSourceCall = @selector(numberOfElementsInHorizontalPickerView:);  
573 - if (self.dataSource && [self.dataSource respondsToSelector:dataSourceCall]) {  
574 - numberOfElements = [self.dataSource numberOfElementsInHorizontalPickerView:self];  
575 - } else {  
576 - numberOfElements = 0;  
577 - }  
578 -}  
579 -  
580 -  
581 -#pragma mark - Delegate Calling Method (Internal Method)  
582 -- (void)getElementWidthsFromDelegate {  
583 - SEL delegateCall = @selector(horizontalPickerView:widthForElementAtIndex:);  
584 - [_elementWidths removeAllObjects];  
585 - for (int i = 0; i < numberOfElements; i++) {  
586 - if (self.delegate && [self.delegate respondsToSelector:delegateCall]) {  
587 - NSInteger width = [self.delegate horizontalPickerView:self widthForElementAtIndex:i];  
588 - [_elementWidths addObject:[NSNumber numberWithInteger:width]];  
589 - }  
590 - }  
591 -  
592 -// int x = 0;  
593 -// for (NSNumber *number in _elementWidths) {  
594 -// NSInteger width = [number integerValue];  
595 -// x += width;  
596 -// UIView *line = [[UIView alloc] initWithFrame:CGRectMake(x, 11, 1, 15)];  
597 -// [_scrollView addSubview:line];  
598 -//// line.backgroundColor = [Utility colorWithHexString:@"#d5d5d5"];  
599 -// line.backgroundColor = [UIColor redColor];  
600 -// [line release];  
601 -// }  
602 -  
603 -}  
604 -  
605 -  
606 -#pragma mark - View Calculation and Manipulation Methods (Internal Methods)  
607 -// what is the total width of the content area?  
608 -- (void)setTotalWidthOfScrollContent {  
609 - NSInteger totalWidth = 0;  
610 -  
611 - totalWidth += [self leftScrollEdgeWidth];  
612 - totalWidth += [self rightScrollEdgeWidth];  
613 -  
614 - // sum the width of all elements  
615 - for (NSNumber *width in _elementWidths) {  
616 - totalWidth += [width intValue];  
617 - totalWidth += elementPadding;  
618 - }  
619 - // TODO: is this necessary?  
620 - totalWidth -= elementPadding; // we add "one too many" in for loop  
621 -  
622 - if (_scrollView) {  
623 - // create our scroll view as wide as all the elements to be included  
624 - _scrollView.contentSize = CGSizeMake(totalWidth, self.bounds.size.height);  
625 - scrollSizeHasBeenSet = YES;  
626 - }  
627 -}  
628 -  
629 -// what is the left-most edge of the element at the given index?  
630 -- (NSInteger)offsetForElementAtIndex:(NSInteger)index {  
631 - NSInteger offset = 0;  
632 - if (index >= [_elementWidths count]) {  
633 - return 0;  
634 - }  
635 -  
636 - offset += [self leftScrollEdgeWidth];  
637 -  
638 - for (int i = 0; i < index && i < [_elementWidths count]; i++) {  
639 - offset += [[_elementWidths safetyObjectAtIndex:i] intValue];  
640 - offset += elementPadding;  
641 - }  
642 - return offset;  
643 -}  
644 -  
645 -// return the tag for an element at a given index  
646 -- (NSInteger)tagForElementAtIndex:(NSInteger)index {  
647 - return (index + 1) * 10;  
648 -}  
649 -  
650 -// return the index given an element's tag  
651 -- (NSInteger)indexForElement:(UIView *)element {  
652 - return (element.tag / 10) - 1;  
653 -}  
654 -  
655 -// what is the width of the element at the given index?  
656 -- (NSInteger)widthOfElementAtIndex:(NSInteger)index {  
657 - return [[_elementWidths safetyObjectAtIndex:index] intValue];  
658 -}  
659 -  
660 -// what is the frame for the element at the given index?  
661 -- (CGRect)frameForElementAtIndex:(NSInteger)index currentBg:(BOOL)flag {  
662 - CGFloat width = 0.0f;  
663 - if ([_elementWidths count] > index) {  
664 - width = [[_elementWidths safetyObjectAtIndex:index] intValue];  
665 - }  
666 - if (flag) {  
667 - if (_isChatRoom && [_isChatRoom isEqualToString:@"yes"]) {  
668 - return CGRectMake([self offsetForElementAtIndex:index]-5, self.bounds.size.height-28, width+8.5, 28);  
669 - }  
670 - CGFloat y = self.plugins ? (self.bounds.size.height-27)/2 : self.height -4;  
671 - CGFloat height = self.plugins ? 27 : 4;  
672 - if (self.home) {  
673 - return CGRectMake([self offsetForElementAtIndex:index]+8, y, width-16, height);  
674 - }  
675 - return CGRectMake([self offsetForElementAtIndex:index], y, width, height);  
676 - } else {  
677 - return CGRectMake([self offsetForElementAtIndex:index], 0.0f, width, self.frame.size.height);  
678 - }  
679 -}  
680 -  
681 -// what is the frame for the left scroll edge view?  
682 -- (CGRect)frameForLeftScrollEdgeView {  
683 - if (leftScrollEdgeView) {  
684 - CGFloat scrollHeight = _scrollView.contentSize.height;  
685 - CGFloat viewHeight = leftScrollEdgeView.frame.size.height;  
686 - return CGRectMake(0.0f, ((scrollHeight / 2.0f) - (viewHeight / 2.0f)),  
687 - leftScrollEdgeView.frame.size.width, viewHeight);  
688 - } else {  
689 - return CGRectZero;  
690 - }  
691 -}  
692 -  
693 -// what is the width of the left edge of the scroll area?  
694 -- (CGFloat)leftScrollEdgeWidth {  
695 - if (leftScrollEdgeView) {  
696 - CGFloat width = leftScrollEdgeView.frame.size.width;  
697 - width += scrollEdgeViewPadding;  
698 - return width;  
699 - }  
700 - return 0.0f;  
701 -}  
702 -  
703 -// what is the frame for the right scroll edge view?  
704 -- (CGRect)frameForRightScrollEdgeView {  
705 - if (rightScrollEdgeView) {  
706 - CGFloat scrollWidth = _scrollView.contentSize.width;  
707 - CGFloat scrollHeight = _scrollView.contentSize.height;  
708 - CGFloat viewWidth = rightScrollEdgeView.frame.size.width;  
709 - CGFloat viewHeight = rightScrollEdgeView.frame.size.height;  
710 - return CGRectMake(scrollWidth - viewWidth, ((scrollHeight / 2.0f) - (viewHeight / 2.0f)),  
711 - viewWidth, viewHeight);  
712 - } else {  
713 - return CGRectZero;  
714 - }  
715 -}  
716 -  
717 -// what is the width of the right edge of the scroll area?  
718 -- (CGFloat)rightScrollEdgeWidth {  
719 - if (rightScrollEdgeView) {  
720 - CGFloat width = rightScrollEdgeView.frame.size.width;  
721 - width += scrollEdgeViewPadding;  
722 - return width;  
723 - }  
724 - return 0.0f;  
725 -}  
726 -  
727 -// what is the element nearest to the given point?  
728 -- (NSInteger)nearestElementToPoint:(CGPoint)point {  
729 - for (int i = 0; i < numberOfElements; i++) {  
730 - CGRect frame = [self frameForElementAtIndex:i currentBg:NO];  
731 - if (CGRectContainsPoint(frame, point)) {  
732 - return i;  
733 - } else if (point.x < frame.origin.x) {  
734 - // if the center is before this element, go back to last one,  
735 - // unless we're at the beginning  
736 - if (i > 0) {  
737 - return i - 1;  
738 - } else {  
739 - return 0;  
740 - }  
741 - break;  
742 - } else if (point.x > frame.origin.y) {  
743 - // if the center is past the last element, scroll to it  
744 - if (i == numberOfElements - 1) {  
745 - return i;  
746 - }  
747 - }  
748 - }  
749 - return 0;  
750 -}  
751 -  
752 -// similar to nearestElementToPoint: however, this method does not look past beginning/end  
753 -- (NSInteger)elementContainingPoint:(CGPoint)point {  
754 - for (int i = 0; i < numberOfElements; i++) {  
755 - CGRect frame = [self frameForElementAtIndex:i currentBg:NO];  
756 - if (CGRectContainsPoint(frame, point)) {  
757 - return i;  
758 - }  
759 - }  
760 - return -1;  
761 -}  
762 -  
763 -#pragma mark - Tap Gesture Recognizer Handler Method  
764 -// use the gesture recognizer to slide to element under tap  
765 -- (void)scrollViewTapped:(UITapGestureRecognizer *)recognizer {  
766 - if (!self.clickElementEnable) {  
767 - return;  
768 - }  
769 - if (recognizer.state == UIGestureRecognizerStateRecognized) {  
770 - CGPoint tapLocation = [recognizer locationInView:_scrollView];  
771 - NSInteger elementIndex = [self elementContainingPoint:tapLocation];  
772 - if (elementIndex != -1) { // point not in element  
773 - [self scrollToElement:elementIndex animated:YES];  
774 - }  
775 - }  
776 -}  
777 -  
778 -@end  
779 -  
780 -// ------------------------------------------------------------------------  
781 -#pragma mark - Picker Label Implementation  
782 -@implementation V8HorizontalPickerLabel : UILabel  
783 -  
784 -@synthesize selectedElement, selectedStateColor, normalStateColor;  
785 -  
786 -- (void)setSelectedElement:(BOOL)selected {  
787 - if (selectedElement != selected) {  
788 - if (selected) {  
789 - self.textColor = self.selectedStateColor;  
790 - } else {  
791 - self.textColor = self.normalStateColor;  
792 - }  
793 - selectedElement = selected;  
794 - [self setNeedsLayout];  
795 - }  
796 -}  
797 -  
798 -- (void)setNormalStateColor:(UIColor *)color {  
799 - if (normalStateColor != color) {  
800 - [normalStateColor release];  
801 - normalStateColor = [color retain];  
802 - self.textColor = normalStateColor;  
803 - [self setNeedsLayout];  
804 - }  
805 -}  
806 -  
807 -@end  
LiveVideoCloud/Classes/SDK/V8HorizontalPickerView/V8HorizontalPickerViewProtocol.h deleted 100755 → 0
1 -//  
2 -// V8HorizontalPickerViewProtocol.h  
3 -//  
4 -// Created by Shawn Veader on 9/17/10.  
5 -// Copyright 2010 V8 Labs, LLC. All rights reserved.  
6 -//  
7 -  
8 -@class V8HorizontalPickerView;  
9 -  
10 -// ------------------------------------------------------------------  
11 -// V8HorizontalPickerView DataSource Protocol  
12 -@protocol V8HorizontalPickerViewDataSource <NSObject>  
13 -@required  
14 -// data source is responsible for reporting how many elements there are  
15 -- (NSInteger)numberOfElementsInHorizontalPickerView:(V8HorizontalPickerView *)picker;  
16 -@end  
17 -  
18 -  
19 -// ------------------------------------------------------------------  
20 -// V8HorizontalPickerView Delegate Protocol  
21 -@protocol V8HorizontalPickerViewDelegate <NSObject>  
22 -  
23 -@optional  
24 -// delegate callback to notify delegate selected element has changed  
25 -- (void)horizontalPickerView:(V8HorizontalPickerView *)picker didSelectElementAtIndex:(NSInteger)index;  
26 -  
27 -// one of these two methods must be defined  
28 -- (NSString *)horizontalPickerView:(V8HorizontalPickerView *)picker titleForElementAtIndex:(NSInteger)index;  
29 -- (UIView *)horizontalPickerView:(V8HorizontalPickerView *)picker viewForElementAtIndex:(NSInteger)index;  
30 -// any view returned from this must confirm to the V8HorizontalPickerElementState protocol  
31 -  
32 -@required  
33 -// delegate is responsible for reporting the size of each element  
34 -- (NSInteger)horizontalPickerView:(V8HorizontalPickerView *)picker widthForElementAtIndex:(NSInteger)index;  
35 -  
36 -@end  
37 -  
38 -// ------------------------------------------------------------------  
39 -// V8HorizontalPickerElementState Protocol  
40 -@protocol V8HorizontalPickerElementState <NSObject>  
41 -@required  
42 -// element views should know how display themselves based on selected status  
43 -- (void)setSelectedElement:(BOOL)selected;  
44 -@end  
45 \ No newline at end of file 0 \ No newline at end of file
LiveVideoCloud/Classes/Sections/HomePageSections/JBAutoRollTableView.h deleted 100644 → 0
1 -//  
2 -// JBAutoRollTableView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/22.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface JBAutoRollTableView : UITableView  
12 -  
13 -@property (nonatomic, strong) NSArray *news;  
14 -  
15 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/JBAutoRollTableView.m deleted 100644 → 0
1 -//  
2 -// JBAutoRollTableView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/22.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "JBAutoRollTableView.h"  
10 -  
11 -@interface JBAutoRollTableView()<UITableViewDataSource, UITableViewDelegate> {  
12 -  
13 - NSTimer *_timer;  
14 - NSIndexPath *_currentIndexPath;  
15 -}  
16 -  
17 -@end  
18 -  
19 -@implementation JBAutoRollTableView  
20 -  
21 -- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style  
22 -{  
23 - self = [super initWithFrame:frame style:style];  
24 - if (self) {  
25 - self.showsHorizontalScrollIndicator = NO;  
26 - self.showsVerticalScrollIndicator = NO;  
27 - self.delegate = self;  
28 - self.dataSource = self;  
29 - self.rowHeight = self.height;  
30 - self.separatorStyle = UITableViewCellSeparatorStyleNone;  
31 - self.scrollEnabled = NO;  
32 - self.scrollsToTop = NO;  
33 - }  
34 - return self;  
35 -}  
36 -  
37 -- (void)setNews:(NSArray *)news {  
38 - if (_news != news) {  
39 - _news = news;  
40 - [self reloadData];  
41 - [_timer invalidate];  
42 - _currentIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];  
43 - if (news.count > 1) {  
44 - _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(autoRollNews) userInfo:nil repeats:YES];  
45 - }  
46 - }  
47 -}  
48 -  
49 -- (void)autoRollNews  
50 -{  
51 - if (_news.count < 2) {  
52 - [_timer invalidate];  
53 - _timer = nil;  
54 - return;  
55 - }  
56 - if (_currentIndexPath.row < _news.count-1) {  
57 - [self scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:_currentIndexPath.row + 1 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];  
58 - _currentIndexPath = [NSIndexPath indexPathForRow:_currentIndexPath.row + 1 inSection:0];  
59 - } else {  
60 -  
61 - NSMutableArray *array = [NSMutableArray arrayWithArray:_news];  
62 - [array insertObject:[_news lastObject] atIndex:0];  
63 - [array removeLastObject];  
64 - _news = array;  
65 - [self reloadData];  
66 - [self scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO];  
67 - [self scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];  
68 - _currentIndexPath = [NSIndexPath indexPathForRow:1 inSection:0];  
69 - }  
70 -}  
71 -  
72 -#pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!  
73 -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  
74 -{  
75 - return _news.count;  
76 -}  
77 -  
78 -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
79 -{  
80 - static NSString *identify = @"newsTableViewcell";  
81 - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];  
82 - if (cell == nil) {  
83 - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];  
84 - cell.selectionStyle = UITableViewCellSelectionStyleNone;  
85 - UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, self.height)];  
86 - label.tag = 101;  
87 - label.textColor = [UIColor grayColorCNLive];  
88 - label.font = [UIFont systemFontOfSize:14];  
89 - [cell addSubview:label];  
90 - }  
91 - ProgramModel *model = [_news safetyObjectAtIndex:indexPath.row];  
92 - UILabel *label = (UILabel *)[cell viewWithTag:101];  
93 - label.text = model.title;  
94 - return cell;  
95 -}  
96 -  
97 -#pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!  
98 -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {  
99 -  
100 - [tableView deselectRowAtIndexPath:indexPath animated:YES];  
101 -}  
102 -  
103 -- (void)removeFromSuperview {  
104 - [super removeFromSuperview];  
105 -  
106 - [_timer invalidate];  
107 - _timer = nil;  
108 -}  
109 -  
110 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/JBBannerView.h deleted 100644 → 0
1 -//  
2 -// JBBannerView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/21.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -@class JBBannerView;  
11 -  
12 -@protocol JBBannerViewDelegate <NSObject>  
13 -@optional  
14 -- (void)didSelectedBannerView:(JBBannerView *)banner atIndex:(NSInteger)index;  
15 -@end  
16 -  
17 -@protocol JBBannerViewDatasource <NSObject>  
18 -@required  
19 -- (NSInteger)numberOfPages;  
20 -- (UIView *)pageAtIndex:(NSInteger)index;  
21 -@end  
22 -  
23 -@interface JBBannerView : UIView  
24 -  
25 -@property (nonatomic, weak) id <JBBannerViewDelegate> delegate;  
26 -@property (nonatomic, weak) id <JBBannerViewDatasource> datasource;  
27 -@property (nonatomic, strong) NSArray *bannerArray;  
28 -  
29 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/JBBannerView.m deleted 100644 → 0
1 -//  
2 -// JBBannerView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/21.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "JBBannerView.h"  
10 -  
11 -#define kDataScaleSeed 100  
12 -  
13 -@interface JBBannerView() <UICollectionViewDelegate, UICollectionViewDataSource> {  
14 -  
15 - NSTimer *_timer;  
16 - NSTimeInterval _timerDuration;  
17 -}  
18 -  
19 -@property (nonatomic, strong) UICollectionView *collectionView;  
20 -@property (nonatomic, strong) UILabel *cycleViewTitle;  
21 -  
22 -@end  
23 -  
24 -@implementation JBBannerView  
25 -  
26 -- (instancetype)initWithFrame:(CGRect)frame  
27 -{  
28 - self = [super initWithFrame:frame];  
29 - if (self) {  
30 - _timerDuration = 3.0;  
31 - _timer = [NSTimer timerWithTimeInterval:_timerDuration target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];  
32 - [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];  
33 -  
34 - [self addSubview:self.collectionView];  
35 - [self addSubview:self.cycleViewTitle];  
36 - }  
37 - return self;  
38 -}  
39 -  
40 -#pragma mark - 时钟方法  
41 -- (void)updateTimer {  
42 -  
43 - NSIndexPath *indexPath = [_collectionView indexPathsForVisibleItems].lastObject;  
44 - NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:indexPath.item + 1 inSection:indexPath.section];  
45 -  
46 - [_collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];  
47 -}  
48 -  
49 -- (void)setBannerArray:(NSArray *)bannerArray {  
50 -  
51 - if (_bannerArray != bannerArray) {  
52 - _bannerArray = bannerArray;  
53 -  
54 -  
55 - }  
56 -}  
57 -  
58 -#pragma mark - UICollectionViewDelegate !!!!!!!!!!!!  
59 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {  
60 -  
61 -  
62 -}  
63 -  
64 -- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {  
65 -  
66 - [self scrollViewDidEndDecelerating:scrollView];  
67 -}  
68 -  
69 -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {  
70 -  
71 - NSInteger page = scrollView.contentOffset.x / scrollView.bounds.size.width;  
72 -  
73 - self.cycleViewTitle.text = [NSString stringWithFormat:@" %ld",(long)(page % 3)];  
74 -  
75 - NSInteger lastItem = [_collectionView numberOfItemsInSection:0];  
76 -  
77 - if (page == 0 || page == (lastItem - 1)) {  
78 -  
79 - NSInteger offset = 3;  
80 -  
81 - if (page == (lastItem - 1)) {  
82 - offset = offset - 1;  
83 - }  
84 -  
85 - CGFloat width = scrollView.bounds.size.width;  
86 -  
87 - scrollView.contentOffset = CGPointMake(offset * width, 0);  
88 - }  
89 -}  
90 -  
91 -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {  
92 -  
93 - _timer.fireDate = [NSDate distantFuture];  
94 -}  
95 -  
96 -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {  
97 -  
98 - _timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:_timerDuration];  
99 -}  
100 -  
101 -#pragma mark - UICollectionViewDataSource !!!!!!!!!!!!  
102 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
103 -  
104 - return 6;  
105 -}  
106 -  
107 -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {  
108 -  
109 - UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collcellId" forIndexPath:indexPath];  
110 - switch (indexPath.item) {  
111 - case 0:  
112 - cell.backgroundColor = [UIColor yellowColor];  
113 - break;  
114 - case 1:  
115 - cell.backgroundColor = [UIColor greenColor];  
116 - break;  
117 - case 2:  
118 - cell.backgroundColor = [UIColor blueColor];  
119 - break;  
120 - case 3:  
121 - cell.backgroundColor = [UIColor yellowColor];  
122 - break;  
123 - case 4:  
124 - cell.backgroundColor = [UIColor greenColor];  
125 - break;  
126 - case 5:  
127 - cell.backgroundColor = [UIColor blueColor];  
128 - break;  
129 - default:  
130 - break;  
131 - }  
132 -  
133 - return cell;  
134 -}  
135 -  
136 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!  
137 -- (UICollectionView *)collectionView {  
138 -  
139 - if (!_collectionView) {  
140 - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];  
141 - layout.minimumLineSpacing = 0;  
142 - layout.minimumInteritemSpacing = 0;  
143 - layout.itemSize = CGSizeMake(KScreenWidth-20, (KScreenWidth-20)/2);  
144 - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;  
145 -  
146 - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 10, KScreenWidth-20, (KScreenWidth-20)/2) collectionViewLayout:layout];  
147 - _collectionView.backgroundColor = [UIColor whiteColor];  
148 - _collectionView.delegate = self;  
149 - _collectionView.dataSource = self;  
150 - _collectionView.pagingEnabled = YES;  
151 - _collectionView.showsVerticalScrollIndicator = NO;  
152 - _collectionView.showsHorizontalScrollIndicator = NO;  
153 - _collectionView.bounces = NO;  
154 - [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collcellId"];  
155 - }  
156 - return _collectionView;  
157 -}  
158 -  
159 -- (UILabel *)cycleViewTitle {  
160 -  
161 - if (!_cycleViewTitle) {  
162 -  
163 - _cycleViewTitle = [[UILabel alloc] initWithFrame:CGRectMake(10, self.collectionView.bottom-35, self.collectionView.width, 35)];  
164 - _cycleViewTitle.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];  
165 - _cycleViewTitle.textColor = [UIColor whiteColor];  
166 - _cycleViewTitle.font = [UIFont systemFontOfSize:19];  
167 - }  
168 - return _cycleViewTitle;  
169 -}  
170 -  
171 -- (void)removeFromSuperview {  
172 - [super removeFromSuperview];  
173 -  
174 - [_timer invalidate];  
175 - _timer = nil;  
176 -}  
177 -  
178 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/JBSearchView.h deleted 100644 → 0
1 -//  
2 -// JBSearchView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/22.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface JBSearchView : UIView  
12 -  
13 -@property (nonatomic, strong) NSArray *sortArray;  
14 -  
15 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/JBSearchView.m deleted 100644 → 0
1 -//  
2 -// JBSearchView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/22.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "JBSearchView.h"  
10 -  
11 -@interface JBSearchView()  
12 -  
13 -@property (nonatomic, strong) UIButton *searchBtn;  
14 -@property (nonatomic, strong) UIView *searchLine;  
15 -@property (nonatomic, strong) UIView *sortBtnBackground;  
16 -  
17 -@end  
18 -  
19 -@implementation JBSearchView  
20 -  
21 -- (instancetype)initWithFrame:(CGRect)frame  
22 -{  
23 - self = [super initWithFrame:frame];  
24 - if (self) {  
25 - [self addSubview:self.searchBtn];  
26 - }  
27 - return self;  
28 -}  
29 -  
30 -- (void)setSortArray:(NSArray *)sortArray {  
31 -  
32 - if (_sortArray != sortArray) {  
33 - _sortArray = sortArray;  
34 - }  
35 -  
36 - if ([Tools isArray:sortArray]) {  
37 -  
38 - [self addSubview:self.sortBtnBackground];  
39 - CGFloat width = 13;  
40 - for (int i = 0; i < sortArray.count; i++) {  
41 - NSDictionary *dic = [sortArray safetyObjectAtIndex:i];  
42 - NSString *name = dic[@"name"];  
43 - CGRect rect = [name boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:15]} context:nil];  
44 - UIButton *sortBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
45 - sortBtn.tag = 100+i;  
46 - sortBtn.frame = CGRectMake(width, 0, rect.size.width, 33);  
47 - sortBtn.titleLabel.font = [UIFont systemFontOfSize:14];  
48 - [sortBtn setTitle:name forState:UIControlStateNormal];  
49 - [sortBtn setTitleColor:[UIColor grayColorCNLive] forState:UIControlStateNormal];  
50 - [sortBtn addTarget:self action:@selector(sortBtnAction:) forControlEvents:UIControlEventTouchUpInside];  
51 - [self.sortBtnBackground addSubview:sortBtn];  
52 - width += rect.size.width + 13;  
53 - }  
54 - self.sortBtnBackground.width = width;  
55 - self.sortBtnBackground.x = KScreenWidth-self.sortBtnBackground.width-10;  
56 - self.searchBtn.width = KScreenWidth-20-7-self.sortBtnBackground.width;  
57 - [self addSubview:self.sortBtnBackground];  
58 -  
59 - } else {  
60 -  
61 - self.searchBtn.width = KScreenWidth-20;  
62 - [self.sortBtnBackground removeFromSuperview];  
63 - }  
64 -}  
65 -  
66 -#pragma mark - ACtion !!!!!!!!!!!!!!!!!!!!!!!  
67 -- (void)searchBtnAction {  
68 -  
69 - NSLog(@"搜索!!!!!!");  
70 -}  
71 -  
72 -- (void)sortBtnAction:(UIButton *)button  
73 -{  
74 - NSLog(@"分类按钮!!!!!");  
75 -  
76 - NSDictionary *dic = [_sortArray safetyObjectAtIndex:button.tag-100];  
77 -// SortViewController *sort=[[SortViewController alloc] init];  
78 -// sort.searchBtn = YES;  
79 -// sort.title = _model.title;  
80 -// sort.cid = self.model.cid;  
81 -// if ([Tools isDictionary:dic]) {  
82 -// sort.sortId = dic[@"id"];  
83 -// sort.sortType = dic[@"type"];  
84 -// }  
85 -// [self.viewController.navigationController pushViewController:sort animated:YES];  
86 -}  
87 -  
88 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
89 -- (UIButton *)searchBtn {  
90 - if (!_searchBtn) {  
91 - _searchBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
92 - _searchBtn.frame = CGRectMake(10, 6, KScreenWidth-20, 33);  
93 - [_searchBtn setImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];  
94 - [_searchBtn setTitle:@"搜索" forState:UIControlStateNormal];  
95 - [_searchBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];  
96 - [_searchBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)];  
97 - _searchBtn.titleLabel.font = [UIFont systemFontOfSize:14];  
98 - _searchBtn.backgroundColor = [UIColor whiteColor];  
99 - _searchBtn.layer.cornerRadius = 16;  
100 - _searchBtn.layer.masksToBounds = YES;  
101 - [_searchBtn addTarget:self action:@selector(searchBtnAction) forControlEvents:UIControlEventTouchUpInside];  
102 - }  
103 - return _searchBtn;  
104 -}  
105 -  
106 -- (UIView *)sortBtnBackground  
107 -{  
108 - if (!_sortBtnBackground) {  
109 - _sortBtnBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 6, 0, 33)];  
110 - _sortBtnBackground.backgroundColor = [UIColor whiteColor];  
111 - _sortBtnBackground.layer.cornerRadius = 16;  
112 - _sortBtnBackground.layer.masksToBounds = YES;  
113 - }  
114 - return _sortBtnBackground;  
115 -}  
116 -  
117 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBannerAndMarqueeModel.h deleted 100644 → 0
1 -//  
2 -// LVCBannerAndMarqueeModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseModel.h"  
10 -  
11 -@interface LVCBannerAndMarqueeModel : BaseModel // channels 中 programs 也用这个model  
12 -  
13 -@property (nonatomic, copy)NSString *url;  
14 -@property (nonatomic, copy)NSString *img;  
15 -@property (nonatomic, copy)NSString *mediaId;  
16 -@property (nonatomic, copy)NSString *title;  
17 -@property (nonatomic, copy)NSString *vipFlag;  
18 -@property (nonatomic, copy)NSString *docID;  
19 -@property (nonatomic, copy)NSString *picType; //列表显示图片类型 H 横图 V 竖图 M 明星人气榜  
20 -@property (nonatomic, copy)NSString *subTitle;  
21 -@property (nonatomic, copy)NSString *type; //节目类型 live:直播,program:普通视频,web:网页,series:连续剧,album:专辑  
22 -  
23 -//@property (nonatomic, copy)NSString *playMediaId;  
24 -//@property (nonatomic, copy)NSString *desc;  
25 -//@property (nonatomic, copy)NSString *itemId;  
26 -//@property (nonatomic, copy)NSString *activityId;  
27 -  
28 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBannerAndMarqueeModel.m deleted 100644 → 0
1 -//  
2 -// LVCBannerAndMarqueeModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCBannerAndMarqueeModel.h"  
10 -  
11 -@implementation LVCBannerAndMarqueeModel  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBigHorizontalCollectionViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCBigHorizontalCollectionViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/23.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCBigHorizontalCollectionViewCell : UICollectionViewCell  
12 -  
13 -@property (nonatomic, strong)ProgramModel *model;  
14 -@property (nonatomic, strong)ProgramModel *liveModel;  
15 -  
16 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBigHorizontalCollectionViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCBigHorizontalCollectionViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/23.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCBigHorizontalCollectionViewCell.h"  
10 -  
11 -@interface LVCBigHorizontalCollectionViewCell() {  
12 -  
13 - CGFloat _x;  
14 -}  
15 -  
16 -@property (nonatomic, strong) UIImageView *imageView;  
17 -@property (nonatomic, strong) UILabel *title;  
18 -@property (nonatomic, strong) UILabel *detail;  
19 -@property (nonatomic, strong) UIImageView *typeImage; //节目类型角标  
20 -  
21 -@end  
22 -  
23 -@implementation LVCBigHorizontalCollectionViewCell  
24 -  
25 -- (instancetype)initWithFrame:(CGRect)frame  
26 -{  
27 - self = [super initWithFrame:frame];  
28 - if (self) {  
29 - if ([UIDevice currentDevice].systemVersion.floatValue >= 10) {  
30 - _x = 0;  
31 - } else {  
32 - _x = 10;  
33 - }  
34 - [self.contentView addSubview:self.imageView];  
35 - [self.contentView addSubview:self.title];  
36 - [self.contentView addSubview:self.detail];  
37 - [self.imageView addSubview:self.typeImage];  
38 - }  
39 - return self;  
40 -}  
41 -  
42 -- (void)setModel:(ProgramModel *)model {  
43 -  
44 - if (_model != model) {  
45 - _model = model;  
46 - }  
47 -}  
48 -  
49 -- (void)setLiveModel:(ProgramModel *)liveModel {  
50 -  
51 - if (_liveModel != liveModel) {  
52 - _liveModel = liveModel;  
53 - }  
54 -}  
55 -  
56 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!  
57 -- (UIImageView *)imageView  
58 -{  
59 - if (!_imageView) {  
60 - _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(_x, 0, self.contentView.width-20, (self.contentView.width-20)/2)];  
61 - _imageView.backgroundColor = [UIColor grayColor];  
62 - }  
63 - return _imageView;  
64 -}  
65 -  
66 -- (UILabel *)title  
67 -{  
68 - if (!_title) {  
69 - _title = [[UILabel alloc] initWithFrame:CGRectMake(_x, self.imageView.bottom+7, self.contentView.width-10, 12)];  
70 - _title.font = [UIFont systemFontOfSize:14];  
71 - _title.textColor = [UIColor blackColorCNLive];  
72 - }  
73 - return _title;  
74 -}  
75 -  
76 -- (UILabel *)detail  
77 -{  
78 - if (!_detail) {  
79 - _detail = [[UILabel alloc] initWithFrame:CGRectMake(_x, self.title.bottom+7, self.contentView.width-10, 11)];  
80 - _detail.font = [UIFont systemFontOfSize:12];  
81 - _detail.textColor = [UIColor grayColorCNLive];  
82 - }  
83 - return _detail;  
84 -}  
85 -  
86 -- (UIImageView *)typeImage  
87 -{  
88 - if (!_typeImage) {  
89 - _typeImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 39, 39)];  
90 - }  
91 - return _typeImage;  
92 -}  
93 -  
94 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBqWqXgModel.h deleted 100644 → 0
1 -//  
2 -// LVCBqWqXgModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseModel.h"  
10 -  
11 -@interface LVCBqWqXgModel : BaseModel  
12 -  
13 -// 本期看点、往期回看、相关视频、相关明星 公共属性  
14 -@property (nonatomic, copy)NSString *title;  
15 -@property (nonatomic, copy)NSString *img;  
16 -// 本期看点、往期回看、相关视频 公共属性  
17 -@property (nonatomic, copy)NSString *mediaId;  
18 -@property (nonatomic, copy)NSString *docSubTitle;  
19 -// 相关视频、相关明星 公共属性  
20 -@property (nonatomic, copy)NSString *docID;  
21 -@property (nonatomic, copy)NSString *type;  
22 -// 相关视频  
23 -@property (nonatomic, copy)NSString *MAM_PosterUrl;  
24 -@property (nonatomic, copy)NSString *MAM_SmallPosterUrl;  
25 -@property (nonatomic, copy)NSString *docDescription;  
26 -@property (nonatomic, copy)NSString *vipFlag;  
27 -@property (nonatomic, copy)NSString *MAM_BigPostUrl;  
28 -// 相关明星  
29 -@property (nonatomic, copy)NSString *support;  
30 -@property (nonatomic, copy)NSString *voteRule;  
31 -  
32 -// 用于判断播放底页里本期看点、往期回看、相关视频中,播放的视频是否高亮显示  
33 -@property (nonatomic, assign)BOOL isPlaying;  
34 -@property (nonatomic, copy)NSString *module;  
35 -  
36 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCBqWqXgModel.m deleted 100644 → 0
1 -//  
2 -// LVCBqWqXgModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCBqWqXgModel.h"  
10 -  
11 -@implementation LVCBqWqXgModel  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCChannelDetailModel.h deleted 100644 → 0
1 -//  
2 -// LVCChannelDetailModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseModel.h"  
10 -  
11 -@interface LVCChannelDetailModel : BaseModel  
12 -  
13 -@property (nonatomic, strong)NSString *cid;  
14 -@property (nonatomic, strong)NSString *title;  
15 -@property (nonatomic, strong)NSString *channelType;  
16 -@property (nonatomic, strong)NSArray *programs;  
17 -@property (nonatomic, strong)NSString *categoryType;  
18 -  
19 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCChannelDetailModel.m deleted 100644 → 0
1 -//  
2 -// LVCChannelDetailModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCChannelDetailModel.h"  
10 -  
11 -@implementation LVCChannelDetailModel  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCChannelPagingView.h deleted 100644 → 0
1 -//  
2 -// LVCChannelPagingView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/19.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCChannelPagingView : UIView  
12 -  
13 -@property (nonatomic, strong) LVCHomePageListModel *model;  
14 -  
15 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCChannelPagingView.m deleted 100644 → 0
1 -//  
2 -// LVCChannelPagingView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/19.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCChannelPagingView.h"  
10 -#import "LVCMainHeaderCollectionReusableView.h"  
11 -#import "LVCSectionHeaderCollectionReusableView.h"  
12 -#import "LVCMainHorizontalCollectionViewCell.h"  
13 -#import "JBSearchView.h"  
14 -  
15 -static NSString *mainHeaderId = @"mainHeader";  
16 -static NSString *SectionHeaderId = @"SectionHeader";  
17 -static NSString *MainHorizontalCellId = @"MainHorizontalCell";  
18 -  
19 -@interface LVCChannelPagingView() <UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> {  
20 -  
21 - BOOL _hasSearchBox; //是否显示搜索框  
22 - NSArray *_searchColumnArray;  
23 - NSMutableArray *_banners;  
24 - NSMutableArray *_marquees;  
25 - NSMutableArray *_channels;  
26 - LVCMainHeaderCollectionReusableView *_mainHeader;  
27 - CGFloat _collectionOffsetY;  
28 -}  
29 -  
30 -@property (nonatomic, strong)UICollectionView *collectionView;  
31 -//@property (nonatomic, strong)UIView *searchBackground;  
32 -@property (nonatomic, strong)JBSearchView *searchView;  
33 -//@property (nonatomic, strong)UIButton *searchBtn;  
34 -@property (nonatomic, strong)UIView *searchLine;  
35 -@property (nonatomic, strong)UILabel *searchHotLab;  
36 -  
37 -@end  
38 -  
39 -@implementation LVCChannelPagingView  
40 -  
41 -- (instancetype)initWithFrame:(CGRect)frame  
42 -{  
43 - self = [super initWithFrame:frame];  
44 - if (self) {  
45 - [self addSubview:self.collectionView];  
46 - _banners = [[NSMutableArray alloc] init];  
47 - _marquees = [[NSMutableArray alloc] init];  
48 - _channels = [[NSMutableArray alloc] init];  
49 - }  
50 - return self;  
51 -}  
52 -  
53 -- (void)setModel:(LVCHomePageListModel *)model {  
54 -  
55 - if (_model != model) {  
56 - _model = model;  
57 - }  
58 - [self requestAppindex];  
59 -}  
60 -  
61 -#pragma mark - 请求数据  
62 -- (void)requestAppindex {  
63 -  
64 - NSString *uid;  
65 - if ([UserTools isLogin]) {  
66 - uid = [UserInformationModel manager].uid;  
67 - } else {  
68 - uid = [NSString stringWithFormat:@"%u", arc4random()%3];  
69 - }  
70 - NSString *tm = [NSString stringWithFormat:@"%u_%@", arc4random()%10, uid];  
71 -  
72 - NSDictionary *parameter = @{@"cid": self.model.cid ? self.model.cid : @"",  
73 - @"tm": tm};  
74 -  
75 - NSString *url;  
76 - if ([self.model.cid isEqualToString:@"tj/"]) {  
77 - url = Appindexpage;  
78 - } else {  
79 - url = Appindex;  
80 - }  
81 -  
82 - [[AFHTTPRequestOperationManager manager] GET:url parameters:[self addParameters:parameter] success:^(AFHTTPRequestOperation *operation, id responseObject) {  
83 -  
84 - responseObject = [responseObject validatedDictionary];  
85 -  
86 - _hasSearchBox = [responseObject[@"searchCategory"] isEqualToString:@"false"] ? NO : YES;  
87 -  
88 - self.searchHotLab.text = responseObject[@"placeHolder"];  
89 -  
90 - //是否显示搜索旁边的分类  
91 - _searchColumnArray = responseObject[@"searchColumn"];  
92 -  
93 - if ([Tools isArray:_searchColumnArray]) {  
94 -  
95 - // 搜索旁的分类  
96 - } else {  
97 -  
98 -// self.searchBtn.width = KScreenWidth - 20;  
99 - }  
100 -  
101 - if (responseObject[@"banner"] && [responseObject[@"banner"] isKindOfClass:[NSArray class]]) {  
102 - for (NSDictionary *dic in responseObject[@"banner"]) {  
103 - LVCBannerAndMarqueeModel *model = [LVCBannerAndMarqueeModel modelWithDic:dic];  
104 - if (model) {  
105 - [_banners addObject:model];  
106 - }  
107 - }  
108 - }  
109 - if (responseObject[@"marquee"] && [responseObject[@"marquee"] isKindOfClass:[NSArray class]]) {  
110 - for (NSDictionary *dic in responseObject[@"marquee"]) {  
111 - LVCBannerAndMarqueeModel *model = [LVCBannerAndMarqueeModel modelWithDic:dic];  
112 - if (model) {  
113 - [_marquees addObject:model];  
114 - }  
115 - }  
116 - }  
117 - if (responseObject[@"channels"] && [responseObject[@"channels"] isKindOfClass:[NSArray class]]) {  
118 -  
119 - for (NSDictionary *dic in responseObject[@"channels"]) {  
120 - LVCChannelDetailModel *model = [LVCChannelDetailModel modelWithDic:dic];  
121 - NSMutableArray *programs = [[NSMutableArray alloc] init];  
122 -  
123 - if (dic[@"programs"] && [dic[@"programs"] isKindOfClass:[NSArray class]]) {  
124 - for (NSDictionary *program in dic[@"programs"]) {  
125 - id programModel;  
126 - if ([model.channelType isEqualToString:@"M"]) {  
127 - programModel = [LVCBqWqXgModel modelWithDic:program];  
128 - } else {  
129 - programModel = [LVCBannerAndMarqueeModel modelWithDic:program];  
130 - }  
131 - if (programModel) {  
132 - [programs addObject:programModel];  
133 - }  
134 - }  
135 - }  
136 - model.programs = [[NSArray alloc] initWithArray:programs];  
137 - if (model && [Tools isArray:model.programs]) {  
138 - [_channels addObject:model];  
139 - }  
140 - }  
141 - }  
142 - [self.collectionView reloadData];  
143 -  
144 - } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
145 -  
146 -  
147 - }];  
148 -}  
149 -  
150 -#pragma mark - UICollectionViewDelegate !!!!!!!!!!!!!!!!!!!!!!!!!  
151 -- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
152 -  
153 - if (_hasSearchBox) {  
154 -  
155 - if (scrollView == self.collectionView) {  
156 -  
157 - if (scrollView.contentOffset.y <= 0) {  
158 -  
159 - self.searchView.y = 0;  
160 - if (_channels.count > 0) {  
161 - [_mainHeader addSubview:self.searchView];  
162 - } else {  
163 - [self.collectionView addSubview:self.searchView];  
164 - }  
165 - _collectionOffsetY = scrollView.contentOffset.y;  
166 - } else {  
167 -  
168 - if (scrollView.contentOffset.y >= 45) {  
169 - if (self.searchView.superview != self) {  
170 - self.searchView.y = -45;  
171 - [self.searchView addSubview:self.searchLine];  
172 - [self addSubview:self.searchView];  
173 - }  
174 - }  
175 - if (scrollView.contentOffset.y-_collectionOffsetY > 0) {  
176 - _collectionOffsetY = scrollView.contentOffset.y;  
177 - [UIView animateWithDuration:0.2 animations:^{  
178 - self.searchView.y = -45;  
179 - }];  
180 - } else {  
181 - _collectionOffsetY = scrollView.contentOffset.y;  
182 - [UIView animateWithDuration:0.2 animations:^{  
183 - self.searchView.y = 0;  
184 - }];  
185 - }  
186 - }  
187 - }  
188 - }  
189 -}  
190 -  
191 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {  
192 -  
193 -  
194 -}  
195 -  
196 -#pragma mark - UICollectionViewDataSource !!!!!!!!!!!!!!!!!!!!!!!!!  
197 -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {  
198 -  
199 - return 4;  
200 -}  
201 -  
202 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
203 -  
204 - return 6;  
205 -}  
206 -  
207 -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {  
208 -  
209 - LVCMainHorizontalCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MainHorizontalCellId forIndexPath:indexPath];  
210 - cell.backgroundColor = [UIColor blueColor];  
211 - return cell;  
212 -}  
213 -  
214 -- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {  
215 -  
216 - if (indexPath.section == 0) {  
217 - _mainHeader = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:mainHeaderId forIndexPath:indexPath];  
218 - _mainHeader.backgroundColor = [UIColor redColor];  
219 - if (!self.searchView.superview) {  
220 - [_mainHeader addSubview:self.searchView];  
221 - }  
222 - _mainHeader.banners = _banners;  
223 - return _mainHeader;  
224 - } else {  
225 - LVCSectionHeaderCollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:SectionHeaderId forIndexPath:indexPath];  
226 - view.backgroundColor = [UIColor yellowColor];  
227 -  
228 - LVCChannelDetailModel *model = [[LVCChannelDetailModel alloc] init];  
229 - model.title = [NSString stringWithFormat:@"这是第%ld组",(long)indexPath.section];  
230 - view.model = model;  
231 -  
232 - return view;  
233 - }  
234 - return nil;  
235 -}  
236 -  
237 -#pragma mark - UICollectionViewDelegateFlowLayout !!!!!!!!!!!!!!!!!!!!!!!!!  
238 -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {  
239 -  
240 - return CGSizeMake(KScreenWidth*0.4, 80);  
241 -}  
242 -  
243 -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {  
244 -  
245 - if (section == 0) {  
246 - return UIEdgeInsetsMake(0, 0, 0, 0);  
247 - }  
248 - return UIEdgeInsetsMake(5, 10, 5, 4);  
249 -}  
250 -  
251 -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {  
252 -  
253 - if (section == 0) {  
254 - return CGSizeMake(KScreenWidth, 300);  
255 - } else {  
256 - return CGSizeMake(KScreenWidth, 47);  
257 - }  
258 -}  
259 -  
260 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
261 -- (UICollectionView *)collectionView {  
262 -  
263 - if (!_collectionView) {  
264 -  
265 - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];  
266 - layout.minimumLineSpacing = 10;  
267 - layout.minimumInteritemSpacing = 0;  
268 -  
269 - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight - 64 - 49) collectionViewLayout:layout];  
270 - _collectionView.delegate = self;  
271 - _collectionView.dataSource = self;  
272 - _collectionView.backgroundColor = [UIColor whiteColor];  
273 - [_collectionView registerClass:[LVCMainHeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:mainHeaderId];  
274 -  
275 - [_collectionView registerClass:[LVCSectionHeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:SectionHeaderId];  
276 -  
277 - [_collectionView registerClass:[LVCMainHorizontalCollectionViewCell class] forCellWithReuseIdentifier:MainHorizontalCellId];  
278 - }  
279 - return _collectionView;  
280 -}  
281 -  
282 -- (JBSearchView *)searchView {  
283 -  
284 - if (!_searchView) {  
285 - _searchView = [[JBSearchView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 45)];  
286 - _searchView.backgroundColor = [UIColor backgroundColor];  
287 -  
288 - NSMutableArray *arrayM = [[NSMutableArray alloc] init];  
289 - NSDictionary *dict1 = @{@"name":@"liveShow"};  
290 - [arrayM addObject:dict1];  
291 - NSDictionary *dict2 = @{@"name":@"全部"};  
292 - [arrayM addObject:dict2];  
293 - _searchView.sortArray = arrayM;  
294 -  
295 - }  
296 - return _searchView;  
297 -}  
298 -  
299 -- (UIView *)searchLine {  
300 -  
301 - if (!_searchLine) {  
302 - _searchLine = [[UIView alloc] initWithFrame:CGRectMake(0, 44.5, KScreenWidth, 0.5)];  
303 - _searchLine.backgroundColor = [UIColor navigationLineColor];  
304 - }  
305 - return _searchLine;  
306 -}  
307 -  
308 -//- (UILabel *)searchHotLab {  
309 -//  
310 -// if (!_searchHotLab) {  
311 -// _searchHotLab = [[UILabel alloc] initWithFrame:CGRectMake(35, 0, self.searchBtn.width-45, self.searchBtn.height)];  
312 -// _searchHotLab.textColor = [UIColor grayColorCNLive];  
313 -// _searchHotLab.font = [UIFont systemFontOfSize:14];  
314 -// }  
315 -// return _searchHotLab;  
316 -//}  
317 -  
318 -// ------------------------------------------分割线---------------------------------------------------  
319 -- (NSDictionary *)addParameters:(NSDictionary *)dict {  
320 -  
321 - if (![dict isKindOfClass:[NSDictionary class]]) {  
322 - return dict;  
323 - }  
324 - if (!dict) {  
325 - return @{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion};  
326 - } else {  
327 - NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:dict];  
328 - [dic addEntriesFromDictionary:@{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion}];  
329 - return [[NSDictionary alloc] initWithDictionary:dic];  
330 - }  
331 -}  
332 -  
333 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCHomePageListModel.h deleted 100644 → 0
1 -//  
2 -// LVCHomePageListModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/12.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseModel.h"  
10 -  
11 -@interface LVCHomePageListModel : NSObject  
12 -  
13 -@property (nonatomic, copy) NSString *cid;  
14 -@property (nonatomic, copy) NSString *img;  
15 -@property (nonatomic, copy) NSString *title;  
16 -@property (nonatomic, copy) NSString *type;  
17 -@property (nonatomic, copy) NSString *url;  
18 -  
19 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCHomePageListModel.m deleted 100644 → 0
1 -//  
2 -// LVCHomePageListModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/12.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCHomePageListModel.h"  
10 -  
11 -@implementation LVCHomePageListModel  
12 -  
13 -  
14 -  
15 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCHomePageViewController.m deleted 100644 → 0
1 -//  
2 -// LVCHomePageViewController.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/9.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCHomePageViewController.h"  
10 -#import "LVCChannelPagingView.h"  
11 -  
12 -@interface LVCHomePageViewController ()<V8HorizontalPickerViewDataSource, V8HorizontalPickerViewDelegate,MHPagingScrollViewDelegate,UIScrollViewDelegate> {  
13 -  
14 - NSMutableArray <LVCHomePageListModel *> *_titleArr;  
15 - CGFloat _titleSpace;  
16 -}  
17 -  
18 -@property (nonatomic, strong)V8HorizontalPickerView *titleView;  
19 -@property (nonatomic, strong)MHPagingScrollView *pageView;  
20 -@property (nonatomic, strong)UIButton *reloadBtn;  
21 -@property (nonatomic, strong)UILabel *reloadLab;  
22 -@end  
23 -  
24 -@implementation LVCHomePageViewController  
25 -  
26 -- (void)viewWillAppear:(BOOL)animated  
27 -{  
28 - [super viewWillAppear:animated];  
29 - [self pagingScrollView:self.pageView pageForIndex:self.pageView.indexOfSelectedPage];  
30 -}  
31 -  
32 -- (void)viewDidLoad {  
33 - [super viewDidLoad];  
34 -  
35 -// [[NSNotificationCenter defaultCenter] addObserver:self  
36 -// selector:@selector(appBecomeActive)  
37 -// name:UIApplicationDidBecomeActiveNotification  
38 -// object:nil];  
39 -  
40 - _titleArr = [[NSMutableArray alloc] init];  
41 -  
42 - [self getChannelList];  
43 -  
44 - self.navigationItem.titleView = self.titleView;  
45 - [self.view addSubview:self.pageView];  
46 - [_pageView reloadPages];  
47 - [_titleView reloadData];  
48 -}  
49 -  
50 -#pragma mark - 请求频道列表  
51 -- (void)getChannelList {  
52 -  
53 - NSDictionary *para = @{@"appid": @"hdtv",  
54 - @"plat": @"i",  
55 - @"version": @"5.5.2.052420"}; //[NSDictionary CommonParameters]  
56 -  
57 - MBProgressHUD *waitHUD = [Tools showActivityHudInView:self.view withString:@"加载中..."];  
58 - [[AFHTTPRequestOperationManager manager] GET:AllChannellist parameters:para success:^(AFHTTPRequestOperation *operation, id responseObject) {  
59 -  
60 - [waitHUD hide:NO];  
61 - [self.reloadBtn removeFromSuperview];  
62 - responseObject = [responseObject validatedDictionary];  
63 -  
64 - if ([[NSString stringWithFormat:@"%@",responseObject[@"errorCode"]] isEqualToString:@"0"]) {  
65 -  
66 - if ([Tools isArray:responseObject[@"channels"]]) {  
67 -  
68 - for (NSDictionary *dict in responseObject[@"channels"]) {  
69 -  
70 - LVCHomePageListModel *model = [[LVCHomePageListModel alloc] init];  
71 - [model setValuesForKeysWithDictionary:dict];  
72 - [_titleArr addObject:model];  
73 - }  
74 -  
75 - CGFloat width = 0;  
76 - for (LVCHomePageListModel *model in _titleArr) {  
77 - CGSize size = [model.title sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];  
78 - width += size.width+5;  
79 - }  
80 - if (width < self.titleView.width) {  
81 - _titleSpace = (self.titleView.width-width)/_titleArr.count;  
82 - } else {  
83 - _titleSpace = 0;  
84 - }  
85 -  
86 - [_titleView reloadData];  
87 - [_pageView reloadPages];  
88 -  
89 - // /*-----------------列表数据处理----------------*/  
90 - // [CNHDTVStatManager PVStatForPage:@"tj/" userID:[UserInformationModel manager].uid];  
91 - // NSMutableArray *normalArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:NormalChannelArray]];  
92 - // NSMutableArray *otherArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:OtherChannelArray]];  
93 - //  
94 - // NSArray *channelsArray = responseObject[@"channels"];  
95 -  
96 -  
97 -// /*-----------------根据频道列表网络数据的变化来对本地数据进行处理----------------*/  
98 - // //将新增的频道添加到常用频道  
99 - // for (NSDictionary *dic in channelsArray) {  
100 - // if (![normalArray containsObject:dic]) {  
101 - // [normalArray addObject:dic];  
102 - // }  
103 - // }  
104 - //  
105 - // //从常用频道和其他频道中删除网络数据中没有的数据  
106 - // NSMutableArray *tempNormalArray = [normalArray mutableCopy];  
107 - // for (NSDictionary *dic in tempNormalArray) {  
108 - // if (![channelsArray containsObject:dic]) {  
109 - // [normalArray removeObject:dic];  
110 - // }  
111 - // }  
112 - //  
113 - // NSMutableArray *tempOtherArray = [otherArray mutableCopy];  
114 - // for (NSDictionary *dic in tempOtherArray) {  
115 - // if (![channelsArray containsObject:dic]) {  
116 - // [otherArray removeObject:dic];  
117 - // }  
118 - // }  
119 - //  
120 - // [[NSUserDefaults standardUserDefaults] setObject:normalArray forKey:NormalChannelArray];  
121 - // [[NSUserDefaults standardUserDefaults] setObject:otherArray forKey:OtherChannelArray];  
122 - // [[NSUserDefaults standardUserDefaults] synchronize];  
123 -  
124 - }  
125 - else {  
126 -  
127 - [Tools showHUDInView:self.view withString:@"获取数据失败" autoHide:YES];  
128 - }  
129 -  
130 -  
131 - } else {  
132 -  
133 - [Tools showHUDInView:self.view withString:@"获取数据失败" autoHide:YES];  
134 - }  
135 -  
136 - self.reloadLab.text = @"暂无数据";  
137 -  
138 - } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
139 -  
140 - [waitHUD hide:NO];  
141 - [self.reloadBtn removeFromSuperview];  
142 - self.reloadLab.text = @"您好像掉线了";  
143 - }];  
144 -}  
145 -  
146 -#pragma mark - V8HorizontalPickerViewDataSource  
147 -  
148 -- (NSInteger)numberOfElementsInHorizontalPickerView:(V8HorizontalPickerView *)picker  
149 -{  
150 - return _titleArr.count;  
151 -}  
152 -  
153 -#pragma mark - V8HorizontalPickerViewDelegate  
154 -  
155 -- (NSString *)horizontalPickerView:(V8HorizontalPickerView *)picker titleForElementAtIndex:(NSInteger)index  
156 -{  
157 - return _titleArr[index].title;  
158 -}  
159 -  
160 -- (NSInteger)horizontalPickerView:(V8HorizontalPickerView *)picker widthForElementAtIndex:(NSInteger)index  
161 -{  
162 -  
163 - if (_titleSpace != 0) {  
164 -  
165 - CGSize size = [_titleArr[index].title sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];  
166 - return size.width +_titleSpace;  
167 - } else {  
168 -  
169 - CGSize size = [_titleArr[index].title sizeWithAttributes:@{NSFontAttributeName:self.titleView.elementFont}];  
170 - return size.width + 15;  
171 - }  
172 -}  
173 -  
174 -- (void)horizontalPickerView:(V8HorizontalPickerView *)picker didSelectElementAtIndex:(NSInteger)index  
175 -{  
176 - if (self.pageView.indexOfSelectedPage != index) {  
177 - [self.pageView selectPageAtIndex:index animated:YES];  
178 - }  
179 -}  
180 -  
181 -#pragma mark - UIScrollViewDelegate  
182 -  
183 -- (void)scrollViewDidScroll:(UIScrollView *)scrollView  
184 -{  
185 -  
186 - if (self.titleView.currentSelectedIndex != self.pageView.indexOfSelectedPage) {  
187 -  
188 - [self.titleView scrollToElement:self.pageView.indexOfSelectedPage animated:YES];  
189 -  
190 - }  
191 - [self.pageView scrollViewDidScroll];  
192 -  
193 -}  
194 -  
195 -#pragma mark - MHPagingScrollViewDelegate  
196 -  
197 -- (NSUInteger)numberOfPagesInPagingScrollView:(MHPagingScrollView *)pagingScrollView  
198 -{  
199 - return _titleArr.count;  
200 -}  
201 -  
202 -- (UIView *)pagingScrollView:(MHPagingScrollView *)pagingScrollView pageForIndex:(NSUInteger)index  
203 -{  
204 - LVCHomePageListModel *model = [_titleArr safetyObjectAtIndex:index];  
205 -  
206 - if ([model.type isEqualToString:@"channel"] || [model.type isEqualToString:@"tuijian"]) {  
207 -  
208 - LVCChannelPagingView *channelView = (LVCChannelPagingView *)[pagingScrollView pageViewByIndex:index];  
209 - if (!channelView) {  
210 - channelView = [[LVCChannelPagingView alloc] initWithFrame:self.pageView.bounds];  
211 - channelView.model = _titleArr[index];  
212 - }  
213 - return channelView;  
214 -  
215 - } else if ([model.type isEqualToString:@"news"]) {  
216 -  
217 - UIView *view2 = [pagingScrollView pageViewByIndex:index];  
218 - if (!view2) {  
219 - view2 = [[UIView alloc] init];  
220 - }  
221 - view2.backgroundColor = [UIColor redColor];  
222 - return view2;  
223 -// LVCUGCLiveListView *liveListView = (LVCUGCLiveListView *)[pagingScrollView pageViewByIndex:index];  
224 -// if (!liveListView) {  
225 -// liveListView = [[LVCUGCLiveListView alloc] initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT - 114)];  
226 -// } else {  
227 -// [liveListView isNeedToRefresh];  
228 -// }  
229 -// liveListView.scrollToTop = YES;  
230 -// return liveListView;  
231 - } else if ([model.type isEqualToString:@"link"]) {  
232 -  
233 - UIView *view1 = [pagingScrollView pageViewByIndex:index];  
234 - if (!view1) {  
235 - view1 = [[UIView alloc] init];  
236 - }  
237 - view1.backgroundColor = [UIColor yellowColor];  
238 - return view1;  
239 - }  
240 -  
241 - return nil;  
242 -}  
243 -  
244 -#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
245 -  
246 -#pragma mark - GetMetohd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
247 -- (V8HorizontalPickerView *)titleView  
248 -{  
249 - if (!_titleView) {  
250 -  
251 - _titleView = [[V8HorizontalPickerView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-120, 44) home:YES];  
252 - _titleView.textColor = [UIColor colorWithHexString:@"#7e7e7d"];  
253 - _titleView.selectedTextColor = [UIColor blackColorCNLive];  
254 - _titleView.delegate = self;  
255 - _titleView.dataSource = self;  
256 - _titleView.elementFont = [UIFont boldSystemFontOfSize:18];  
257 - _titleView.scrollView.scrollsToTop = NO;  
258 -  
259 - }  
260 - return _titleView;  
261 -}  
262 -  
263 -- (MHPagingScrollView *)pageView  
264 -{  
265 - if (!_pageView) {  
266 - _pageView = [[MHPagingScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-49)];  
267 - _pageView.pagingDelegate = self;  
268 - _pageView.delegate = self;  
269 - _pageView.scrollsToTop = NO;  
270 - _pageView.bounces = NO;  
271 - }  
272 - return _pageView;  
273 -}  
274 -  
275 -- (UIButton *)reloadBtn  
276 -{  
277 - if (!_reloadBtn) {  
278 - _reloadBtn = [self getReloadBtn];  
279 - _reloadBtn.frame = self.view.bounds;  
280 - [_reloadBtn addTarget:self action:@selector(getChannelList) forControlEvents:UIControlEventTouchUpInside];  
281 - [_reloadBtn addSubview:self.reloadLab];  
282 - }  
283 - return _reloadBtn;  
284 -}  
285 -  
286 -- (UILabel *)reloadLab  
287 -{  
288 - if (!_reloadLab) {  
289 - _reloadLab = [self getReloadLab];  
290 - _reloadLab.frame = CGRectMake(0, self.view.height/2+30, self.view.width, 20);  
291 - }  
292 - return _reloadLab;  
293 -}  
294 -  
295 -// ------------------------------------------分割线---------------------------------------------------  
296 -  
297 -- (nonnull UIButton *)getReloadBtn  
298 -{  
299 - UIButton *reloadBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
300 - reloadBtn.frame = CGRectMake(0, 0, 200, 200);  
301 - [reloadBtn setImage:[UIImage imageNamed:@"load_04"] forState:UIControlStateNormal];  
302 - [reloadBtn setImage:[UIImage imageNamed:@"load_04"] forState:UIControlStateHighlighted];  
303 - return reloadBtn;  
304 -}  
305 -  
306 -- (nonnull UILabel *)getReloadLab  
307 -{  
308 - UILabel *reloadLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 130, 200, 20)];  
309 - reloadLab.textAlignment = NSTextAlignmentCenter;  
310 - reloadLab.textColor = [UIColor colorWithHexString:@"bdbcbc"];  
311 - return reloadLab;  
312 -}  
313 -  
314 -- (void)didReceiveMemoryWarning {  
315 - [super didReceiveMemoryWarning];  
316 - // Dispose of any resources that can be recreated.  
317 -}  
318 -  
319 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCMainHeaderCollectionReusableView.h deleted 100644 → 0
1 -//  
2 -// LVCMainHeaderCollectionReusableView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCMainHeaderCollectionReusableView : UICollectionReusableView  
12 -  
13 -@property (nonatomic, assign) BOOL live;  
14 -@property (nonatomic, strong) NSArray *banners;  
15 -@property (nonatomic, strong) NSArray *marquees;  
16 -  
17 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCMainHeaderCollectionReusableView.m deleted 100644 → 0
1 -//  
2 -// LVCMainHeaderCollectionReusableView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCMainHeaderCollectionReusableView.h"  
10 -#import "JBBannerView.h"  
11 -#import "JBAutoRollTableView.h"  
12 -  
13 -@interface LVCMainHeaderCollectionReusableView()  
14 -  
15 -@property (nonatomic, strong) JBBannerView *bannerView;  
16 -@property (nonatomic, strong) JBAutoRollTableView *rollTableView;  
17 -  
18 -@end  
19 -  
20 -@implementation LVCMainHeaderCollectionReusableView  
21 -  
22 -- (instancetype)initWithFrame:(CGRect)frame  
23 -{  
24 - self = [super initWithFrame:frame];  
25 - if (self) {  
26 - [self addSubview:self.bannerView];  
27 - [self addSubview:self.rollTableView];  
28 - }  
29 - return self;  
30 -}  
31 -  
32 -- (void)setBanners:(NSArray *)banners {  
33 -  
34 - if (_banners != banners) {  
35 - _banners = banners;  
36 - }  
37 - _bannerView.bannerArray = banners;  
38 -}  
39 -  
40 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
41 -- (JBBannerView *)bannerView {  
42 -  
43 - if (!_bannerView) {  
44 - _bannerView = [[JBBannerView alloc] initWithFrame:CGRectMake(0, 70, self.bounds.size.width, self.bounds.size.width / 2 + 10)];  
45 - _bannerView.backgroundColor = [UIColor purpleColor];  
46 - }  
47 - return _bannerView;  
48 -}  
49 -  
50 -- (JBAutoRollTableView *)rollTableView {  
51 -  
52 - if (!_rollTableView) {  
53 - _rollTableView = [[JBAutoRollTableView alloc] initWithFrame:CGRectMake(39, 250, KScreenWidth-40-25+6, 36) style:UITableViewStylePlain];  
54 -  
55 - NSMutableArray *arrayM = [[NSMutableArray alloc] init];  
56 - ProgramModel *model1 = [[ProgramModel alloc] init];  
57 - model1.title = @"嘉华大厦十大富豪榜";  
58 - [arrayM addObject:model1];  
59 - ProgramModel *model2 = [[ProgramModel alloc] init];  
60 - model2.title = @"思考很久案发的感受";  
61 - [arrayM addObject:model2];  
62 - ProgramModel *model3 = [[ProgramModel alloc] init];  
63 - model3.title = @"模拟电路罚款金额虽";  
64 - [arrayM addObject:model3];  
65 - _rollTableView.news = arrayM;  
66 - }  
67 - return _rollTableView;  
68 -}  
69 -  
70 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCMainHorizontalCollectionViewCell.h deleted 100644 → 0
1 -//  
2 -// LVCMainHorizontalCollectionViewCell.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCMainHorizontalCollectionViewCell : UICollectionViewCell  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCMainHorizontalCollectionViewCell.m deleted 100644 → 0
1 -//  
2 -// LVCMainHorizontalCollectionViewCell.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCMainHorizontalCollectionViewCell.h"  
10 -  
11 -@implementation LVCMainHorizontalCollectionViewCell  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCSectionHeaderCollectionReusableView.h deleted 100644 → 0
1 -//  
2 -// LVCSectionHeaderCollectionReusableView.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import <UIKit/UIKit.h>  
10 -  
11 -@interface LVCSectionHeaderCollectionReusableView : UICollectionReusableView  
12 -  
13 -@property (nonatomic, strong)LVCChannelDetailModel *model;  
14 -@property (nonatomic, assign)BOOL sort;  
15 -@property (nonatomic, assign)BOOL live;  
16 -@property (nonatomic, strong)NSString *channelId;  
17 -@property (nonatomic, strong)NSString *channelName;  
18 -  
19 -@end  
LiveVideoCloud/Classes/Sections/HomePageSections/LVCSectionHeaderCollectionReusableView.m deleted 100644 → 0
1 -//  
2 -// LVCSectionHeaderCollectionReusableView.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/20.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCSectionHeaderCollectionReusableView.h"  
10 -  
11 -@interface LVCSectionHeaderCollectionReusableView()  
12 -  
13 -@property (nonatomic, strong)UIButton *button;  
14 -@property (nonatomic, strong)UIImageView *arrow;  
15 -  
16 -@end  
17 -  
18 -@implementation LVCSectionHeaderCollectionReusableView  
19 -  
20 -- (instancetype)initWithFrame:(CGRect)frame  
21 -{  
22 - self = [super initWithFrame:frame];  
23 - if (self) {  
24 - UIView *intervalView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, 6)];  
25 - intervalView.backgroundColor = [UIColor backgroundColor];  
26 - [self addSubview:intervalView];  
27 - [self addSubview:self.button];  
28 - [self addSubview:self.arrow];  
29 - }  
30 - return self;  
31 -}  
32 -  
33 -- (void)setModel:(LVCChannelDetailModel *)model {  
34 - if (_model != model) {  
35 - _model = model;  
36 - }  
37 - [self.button setTitle:[NSString stringWithFormat:@" %@", model.title] forState:UIControlStateNormal];  
38 -}  
39 -  
40 -#pragma mark - ACtion !!!!!!!!!!!!!!!!!!!!!!!!!!  
41 -- (void)buttonAction {  
42 -  
43 - NSLog(@"跳转更多!!!!!!!!!!!!!!");  
44 -}  
45 -  
46 -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!  
47 -- (UIButton *)button {  
48 -  
49 - if (!_button) {  
50 - _button = [UIButton buttonWithType:UIButtonTypeCustom];  
51 - _button.frame = CGRectMake(0, 6, self.frame.size.width, 47);  
52 - [_button setTitleColor:[UIColor blackColorCNLive] forState:UIControlStateNormal];  
53 - _button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;  
54 - [_button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];  
55 - _button.titleLabel.font = [UIFont boldSystemFontOfSize:18];  
56 - }  
57 - return _button;  
58 -}  
59 -  
60 -- (UIImageView *)arrow {  
61 -  
62 - if (!_arrow) {  
63 - _arrow = [[UIImageView alloc] initWithFrame:CGRectMake(KScreenWidth-5-15, 19, 15, 21)];  
64 - _arrow.image = [UIImage imageNamed:@"gengduo"];  
65 - }  
66 - return _arrow;  
67 -}  
68 -  
69 -@end  
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCMineViewController.m
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 37
38 self.btnLeft.hidden = YES; 38 self.btnLeft.hidden = YES;
39 39
40 - [UINavigationBar appearance].translucent = NO; 40 + [UINavigationBar appearance].translucent = YES;
41 } 41 }
42 42
43 - (void)setNavi 43 - (void)setNavi
LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m
@@ -102,7 +102,6 @@ @@ -102,7 +102,6 @@
102 [self cancelVerBtnChange]; 102 [self cancelVerBtnChange];
103 }]; 103 }];
104 } 104 }
105 - return;  
106 break; 105 break;
107 case RegisterTypeMessageQuicklyLogin: 106 case RegisterTypeMessageQuicklyLogin:
108 { 107 {
LiveVideoCloud/Classes/Sections/PGCSections/Controller/LVCTelevisioController.m
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 #import "LVCTelevisioController.h" 9 #import "LVCTelevisioController.h"
10 #import "LVCTelevisionModel.h" 10 #import "LVCTelevisionModel.h"
11 #import "LVCTelevisionCell.h" 11 #import "LVCTelevisionCell.h"
  12 +#import "LVCLivePlayerController.h"
12 13
13 @interface LVCTelevisioController ()<UITableViewDelegate, UITableViewDataSource> 14 @interface LVCTelevisioController ()<UITableViewDelegate, UITableViewDataSource>
14 { 15 {
@@ -26,6 +27,7 @@ @@ -26,6 +27,7 @@
26 // Do any additional setup after loading the view. 27 // Do any additional setup after loading the view.
27 self.view.backgroundColor = [UIColor whiteColor]; 28 self.view.backgroundColor = [UIColor whiteColor];
28 self.navigationItem.title = @"直播"; 29 self.navigationItem.title = @"直播";
  30 +
29 _channelsModelArray = [[NSMutableArray alloc] init]; 31 _channelsModelArray = [[NSMutableArray alloc] init];
30 32
31 [self.view addSubview:self.tableView]; 33 [self.view addSubview:self.tableView];
@@ -67,6 +69,8 @@ @@ -67,6 +69,8 @@
67 if (!cell) { 69 if (!cell) {
68 cell = [tableView dequeueReusableCellWithIdentifier:cellId]; 70 cell = [tableView dequeueReusableCellWithIdentifier:cellId];
69 } 71 }
  72 + cell.selectionStyle = UITableViewCellSelectionStyleNone;
  73 +
70 LVCTelevisionModel *model = [_channelsModelArray objectAtIndex:indexPath.row]; 74 LVCTelevisionModel *model = [_channelsModelArray objectAtIndex:indexPath.row];
71 cell.model = model; 75 cell.model = model;
72 return cell; 76 return cell;
@@ -74,7 +78,14 @@ @@ -74,7 +78,14 @@
74 } 78 }
75 79
76 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 80 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
77 - 81 +
  82 + LVCTelevisionModel *model = _channelsModelArray[indexPath.row];
  83 + self.hidesBottomBarWhenPushed = YES;
  84 + LVCLivePlayerController *playVC = [[LVCLivePlayerController alloc] init];
  85 + playVC.model = model;
  86 + self.navigationController.navigationBar.hidden = YES;
  87 + [self.navigationController pushViewController:playVC animated:YES];
  88 + self.hidesBottomBarWhenPushed = NO;
78 } 89 }
79 90
80 #pragma mark - 91 #pragma mark -
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCPlayer.m
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 @interface LVCPlayer ()<UIGestureRecognizerDelegate,LVCPlayerLoadingViewDelegate> 13 @interface LVCPlayer ()<UIGestureRecognizerDelegate,LVCPlayerLoadingViewDelegate>
14 { 14 {
15 LVCTelevisionModel *_model; 15 LVCTelevisionModel *_model;
  16 + BOOL _noInternet;
16 } 17 }
17 18
18 @property (nonatomic, strong) CNLiveMoviePlayerController *player; 19 @property (nonatomic, strong) CNLiveMoviePlayerController *player;
@@ -44,6 +45,7 @@ @@ -44,6 +45,7 @@
44 [self initPlayerWithModel:model]; 45 [self initPlayerWithModel:model];
45 46
46 [self addSubview:self.contentView]; 47 [self addSubview:self.contentView];
  48 + [self.contentView addSubview:self.loadingView];
47 [self.contentView addSubview:self.bottomBgView]; 49 [self.contentView addSubview:self.bottomBgView];
48 [self.contentView addSubview:self.topBgView]; 50 [self.contentView addSubview:self.topBgView];
49 [self.bottomBgView addSubview:self.playOrPauseBtn]; 51 [self.bottomBgView addSubview:self.playOrPauseBtn];
@@ -51,7 +53,6 @@ @@ -51,7 +53,6 @@
51 [self.topBgView addSubview:self.titleLab]; 53 [self.topBgView addSubview:self.titleLab];
52 [self.topBgView addSubview:self.barrageSwitch]; 54 [self.topBgView addSubview:self.barrageSwitch];
53 [self addSubview:self.backBtn]; 55 [self addSubview:self.backBtn];
54 - [self.contentView addSubview:self.loadingView];  
55 [self.contentView addSubview:self.editBtn]; 56 [self.contentView addSubview:self.editBtn];
56 [self.contentView addGestureRecognizer:self.singleTap]; 57 [self.contentView addGestureRecognizer:self.singleTap];
57 58
@@ -66,6 +67,8 @@ @@ -66,6 +67,8 @@
66 { 67 {
67 /* 68 /*
68 */ 69 */
  70 + [self.loadingView setLVCPlayerStatus:LVCPlayerStatusStartLoading];
  71 +
69 NSString *channelId = [NSString stringWithFormat:@"82_%@",model.mediaId]; 72 NSString *channelId = [NSString stringWithFormat:@"82_%@",model.mediaId];
70 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:channelId anchorStatus:NO authSuccess:^{ 73 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:channelId anchorStatus:NO authSuccess:^{
71 [self addObservers]; 74 [self addObservers];
@@ -212,7 +215,7 @@ @@ -212,7 +215,7 @@
212 #pragma mark - LVCPlayerLoadingViewDelegate 215 #pragma mark - LVCPlayerLoadingViewDelegate
213 - (void)retryBtnClick 216 - (void)retryBtnClick
214 { 217 {
215 - [_loadingView startLoading]; 218 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStartLoading];
216 [_player reload:nil]; 219 [_player reload:nil];
217 } 220 }
218 221
@@ -252,6 +255,12 @@ @@ -252,6 +255,12 @@
252 name:MPMoviePlayerPlaybackStateDidChangeNotification 255 name:MPMoviePlayerPlaybackStateDidChangeNotification
253 object:nil]; 256 object:nil];
254 257
  258 + //网络状态改变
  259 + [[NSNotificationCenter defaultCenter] addObserver:self
  260 + selector:@selector(moviePlayerNetworkStatusChange:)
  261 + name:MPMoviePlayerNetworkStatusChangeNotification
  262 + object:nil];
  263 +
255 [[NSNotificationCenter defaultCenter] addObserver:self 264 [[NSNotificationCenter defaultCenter] addObserver:self
256 selector:@selector(appResignActive:) 265 selector:@selector(appResignActive:)
257 name:UIApplicationWillResignActiveNotification 266 name:UIApplicationWillResignActiveNotification
@@ -267,10 +276,13 @@ @@ -267,10 +276,13 @@
267 { 276 {
268 if (_player) { 277 if (_player) {
269 MPMovieLoadState loadState = _player.loadState; 278 MPMovieLoadState loadState = _player.loadState;
270 - if ((loadState & MPMovieLoadStatePlaythroughOK) != 0) { 279 + if ((loadState & MPMovieLoadStatePlaythroughOK) != 0) { //加载完成
  280 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStopLoading];
  281 +
271 NSLog(@"loadStateDidChange: MPMovieLoadStatePlaythroughOK: %d\n", (int)loadState); 282 NSLog(@"loadStateDidChange: MPMovieLoadStatePlaythroughOK: %d\n", (int)loadState);
272 283
273 - } else if ((loadState & MPMovieLoadStateStalled) != 0) { 284 + } else if ((loadState & MPMovieLoadStateStalled) != 0) { //视频正在加载中
  285 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStartLoading];
274 NSLog(@"loadStateDidChange: MPMovieLoadStateStalled: %d\n", (int)loadState); 286 NSLog(@"loadStateDidChange: MPMovieLoadStateStalled: %d\n", (int)loadState);
275 287
276 } else { 288 } else {
@@ -284,28 +296,13 @@ @@ -284,28 +296,13 @@
284 if (_player) { 296 if (_player) {
285 int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; 297 int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
286 if (MPMovieFinishReasonPlaybackError == reason) { 298 if (MPMovieFinishReasonPlaybackError == reason) {
287 - _loadingView.hidden = NO; 299 + if (_noInternet) {
  300 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusNoNetwork];
  301 + } else {
  302 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStopError];
  303 + }
288 } else { 304 } else {
289 - _loadingView.hidden = YES;  
290 - }  
291 -  
292 - switch (reason)  
293 - {  
294 - case MPMovieFinishReasonPlaybackEnded:  
295 - NSLog(@"playbackStateDidChange: MPMovieFinishReasonPlaybackEnded: %d\n", reason);  
296 - break;  
297 -  
298 - case MPMovieFinishReasonUserExited:  
299 - NSLog(@"playbackStateDidChange: MPMovieFinishReasonUserExited: %d\n", reason);  
300 - break;  
301 -  
302 - case MPMovieFinishReasonPlaybackError:  
303 - NSLog(@"playbackStateDidChange: MPMovieFinishReasonPlaybackError: %d\n", reason);  
304 - break;  
305 -  
306 - default:  
307 - NSLog(@"playbackPlayBackDidFinish: ???: %d\n", reason);  
308 - break; 305 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStopLoading];
309 } 306 }
310 } 307 }
311 } 308 }
@@ -323,68 +320,66 @@ @@ -323,68 +320,66 @@
323 320
324 if (_player.playbackState == MPMoviePlaybackStatePlaying) { 321 if (_player.playbackState == MPMoviePlaybackStatePlaying) {
325 _playOrPauseBtn.selected = YES; 322 _playOrPauseBtn.selected = YES;
326 - _loadingView.hidden = YES; 323 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStopLoading];
  324 + } else if (_player.playbackState == MPMoviePlaybackStateSeekingForward || _player.playbackState == MPMoviePlaybackStateSeekingBackward) {
  325 + [_loadingView setLVCPlayerStatus:LVCPlayerStatusStartLoading];
327 } else { 326 } else {
328 _playOrPauseBtn.selected = NO; 327 _playOrPauseBtn.selected = NO;
329 } 328 }
330 329
331 NSLog(@"moviePlayBackStateDidChange : %ld",(long)_player.playbackState); 330 NSLog(@"moviePlayBackStateDidChange : %ld",(long)_player.playbackState);
  331 +
  332 + }
  333 +}
  334 +
  335 +//网络状态监听
  336 +- (void)moviePlayerNetworkStatusChange:(NSNotification *)notify {
  337 + int currStatus = [[[notify userInfo] valueForKey:MPMoviePlayerCurrNetworkStatusUserInfoKey] intValue];
  338 + int lastStatus = [[[notify userInfo] valueForKey:MPMoviePlayerLastNetworkStatusUserInfoKey] intValue];
  339 +
  340 + if (currStatus == CNLiveNotReachable) {
  341 + _noInternet = YES;
  342 + } else {
  343 + _noInternet = NO;
  344 + }
  345 +
  346 + NSLog(@"network reachable change from %@ to %@\n", [self netStatus2Str:lastStatus], [self netStatus2Str:currStatus]);
  347 +}
332 348
333 - /*  
334 - switch (_player.playbackState) {  
335 - case MPMoviePlaybackStateStopped: {  
336 -  
337 - [self changePlayBtnStatus:NO];  
338 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateStopped");  
339 - break;  
340 - }  
341 - case MPMoviePlaybackStatePlaying: {  
342 - [self changePlayBtnStatus:YES];  
343 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePlaying");  
344 - break;  
345 - }  
346 - case MPMoviePlaybackStatePaused:  
347 - [self changePlayBtnStatus:NO];  
348 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePaused");  
349 - break;  
350 - case MPMoviePlaybackStateInterrupted:  
351 - [self changePlayBtnStatus:NO];  
352 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateInterrupted");  
353 - break;  
354 - case MPMoviePlaybackStateSeekingForward:  
355 - [self changePlayBtnStatus:NO];  
356 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateSeekingForward");  
357 - break;  
358 - case MPMoviePlaybackStateSeekingBackward:  
359 - [self changePlayBtnStatus:NO];  
360 - NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateSeekingBackward");  
361 - break;  
362 - default:  
363 - [self changePlayBtnStatus:NO];  
364 - NSLog(@"moviePlayBackStateDidChange : %ld", _player.playbackState);  
365 - break;  
366 - }  
367 - */ 349 +- (NSString *) netStatus2Str:(CNLiveNetworkStatus)networkStatus{
  350 + NSString *netString = nil;
  351 +
  352 + if(networkStatus == CNLiveNotReachable){
  353 + netString = @"NO INTERNET";
  354 + } else if(networkStatus == CNLiveReachableViaWiFi) {
  355 + netString = @"WIFI";
  356 + } else if(networkStatus == CNLiveReachableViaWWAN) {
  357 + netString = @"WWAN";
  358 + } else {
  359 + netString = @"Unknown";
368 } 360 }
  361 + return netString;
369 } 362 }
370 363
371 - (void)appResignActive:(NSNotification *)noti 364 - (void)appResignActive:(NSNotification *)noti
372 { 365 {
373 - [_player pause]; 366 + if (_player.playbackState == MPMoviePlaybackStatePlaying) {
  367 + [_player pause];
  368 + }
374 } 369 }
375 370
376 - (void)appBecomeActive:(NSNotification *)noti 371 - (void)appBecomeActive:(NSNotification *)noti
377 { 372 {
378 - [_player play]; 373 + if (_player.playbackState == MPMoviePlaybackStatePaused) {
  374 + [_player play];
  375 + }
379 } 376 }
380 377
381 #pragma mark - 378 #pragma mark -
382 #pragma mark - public 379 #pragma mark - public
383 - (void)stopPlaying 380 - (void)stopPlaying
384 { 381 {
385 - if (_player.isPlaying) {  
386 - [_player stop];  
387 - } 382 + [_player stop];
388 _player = nil; 383 _player = nil;
389 384
390 if (_timer) { 385 if (_timer) {
@@ -430,9 +425,7 @@ @@ -430,9 +425,7 @@
430 }]; 425 }];
431 426
432 [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) { 427 [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) {
433 - make.center.equalTo(self.contentView);  
434 - make.width.mas_equalTo(100);  
435 - make.height.mas_equalTo(80); 428 + make.top.left.right.bottom.equalTo(self);
436 }]; 429 }];
437 430
438 [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) { 431 [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -617,6 +610,7 @@ @@ -617,6 +610,7 @@
617 { 610 {
618 if (!_loadingView) { 611 if (!_loadingView) {
619 _loadingView = [[LVCPlayerLoadingView alloc] init]; 612 _loadingView = [[LVCPlayerLoadingView alloc] init];
  613 + _loadingView.delegate = self;
620 } 614 }
621 return _loadingView; 615 return _loadingView;
622 } 616 }
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCPlayerLoadingView.h
@@ -8,6 +8,13 @@ @@ -8,6 +8,13 @@
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 10
  11 +typedef NS_ENUM(NSUInteger, LVCPlayerStatus) {
  12 + LVCPlayerStatusStartLoading = 0,
  13 + LVCPlayerStatusStopLoading,
  14 + LVCPlayerStatusStopError,
  15 + LVCPlayerStatusNoNetwork
  16 +};
  17 +
11 @protocol LVCPlayerLoadingViewDelegate <NSObject> 18 @protocol LVCPlayerLoadingViewDelegate <NSObject>
12 19
13 - (void)retryBtnClick; //点击重试 20 - (void)retryBtnClick; //点击重试
@@ -18,6 +25,8 @@ @@ -18,6 +25,8 @@
18 25
19 @property (nonatomic, assign) id<LVCPlayerLoadingViewDelegate> delegate; 26 @property (nonatomic, assign) id<LVCPlayerLoadingViewDelegate> delegate;
20 27
  28 +- (void)setLVCPlayerStatus:(LVCPlayerStatus)status;
  29 +
21 - (void)startLoading; //开始加载 30 - (void)startLoading; //开始加载
22 31
23 - (void)stopLoading; //停止加载 32 - (void)stopLoading; //停止加载
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCPlayerLoadingView.m
@@ -57,6 +57,41 @@ @@ -57,6 +57,41 @@
57 _loadingLab.hidden = YES; 57 _loadingLab.hidden = YES;
58 } 58 }
59 59
  60 +- (void)setLVCPlayerStatus:(LVCPlayerStatus)status {
  61 +
  62 + switch (status) {
  63 + case LVCPlayerStatusStartLoading:
  64 + _loadingLab.text = @"努力加载中...";
  65 + [_loadingView startAnimating];
  66 + _retryBtn.hidden = YES;
  67 + _loadingLab.hidden = NO;
  68 + break;
  69 +
  70 + case LVCPlayerStatusStopLoading:
  71 + _loadingLab.hidden = YES;
  72 + [_loadingView stopAnimating];
  73 + _retryBtn.hidden = YES;
  74 + break;
  75 +
  76 + case LVCPlayerStatusStopError:
  77 + _loadingLab.text = @"抱歉,播放异常,请重试";
  78 + [_loadingView stopAnimating];
  79 + _retryBtn.hidden = NO;
  80 + _loadingLab.hidden = NO;
  81 + break;
  82 +
  83 + case LVCPlayerStatusNoNetwork:
  84 + _loadingLab.text = @"网络连接中断,请确认网络连接后重试";
  85 + [_loadingView stopAnimating];
  86 + _retryBtn.hidden = NO;
  87 + _loadingLab.hidden = NO;
  88 + break;
  89 +
  90 + default:
  91 + break;
  92 + }
  93 +}
  94 +
60 #pragma mark - 95 #pragma mark -
61 #pragma mark - action 96 #pragma mark - action
62 - (void)retryBtnAction 97 - (void)retryBtnAction
@@ -73,23 +108,22 @@ @@ -73,23 +108,22 @@
73 { 108 {
74 109
75 [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) { 110 [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) {
76 - make.centerX.mas_equalTo(self.width/2);  
77 - make.top.mas_equalTo(0);  
78 - }];  
79 -  
80 - [self.loadingLab mas_makeConstraints:^(MASConstraintMaker *make) {  
81 - make.left.mas_equalTo(0);  
82 - make.top.mas_equalTo(40);  
83 - make.width.equalTo(self);  
84 - make.height.mas_equalTo(40); 111 + make.centerY.equalTo(self).offset(-20);
  112 + make.centerX.equalTo(self);
85 }]; 113 }];
86 114
87 [self.retryBtn mas_makeConstraints:^(MASConstraintMaker *make) { 115 [self.retryBtn mas_makeConstraints:^(MASConstraintMaker *make) {
88 make.width.mas_equalTo(70); 116 make.width.mas_equalTo(70);
89 - make.height.mas_equalTo(40);  
90 - make.center.equalTo(self); 117 + make.height.mas_equalTo(35);
  118 + make.centerY.equalTo(self).offset(-20);
  119 + make.centerX.equalTo(self);
91 }]; 120 }];
92 121
  122 + [self.loadingLab mas_makeConstraints:^(MASConstraintMaker *make) {
  123 + make.left.right.mas_equalTo(0);
  124 + make.top.equalTo(self.loadingView.hidden ? self.loadingView.mas_bottom : self.retryBtn.mas_bottom).with.offset(15);
  125 + make.height.mas_equalTo(30);
  126 + }];
93 } 127 }
94 128
95 #pragma mark - 129 #pragma mark -
@@ -119,11 +153,11 @@ @@ -119,11 +153,11 @@
119 if (!_retryBtn) { 153 if (!_retryBtn) {
120 _retryBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 154 _retryBtn = [UIButton buttonWithType:UIButtonTypeCustom];
121 [_retryBtn setTitle:@"重试" forState:UIControlStateNormal]; 155 [_retryBtn setTitle:@"重试" forState:UIControlStateNormal];
122 - [_retryBtn setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal]; 156 + [_retryBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
123 _retryBtn.hidden = YES; 157 _retryBtn.hidden = YES;
124 _retryBtn.layer.cornerRadius = 10; 158 _retryBtn.layer.cornerRadius = 10;
125 _retryBtn.layer.masksToBounds = YES; 159 _retryBtn.layer.masksToBounds = YES;
126 - _retryBtn.layer.borderColor = [UIColor yellowColor].CGColor; 160 + _retryBtn.layer.borderColor = [UIColor whiteColor].CGColor;
127 _retryBtn.layer.borderWidth = 1; 161 _retryBtn.layer.borderWidth = 1;
128 [_retryBtn addTarget:self action:@selector(retryBtnAction) forControlEvents:UIControlEventTouchUpInside]; 162 [_retryBtn addTarget:self action:@selector(retryBtnAction) forControlEvents:UIControlEventTouchUpInside];
129 } 163 }
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionCell.h
@@ -12,5 +12,6 @@ @@ -12,5 +12,6 @@
12 @interface LVCTelevisionCell : UITableViewCell 12 @interface LVCTelevisionCell : UITableViewCell
13 13
14 @property (nonatomic, strong) LVCTelevisionModel *model; 14 @property (nonatomic, strong) LVCTelevisionModel *model;
  15 +@property (nonatomic, strong) ProgramModel *programModel;
15 16
16 @end 17 @end
LiveVideoCloud/Classes/Sections/PGCSections/View/LVCTelevisionCell.m
@@ -35,6 +35,12 @@ @@ -35,6 +35,12 @@
35 35
36 } 36 }
37 37
  38 +- (void)setProgramModel:(ProgramModel *)programModel {
  39 +
  40 + [_imgView sd_setImageWithURL:[NSURL URLWithString:programModel.img] placeholderImage:[UIImage imageNamed:@"load_03"]];
  41 + _titleLab.text = programModel.title;
  42 +}
  43 +
38 #pragma mark - 44 #pragma mark -
39 #pragma mark - getter 45 #pragma mark - getter
40 - (UIImageView *)imgView 46 - (UIImageView *)imgView
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCUGCLiveListView.h renamed to LiveVideoCloud/Classes/Sections/UGCSections/View/LVCUGCLiveListView.h
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCUGCLiveListView.m renamed to LiveVideoCloud/Classes/Sections/UGCSections/View/LVCUGCLiveListView.m
LiveVideoCloud/Classes/Sections/HomePageSections/LVCHomePageViewController.h renamed to LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerController.h
1 // 1 //
2 -// LVCHomePageViewController.h 2 +// LVCVodPlayerController.h
3 // LiveVideoCloud 3 // LiveVideoCloud
4 // 4 //
5 -// Created by cnliveJunBo on 17/6/9. 5 +// Created by cnliveJunBo on 17/6/27.
6 // Copyright © 2017年 cnlive. All rights reserved. 6 // Copyright © 2017年 cnlive. All rights reserved.
7 // 7 //
8 8
9 #import "BaseViewController.h" 9 #import "BaseViewController.h"
10 10
11 -@interface LVCHomePageViewController : BaseViewController 11 +@interface LVCVodPlayerController : BaseViewController
12 12
13 @end 13 @end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerController.m 0 → 100644
  1 +//
  2 +// LVCVodPlayerController.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/6/27.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "LVCVodPlayerController.h"
  10 +
  11 +@interface LVCVodPlayerController ()
  12 +
  13 +@end
  14 +
  15 +@implementation LVCVodPlayerController
  16 +
  17 +- (void)viewDidLoad {
  18 + [super viewDidLoad];
  19 +
  20 + self.view.backgroundColor = [UIColor whiteColor];
  21 +}
  22 +
  23 +- (void)didReceiveMemoryWarning {
  24 + [super didReceiveMemoryWarning];
  25 + // Dispose of any resources that can be recreated.
  26 +}
  27 +
  28 +@end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerListController.h
@@ -10,4 +10,8 @@ @@ -10,4 +10,8 @@
10 10
11 @interface LVCVodPlayerListController : UIViewController 11 @interface LVCVodPlayerListController : UIViewController
12 12
  13 +@property (nonatomic, assign)BOOL scrollToTop;
  14 +
  15 +- (void)isNeedToRefresh;
  16 +
13 @end 17 @end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerListController.m
@@ -7,16 +7,21 @@ @@ -7,16 +7,21 @@
7 // 7 //
8 8
9 #import "LVCVodPlayerListController.h" 9 #import "LVCVodPlayerListController.h"
  10 +#import "LVCTelevisionCell.h"
  11 +#import "LVCRequestFailedView.h"
  12 +#import "LVCVodPlayerController.h"
10 13
11 static NSString *vodCellId = @"vodCellId"; 14 static NSString *vodCellId = @"vodCellId";
12 15
13 -@interface LVCVodPlayerListController ()<UITableViewDelegate, UITableViewDataSource> { 16 +@interface LVCVodPlayerListController ()<UITableViewDelegate, UITableViewDataSource, LVCRequestFailedViewDelegate> {
14 17
15 AFHTTPRequestOperation *_operation; 18 AFHTTPRequestOperation *_operation;
16 NSMutableArray *_programArrayM; 19 NSMutableArray *_programArrayM;
  20 + long long _timestamp;
17 } 21 }
18 22
19 @property (nonatomic, strong)UITableView *tableView; 23 @property (nonatomic, strong)UITableView *tableView;
  24 +@property (nonatomic, strong) LVCRequestFailedView *failedView; //请求失败提示view
20 25
21 @end 26 @end
22 27
@@ -28,10 +33,18 @@ static NSString *vodCellId = @&quot;vodCellId&quot;; @@ -28,10 +33,18 @@ static NSString *vodCellId = @&quot;vodCellId&quot;;
28 self.navigationItem.title = @"点播"; 33 self.navigationItem.title = @"点播";
29 self.view.backgroundColor = [UIColor whiteColor]; 34 self.view.backgroundColor = [UIColor whiteColor];
30 _programArrayM = [[NSMutableArray alloc] init]; 35 _programArrayM = [[NSMutableArray alloc] init];
  36 +
  37 + [self.tableView addSubview:self.failedView];
  38 + [self.view addSubview:self.tableView];
  39 +
  40 + _timestamp = [[self timestamp] longLongValue];
  41 + [self.tableView.header beginRefreshing];
31 } 42 }
32 43
33 - (void)requestVodPlayerList { 44 - (void)requestVodPlayerList {
34 45
  46 + _failedView.hidden = YES;
  47 +
35 NSString *uid; 48 NSString *uid;
36 if ([UserTools isLogin]) { 49 if ([UserTools isLogin]) {
37 uid = [UserInformationModel manager].uid; 50 uid = [UserInformationModel manager].uid;
@@ -64,15 +77,33 @@ static NSString *vodCellId = @&quot;vodCellId&quot;; @@ -64,15 +77,33 @@ static NSString *vodCellId = @&quot;vodCellId&quot;;
64 } 77 }
65 } 78 }
66 } 79 }
  80 + _timestamp = [[self timestamp] longLongValue];
  81 + [self.tableView.header endRefreshing];
67 [self.tableView reloadData]; 82 [self.tableView reloadData];
68 83
69 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 84 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
70 85
71 NSLog(@"点播列表请求失败!"); 86 NSLog(@"点播列表请求失败!");
  87 + _timestamp = [[self timestamp] longLongValue];
  88 + [self.tableView.header endRefreshing];
  89 + if (_programArrayM.count == 0) {
  90 + _failedView.hidden = NO;
  91 + }
72 }]; 92 }];
73 } 93 }
74 94
75 #pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!!!!! 95 #pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!!!!!
  96 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  97 +
  98 + [tableView deselectRowAtIndexPath:indexPath animated:NO];
  99 +
  100 + LVCVodPlayerController *vc = [[LVCVodPlayerController alloc] init];
  101 + [self.navigationController pushViewController:vc animated:YES];
  102 +}
  103 +
  104 +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  105 + return SCREEN_WIDTH*9/16+40;
  106 +}
76 107
77 #pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!!! 108 #pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!!!
78 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 109 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
@@ -81,27 +112,82 @@ static NSString *vodCellId = @&quot;vodCellId&quot;; @@ -81,27 +112,82 @@ static NSString *vodCellId = @&quot;vodCellId&quot;;
81 112
82 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 113 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
83 114
84 - return nil; 115 + LVCTelevisionCell *cell = [tableView dequeueReusableCellWithIdentifier:vodCellId forIndexPath:indexPath];
  116 +
  117 + cell.programModel = _programArrayM[indexPath.row];
  118 + return cell;
  119 +}
  120 +
  121 +#pragma mark - LVCRequestFailedViewDelegate
  122 +- (void)reloadDataWithView:(LVCRequestFailedView *)view
  123 +{
  124 + [self.tableView.header beginRefreshing];
  125 + [self requestVodPlayerList];
85 } 126 }
86 127
87 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!! 128 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!
88 - (UITableView *)tableView { 129 - (UITableView *)tableView {
89 130
90 if (!_tableView) { 131 if (!_tableView) {
91 - _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 132 + _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - 50) style:UITableViewStylePlain];
92 _tableView.dataSource = self; 133 _tableView.dataSource = self;
93 _tableView.delegate = self; 134 _tableView.delegate = self;
94 _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 135 _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  136 + _tableView.showsHorizontalScrollIndicator = NO;
  137 + _tableView.scrollsToTop = YES;
  138 + _tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];
95 139
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]; 140 + [_tableView registerClass:[LVCTelevisionCell class] forCellReuseIdentifier:vodCellId];
101 } 141 }
102 return _tableView; 142 return _tableView;
103 } 143 }
104 144
  145 +- (LVCRequestFailedView *)failedView
  146 +{
  147 + if (!_failedView) {
  148 + _failedView = [[LVCRequestFailedView alloc] initWithFrame:CGRectMake(0, 0, 150, 100) words:@"您的网络不太顺畅哦~"];
  149 + _failedView.center = self.tableView.center;
  150 + _failedView.delegate = self;
  151 + _failedView.hidden = YES;
  152 + }
  153 + return _failedView;
  154 +}
  155 +
  156 +#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  157 +- (void)refresh {
  158 +
  159 + [self requestVodPlayerList];
  160 +}
  161 +
  162 +- (NSString *)timestamp {
  163 +
  164 + NSString *stamp = @"";
  165 +
  166 + stamp = [NSString stringWithFormat:@"%.3f", [[NSDate date] timeIntervalSince1970]];
  167 + stamp = [stamp stringByReplacingOccurrencesOfString:@"." withString:@""];
  168 +
  169 + return stamp;
  170 +}
  171 +
  172 +- (void)autoRefresh {
  173 +
  174 + [self requestVodPlayerList];
  175 +}
  176 +
  177 +- (void)isNeedToRefresh {
  178 +
  179 + long long timestamp = [[self timestamp] longLongValue];
  180 + if (timestamp-_timestamp > 180000) {
  181 + [self.tableView.header beginRefreshing];
  182 + }
  183 +}
  184 +
  185 +- (void)setScrollToTop:(BOOL)scrollToTop {
  186 +
  187 + _scrollToTop = scrollToTop;
  188 + self.tableView.scrollsToTop = scrollToTop;
  189 +}
  190 +
105 #pragma mark ------------------------------ 分割线 ---------------------------------------------- 191 #pragma mark ------------------------------ 分割线 ----------------------------------------------
106 - (NSDictionary *)addParameters:(NSDictionary *)dict { 192 - (NSDictionary *)addParameters:(NSDictionary *)dict {
107 193
LiveVideoCloud/PrefixHeader.pch
@@ -29,47 +29,32 @@ @@ -29,47 +29,32 @@
29 #import <CNLivePlayerSDK/CNLiveWebcastManager.h> 29 #import <CNLivePlayerSDK/CNLiveWebcastManager.h>
30 #import <CNLiveMsgTools/CNLiveMsgManager.h> 30 #import <CNLiveMsgTools/CNLiveMsgManager.h>
31 #import <CNLiveChatManager/CNLiveChatManager.h> 31 #import <CNLiveChatManager/CNLiveChatManager.h>
32 - #import "V8HorizontalPickerView.h"  
33 - #import "MHPagingScrollView.h"  
34 - #import "LVCHomePageListModel.h"  
35 - #import "LVCBannerAndMarqueeModel.h"  
36 -#include "LVCChannelDetailModel.h"  
37 -#import "LVCBqWqXgModel.h"  
38 -#import "LVCCommentModel.h"  
39 -  
40 -#import <CNLiveUserSystemSDK/CNLiveUserSystemCenter.h>  
41 -  
42 -#import "Common.h"  
43 -#import "MJExtension.h"//  
44 -#import "CNLiveMacro.h"//  
45 -#import "NSNumber+ScaleHeight.h"//高度适配  
46 -#import "AFNetworking.h"  
47 -#import "UIImageView+WebCache.h"  
48 -//#import "NSDictionary+Safety.h"  
49 -#import "Tools.h"  
50 -#import "MJRefresh.h"  
51 -#import <ImageIO/ImageIO.h>//  
52 -#import "UIImage+ScaleImageSize.h"//  
53 -//#import "CNRefreshHeader.h"//  
54 -#import "UIView+ViewController.h"  
55 -//#import "MBProgressHUD.h"  
56 -#import "SevenSwitch.h"  
57 -#import "DESUtility.h"  
58 -//#import "CNLiveXMPPMessage.h"  
59 -#import "UserInformationModel.h"  
60 -//#import "EncryptAndDecrypt.h"  
61 -//#import "Utility.h"  
62 -//#import "CNLiveShare.h"  
63 -//#import "ShareObject.h"  
64 -#import "NSString+UrlEncode.h"  
65 -#import "NSDictionary+Safety.h"  
66 -#import "UserTools.h"  
67 -#import "UIImage+GIF.h"  
68 -#import "ZXUIKit.h"//  
69 -#import "UIButton+createButton.h"//  
70 -#import "ProgramModel.h"  
71 -#import "WXApi.h"  
72 -#import "WeiboSDK.h" 32 + #import "LVCCommentModel.h"
  33 + #import <CNLiveUserSystemSDK/CNLiveUserSystemCenter.h>
  34 +
  35 + #import "Common.h"
  36 + #import "MJExtension.h"
  37 + #import "CNLiveMacro.h"
  38 + #import "NSNumber+ScaleHeight.h"
  39 + #import "AFNetworking.h"
  40 + #import "UIImageView+WebCache.h"
  41 + #import "Tools.h"
  42 + #import "MJRefresh.h"
  43 + #import <ImageIO/ImageIO.h>
  44 + #import "UIImage+ScaleImageSize.h"
  45 + #import "UIView+ViewController.h"
  46 + #import "SevenSwitch.h"
  47 + #import "DESUtility.h"
  48 + #import "UserInformationModel.h"
  49 + #import "NSString+UrlEncode.h"
  50 + #import "NSDictionary+Safety.h"
  51 + #import "UserTools.h"
  52 + #import "UIImage+GIF.h"
  53 + #import "ZXUIKit.h"
  54 + #import "UIButton+createButton.h"
  55 + #import "ProgramModel.h"
  56 + #import "WXApi.h"
  57 + #import "WeiboSDK.h"
73 58
74 59
75 #if TARGET_OS_IPHONE 60 #if TARGET_OS_IPHONE
LiveVideoCloud/Resource/JsonFile.json deleted 100644 → 0
1 -{"banner":[{"mediaId":"88da3d45ad2f2745c586ea51b32b2121a6","subTitle":"大型现代原创木偶剧《飞吧 丹顶鹤》","title":"原创木偶剧飞吧丹顶鹤","picType":"small","img":"http://y1.cnliveimg.com:8080/image/itv/2016/0601/da3d45ad2f2745c586ea51b32b2121a6_100.jpg","docID":"618405","vipFlag":"0","type":"program","url":"http://www.cnlive.com/liveshow/v_gyytqnbqgu.html"},{"mediaId":"liveshow","subTitle":"最打动人心的主题音乐故事访谈","title":"liveshow直播:我的音乐故事","picType":"small","img":"http://yweb3.cnliveimg.com/img/cnlive/160129105318359_583.jpg","docID":"408481","vipFlag":"0","type":"live","url":"http://live.cnlive.com/liveshow.html"},{"mediaId":"vhd","subTitle":"热点大事件,萌宠陪你开心唠!体验不一样的资讯直播,戳这里!","title":"侃侃总动员","picType":"small","img":"http://yweb1.cnliveimg.com/img/cnlive/160323165036485_383.jpg","docID":"411530","vipFlag":"0","type":"live","url":"http://live.cnlive.com/vhd.html"}],"marquee":[{"mediaId":"dongnanweishi","subTitle":"海峡西岸经济区主流媒体","title":"东南卫视","picType":"small","img":"http://y1.cnliveimg.com:8080/img/cnlive/public/141110143521312_163.jpg","docID":"410681","vipFlag":"0","type":"live","url":"http://live.cnlive.com/dongnanweishi.html"}],"channels":[{"cid":"live_/tctv/","title":"自主特色直播","channelType":"H","programs":[{"mediaId":"61ca3833365f4fe2975c7db183b61892","subTitle":"互动直播测试","title":"侃侃总动员","desc":"主持人与虚拟萌物合作直播","picType":"small","currentPlay":"神秘原始部落制木乃伊","img":"http://yweb1.cnliveimg.com/img/cnlive/160118114000423_284.jpg","docID":"573134","vipFlag":"0","type":"album","itemId":"581018","url":"http://www.cnlive.com/news/v_gu3tgmjtgq.html","nextPlay":"地球上最热的地狱盐矿"},{"mediaId":"xbxjy","subTitle":"小笨熊教育","title":"小笨熊教育","desc":"为3至12岁儿童精心打造优质的教育频道,包含经典古诗学习,国学教育智力培养,行为教育,文化教育,行为规范、安全教育等内容,其中也不少的精彩的童话故事和家长和儿童之间可以互动的亲子互动内容。节目高清流畅,内容全部正向有趣,是目前最好的儿童教育频道。","picType":"small","currentPlay":"不小心割破手指该怎么办","img":"http://yweb2.cnliveimg.com/cnlive/public/160530111952623_945.jpg","docID":"617301","vipFlag":"0","type":"live","itemId":"595600","url":"http://live.cnlive.com/xbxjy.html","nextPlay":"上下楼梯要注意什么"},{"mediaId":"liveshow","subTitle":"最打动人心的主题音乐故事访谈","title":"LiveShow","desc":"最震撼的演唱会直播、最打动人心的主题音乐故事访谈、最搞笑的剧场话剧直播!","picType":"small","currentPlay":"20151020我的音乐故事音乐小神兽汪苏泷","img":"http://yweb0.cnliveimg.com/cnlive/public/150417133551285_693.png","docID":"408481","vipFlag":"0","type":"live","itemId":"581019","url":"http://live.cnlive.com/liveshow.html","nextPlay":"20151113摇滚男孩王晓天做客音乐故事!"},{"mediaId":"news","subTitle":"","title":"快新闻","desc":"时政、社会、财经、文体、奇趣等快新闻,最热门、最新鲜、最快捷,互动直达!","picType":"small","currentPlay":"南非已开始退出国际刑事法院","img":"http://yweb1.cnliveimg.com/img/cnlive/160121113653827_867.png","docID":"285697","vipFlag":"0","type":"live","itemId":"581021","url":"http://live.cnlive.com/news.html","nextPlay":"少年宿舍坠楼而亡疑在校受辱"},{"mediaId":"eyule","subTitle":"","title":"e娱乐","desc":"热辣娱文、新鲜速递、聊电影、说大片,特色直播精彩呈现!","picType":"small","currentPlay":"网络博主斥港媒为谢霆锋洗白","img":"http://yweb2.cnliveimg.com/img/cnlive/160121113659992_585.png","docID":"408480","vipFlag":"0","type":"live","itemId":"581022","url":"http://live.cnlive.com/eyule.html","nextPlay":"袁姗姗陈晓面对潜规则超淡定"},{"mediaId":"chaotiyu","subTitle":"","title":"潮体育","desc":"赛事直播、最新体坛资讯,全方位扫描热点体坛人物、绝色花边!","picType":"small","currentPlay":"情暖你我2017爱在马城","img":"http://yweb3.cnliveimg.com/img/cnlive/160121113706887_696.png","docID":"285698","vipFlag":"0","type":"live","itemId":"581023","url":"http://live.cnlive.com/chaotiyu.html","nextPlay":"策马扬鞭!欢聚“乐在马城”"},{"mediaId":"xuanhanyu","subTitle":"韩剧韩片韩综 有你想看的!","title":"炫韩娱","desc":"韩国动态、思密达帮帮团、搞笑综艺等,第一知晓韩国娱乐动态,尽在炫韩娱直播频道!","picType":"small","currentPlay":"尹施允被鬼吓金赛纶霸气镇场","img":"http://yweb0.cnliveimg.com/cnlive/public/150417133341123_878.png","docID":"408487","vipFlag":"0","type":"live","itemId":"581024","url":"http://live.cnlive.com/xuanhanyu.html","nextPlay":"Eric徐贤真约会玩绑架被抓!"},{"mediaId":"inyuetai","subTitle":"音乐爱好者的完美聚集地","title":"in乐台","desc":"新歌抢线、MV鉴赏、明星访谈,明星亲临现场诉说音乐故事。大咖们邀你一起感受听觉上的饕餮盛宴。","picType":"small","currentPlay":"新单《WeDontTalkAnymore》","img":"http://yweb1.cnliveimg.com/cnlive/public/150417144750615_185.png","docID":"285696","vipFlag":"0","type":"live","itemId":"581025","url":"http://live.cnlive.com/inyuetai.html","nextPlay":"酷玩《AHeadFullOfDreams》"}]},{"cid":"live_/CIBN/","title":"CIBN","channelType":"H","programs":[{"mediaId":"cibn_lvyou","subTitle":"荟聚全球当红明星,最新的音乐资讯","title":"CIBN嗨播","desc":"荟聚全球当红明星,最新的音乐资讯,劲爆的演唱会现场,包罗万象的热门音乐排行榜,足不出户悦享饕餮音乐盛宴。","picType":"small","currentPlay":"夏季音乐季《梦幻与激情》","img":"http://yweb0.cnliveimg.com/cnlive/public/170428170445759_292.jpg","docID":"427049","vipFlag":"0","type":"live","itemId":"689292","url":"http://live.cnlive.com/cibn_lvyou.html","nextPlay":"SNH48 GROUP 2017年度大型青春励志纪录片《我心翱翔》"},{"mediaId":"cibn_dianying","subTitle":"CIBN电影频道","title":"CIBN电影频道","desc":"","picType":"small","currentPlay":"电话谋杀案","img":"http://yweb2.cnliveimg.com/img/cnlive/160120143835091_965.jpg","docID":"427031","vipFlag":"0","type":"live","itemId":"421082","url":"http://live.cnlive.com/cibn_dianying.html","nextPlay":"内心引力 预告片"},{"mediaId":"cibn_weidianying","subTitle":"CIBN微电影","title":"CIBN微电影","desc":"","picType":"small","currentPlay":"二次元 10 探店 拉面 上","img":"http://yweb3.cnliveimg.com/img/cnlive/160120143842769_360.jpg","docID":"427050","vipFlag":"0","type":"live","itemId":"421083","url":"http://live.cnlive.com/cibn_weidianying.html","nextPlay":"脂肪君-02-人鱼线"},{"mediaId":"cibn_rebo","subTitle":"CIBN热播剧场","title":"CIBN热播剧场","desc":"","picType":"small","currentPlay":"一粒红尘10","img":"http://yweb1.cnliveimg.com/img/cnlive/160120143857458_721.jpg","docID":"427032","vipFlag":"0","type":"live","itemId":"421085","url":"http://live.cnlive.com/cibn_rebo.html","nextPlay":"碧生源常箐茶"},{"mediaId":"cibn_jilu","subTitle":"CIBN纪录","title":"CIBN纪录","desc":"","picType":"small","currentPlay":"赞比西河 生命之源","img":"http://yweb2.cnliveimg.com/img/cnlive/160120143906855_603.jpg","docID":"427048","vipFlag":"0","type":"live","itemId":"421086","url":"http://live.cnlive.com/cibn_jilu.html","nextPlay":"CAN TV 广告片"},{"mediaId":"cibn_zongyi","subTitle":"CIBN综艺","title":"CIBN综艺","desc":"","picType":"small","currentPlay":"金古珍藏 频道宣传片","img":"http://yweb3.cnliveimg.com/img/cnlive/160120143913782_912.jpg","docID":"427046","vipFlag":"0","type":"live","itemId":"421087","url":"http://live.cnlive.com/cibn_zongyi.html","nextPlay":"匠作之传播善与美的白瓷菩萨造像"}]}],"errorMessage":"数据加载成功","errorCode":"0"}  
2 \ No newline at end of file 0 \ No newline at end of file