Commit d503181000e5a48f7cf9aa0582157926ee5d510f

Authored by 张旭
2 parents 4d52ddc8 80f706e3

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

# Conflicts:
#	LiveVideoCloud/AppDelegate/AppDelegate.m
Showing 24 changed files with 526 additions and 114 deletions
LiveVideoCloud.xcodeproj/project.pbxproj
@@ -234,9 +234,9 @@ @@ -234,9 +234,9 @@
234 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2501E8247D400ED084E /* ChatBarrageManager.m */; }; 234 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2501E8247D400ED084E /* ChatBarrageManager.m */; };
235 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */; }; 235 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */; };
236 D2B7B2571E8261EF00ED084E /* ChatBarrOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */; }; 236 D2B7B2571E8261EF00ED084E /* ChatBarrOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */; };
  237 + D2C6A8BF1F04998D00543EFA /* LVCVodListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2C6A8BE1F04998D00543EFA /* LVCVodListModel.m */; };
237 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; }; 238 D2CBC13B1ECC157A00E00279 /* LVCVerifyLiveAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */; };
238 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; }; 239 D2D7D18D1E8A581000217771 /* timg.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D2D7D18C1E8A581000217771 /* timg.jpeg */; };
239 - D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */; };  
240 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; }; 240 D2EBC8711F02108000F198FB /* LiveListService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8661F02108000F198FB /* LiveListService.m */; };
241 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; }; 241 D2EBC8721F02108000F198FB /* LVCLiveActivityInfoService.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC8681F02108000F198FB /* LVCLiveActivityInfoService.m */; };
242 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; }; 242 D2EBC8741F02108000F198FB /* LVCUGCLiveListController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EBC86C1F02108000F198FB /* LVCUGCLiveListController.m */; };
@@ -766,11 +766,11 @@ @@ -766,11 +766,11 @@
766 D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageView.m; sourceTree = "<group>"; }; 766 D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageView.m; sourceTree = "<group>"; };
767 D2B7B2551E8261EF00ED084E /* ChatBarrOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrOperation.h; sourceTree = "<group>"; }; 767 D2B7B2551E8261EF00ED084E /* ChatBarrOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrOperation.h; sourceTree = "<group>"; };
768 D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrOperation.m; sourceTree = "<group>"; }; 768 D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrOperation.m; sourceTree = "<group>"; };
  769 + D2C6A8BD1F04998D00543EFA /* LVCVodListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVodListModel.h; sourceTree = "<group>"; };
  770 + D2C6A8BE1F04998D00543EFA /* LVCVodListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVodListModel.m; sourceTree = "<group>"; };
769 D2CBC1391ECC157A00E00279 /* LVCVerifyLiveAuthService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LVCVerifyLiveAuthService.h; path = ../LVCVerifyLiveAuthService.h; sourceTree = "<group>"; }; 771 D2CBC1391ECC157A00E00279 /* LVCVerifyLiveAuthService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LVCVerifyLiveAuthService.h; path = ../LVCVerifyLiveAuthService.h; sourceTree = "<group>"; };
770 D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LVCVerifyLiveAuthService.m; path = ../LVCVerifyLiveAuthService.m; sourceTree = "<group>"; }; 772 D2CBC13A1ECC157A00E00279 /* LVCVerifyLiveAuthService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LVCVerifyLiveAuthService.m; path = ../LVCVerifyLiveAuthService.m; sourceTree = "<group>"; };
771 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; }; 773 D2D7D18C1E8A581000217771 /* timg.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = timg.jpeg; sourceTree = "<group>"; };
772 - D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCCommentModel.h; sourceTree = "<group>"; };  
773 - D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCCommentModel.m; sourceTree = "<group>"; };  
774 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; }; 774 D2EBC8651F02108000F198FB /* LiveListService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListService.h; sourceTree = "<group>"; };
775 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; }; 775 D2EBC8661F02108000F198FB /* LiveListService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListService.m; sourceTree = "<group>"; };
776 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; }; 776 D2EBC8671F02108000F198FB /* LVCLiveActivityInfoService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveActivityInfoService.h; sourceTree = "<group>"; };
@@ -1178,8 +1178,8 @@ @@ -1178,8 +1178,8 @@
1178 81A482FC1E88B0130097A80A /* Model */ = { 1178 81A482FC1E88B0130097A80A /* Model */ = {
1179 isa = PBXGroup; 1179 isa = PBXGroup;
1180 children = ( 1180 children = (
1181 - D2EBC8551F01FF9200F198FB /* LVCCommentModel.h */,  
1182 - D2EBC8561F01FF9200F198FB /* LVCCommentModel.m */, 1181 + D2C6A8BD1F04998D00543EFA /* LVCVodListModel.h */,
  1182 + D2C6A8BE1F04998D00543EFA /* LVCVodListModel.m */,
1183 ); 1183 );
1184 path = Model; 1184 path = Model;
1185 sourceTree = "<group>"; 1185 sourceTree = "<group>";
@@ -2280,6 +2280,7 @@ @@ -2280,6 +2280,7 @@
2280 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */, 2280 D2029CA01E6EADE10027CD92 /* NSObject+MJProperty.m in Sources */,
2281 4BD855FE1EBACD530082061D /* AFSecurityPolicy.m in Sources */, 2281 4BD855FE1EBACD530082061D /* AFSecurityPolicy.m in Sources */,
2282 D2029CB51E6EADE10027CD92 /* SDiOSVersion.m in Sources */, 2282 D2029CB51E6EADE10027CD92 /* SDiOSVersion.m in Sources */,
  2283 + D2C6A8BF1F04998D00543EFA /* LVCVodListModel.m in Sources */,
2283 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */, 2284 4B45CE981EB86A760079AFB7 /* UILabel+createLabel.m in Sources */,
2284 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */, 2285 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */,
2285 D22831091E77D8D500627701 /* GiftModel.m in Sources */, 2286 D22831091E77D8D500627701 /* GiftModel.m in Sources */,
@@ -2341,7 +2342,6 @@ @@ -2341,7 +2342,6 @@
2341 4BD856181EBAD35C0082061D /* NSDictionary+Safety.m in Sources */, 2342 4BD856181EBAD35C0082061D /* NSDictionary+Safety.m in Sources */,
2342 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */, 2343 4BD856011EBACD530082061D /* AFURLResponseSerialization.m in Sources */,
2343 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */, 2344 D2575C4A1E7685DE00E3A8FC /* UIView+Bubbling.m in Sources */,
2344 - D2EBC8571F01FF9200F198FB /* LVCCommentModel.m in Sources */,  
2345 D2EBC88B1F02361600F198FB /* LVCUGCLiveListView.m in Sources */, 2345 D2EBC88B1F02361600F198FB /* LVCUGCLiveListView.m in Sources */,
2346 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */, 2346 D2029CA61E6EADE10027CD92 /* MJRefreshHeader.m in Sources */,
2347 D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */, 2347 D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */,
LiveVideoCloud/AppDelegate/AppDelegate.m
@@ -28,12 +28,15 @@ @@ -28,12 +28,15 @@
28 //APP 启动是初始化直播SDK 28 //APP 启动是初始化直播SDK
29 [[CNLiveWebcastManager manager] initWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:self.isTestEnvironment]; 29 [[CNLiveWebcastManager manager] initWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:self.isTestEnvironment];
30 30
31 - //初始化聊天SDK并连接服务器  
32 - [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:UserAppKey appId:UserAppId isTestEnvironment:self.isTestEnvironment]; 31 + // 初始化评论功能
  32 + [[CNLiveCommentManager sharedCNLiveCommentManager] registerWithAppId:@"60_irn9cdak77" appKey:@"a425987ebc86e352b3373c25d5bd082d0cc248b4043028" isTestEnvironment:YES];
33 33
34 //初始化用户SDK 34 //初始化用户SDK
35 [CNLiveUserSystemCenter setAppId:UserAppId appKey:UserAppKey appSecret:UserAppSceret isTestEnvironment:self.isTestEnvironment]; 35 [CNLiveUserSystemCenter setAppId:UserAppId appKey:UserAppKey appSecret:UserAppSceret isTestEnvironment:self.isTestEnvironment];
36 36
  37 + //初始化聊天SDK并连接服务器
  38 + [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:UserAppKey appId:UserAppId isTestEnvironment:self.isTestEnvironment];
  39 +
37 /* 40 /*
38 [[CNLiveChatManager sharedCNLiveChatManager] connectServerSuccess:^{ 41 [[CNLiveChatManager sharedCNLiveChatManager] connectServerSuccess:^{
39 NSLog(@"连接服务器-----success"); 42 NSLog(@"连接服务器-----success");
LiveVideoCloud/Classes/Sections/UGCSections/Controller/LVCUGCLivePlayerController.m
@@ -28,6 +28,7 @@ @@ -28,6 +28,7 @@
28 LVCUGCPlayerLoadingView *_thirdLoadView; 28 LVCUGCPlayerLoadingView *_thirdLoadView;
29 UIImage *_blurImage; 29 UIImage *_blurImage;
30 NSTimer *_currentTimer;// 更新当前播放时间 30 NSTimer *_currentTimer;// 更新当前播放时间
  31 + LVCUGCLivePlayerModel *_bgModel;
31 } 32 }
32 33
33 @property (nonatomic, strong) UIView *viewOne; 34 @property (nonatomic, strong) UIView *viewOne;
@@ -78,32 +79,36 @@ @@ -78,32 +79,36 @@
78 [self.view addSubview:self.viewThird]; 79 [self.view addSubview:self.viewThird];
79 80
80 if ([_model.activityStatus isEqualToString:@"1"]) { 81 if ([_model.activityStatus isEqualToString:@"1"]) {
81 - [self addLiveBaseView]; 82 + [self addLiveBaseViewWithChannelId:_model.channelId];
82 } 83 }
83 - 84 + _bgModel = _model;
84 [self.view addSubview:self.bgView]; 85 [self.view addSubview:self.bgView];
85 86
86 if ([_model.activityStatus isEqualToString:@"0"]) { 87 if ([_model.activityStatus isEqualToString:@"0"]) {
87 88
88 _bgView.anchorStatus = 4; 89 _bgView.anchorStatus = 4;
  90 + _bgView.model = _model;
89 91
90 } else if ([_model.activityStatus isEqualToString:@"4"]) { 92 } else if ([_model.activityStatus isEqualToString:@"4"]) {
91 93
92 _bgView.anchorStatus = 5; 94 _bgView.anchorStatus = 5;
  95 + _bgView.model = _model;
93 96
94 } else if ([_model.activityStatus isEqualToString:@"-2"]) { 97 } else if ([_model.activityStatus isEqualToString:@"-2"]) {
95 98
96 _bgView.anchorStatus = 6; 99 _bgView.anchorStatus = 6;
  100 + _bgView.model = _model;
97 } 101 }
98 } 102 }
99 103
100 -- (void)addLiveBaseView 104 +- (void)addLiveBaseViewWithChannelId:(NSString *)channelId
101 { 105 {
102 if (_vodPlayerQuitBtn) { 106 if (_vodPlayerQuitBtn) {
103 [_vodPlayerQuitBtn removeFromSuperview]; 107 [_vodPlayerQuitBtn removeFromSuperview];
104 } 108 }
105 [_liveBaseView removeFromSuperview]; 109 [_liveBaseView removeFromSuperview];
106 [_viewSecond addSubview:self.liveBaseView ]; 110 [_viewSecond addSubview:self.liveBaseView ];
  111 + self.liveBaseView.roomId = channelId;
107 [_liveBaseView addGestureRecognizer:_pan]; 112 [_liveBaseView addGestureRecognizer:_pan];
108 } 113 }
109 114
@@ -251,7 +256,7 @@ @@ -251,7 +256,7 @@
251 [_liveBaseView removeFromSuperview]; 256 [_liveBaseView removeFromSuperview];
252 [_viewSecond addSubview:self.vodPlayerQuitBtn]; 257 [_viewSecond addSubview:self.vodPlayerQuitBtn];
253 _currentTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timeChange) userInfo:nil repeats:YES]; 258 _currentTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
254 - 259 + _bgModel = _playArray[_index];
255 _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithVId:_playArray[_index].activityId 260 _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithVId:_playArray[_index].activityId
256 authSuccess:^{ 261 authSuccess:^{
257 262
@@ -271,7 +276,7 @@ @@ -271,7 +276,7 @@
271 276
272 } else if ([_playArray[_index].activityStatus isEqualToString:@"1"]) { 277 } else if ([_playArray[_index].activityStatus isEqualToString:@"1"]) {
273 278
274 - [self addLiveBaseView]; 279 + [self addLiveBaseViewWithChannelId:_playArray[_index].channelId];
275 280
276 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:_playArray[_index].channelId anchorStatus:YES authSuccess:^{ 281 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:_playArray[_index].channelId anchorStatus:YES authSuccess:^{
277 282
@@ -297,14 +302,17 @@ @@ -297,14 +302,17 @@
297 } else if ([_playArray[_index].activityStatus isEqualToString:@"0"]) { 302 } else if ([_playArray[_index].activityStatus isEqualToString:@"0"]) {
298 303
299 _bgView.anchorStatus = 4; 304 _bgView.anchorStatus = 4;
  305 + _bgView.model = _playArray[_index];
300 306
301 } else if ([_playArray[_index].activityStatus isEqualToString:@"4"]) { 307 } else if ([_playArray[_index].activityStatus isEqualToString:@"4"]) {
302 308
303 _bgView.anchorStatus = 5; 309 _bgView.anchorStatus = 5;
  310 + _bgView.model = _playArray[_index];
304 311
305 } else if ([_playArray[_index].activityStatus isEqualToString:@"-2"]) { 312 } else if ([_playArray[_index].activityStatus isEqualToString:@"-2"]) {
306 313
307 _bgView.anchorStatus = 6; 314 _bgView.anchorStatus = 6;
  315 + _bgView.model = _playArray[_index];
308 } 316 }
309 } 317 }
310 318
@@ -375,8 +383,8 @@ @@ -375,8 +383,8 @@
375 }]; 383 }];
376 384
377 } else if ([_playArray[_index].activityStatus isEqualToString:@"1"]) { 385 } else if ([_playArray[_index].activityStatus isEqualToString:@"1"]) {
378 - [self addLiveBaseView];  
379 - 386 + [self addLiveBaseViewWithChannelId:_playArray[_index].channelId];
  387 + _bgModel = _playArray[_index];
380 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:_playArray[_index].channelId anchorStatus:YES authSuccess:^{ 388 _player = [[CNLiveMoviePlayerController alloc] initLivePlayWithChannelId:_playArray[_index].channelId anchorStatus:YES authSuccess:^{
381 389
382 _player.videoDecoderMode = CNLiveMovieVideoDecoderMode_AUTO; 390 _player.videoDecoderMode = CNLiveMovieVideoDecoderMode_AUTO;
@@ -401,14 +409,17 @@ @@ -401,14 +409,17 @@
401 } else if ([_playArray[_index].activityStatus isEqualToString:@"0"]) { 409 } else if ([_playArray[_index].activityStatus isEqualToString:@"0"]) {
402 410
403 _bgView.anchorStatus = 4; 411 _bgView.anchorStatus = 4;
  412 + _bgView.model = _playArray[_index];
404 413
405 } else if ([_playArray[_index].activityStatus isEqualToString:@"4"]) { 414 } else if ([_playArray[_index].activityStatus isEqualToString:@"4"]) {
406 415
407 _bgView.anchorStatus = 5; 416 _bgView.anchorStatus = 5;
  417 + _bgView.model = _playArray[_index];
408 418
409 } else if ([_playArray[_index].activityStatus isEqualToString:@"-2"]) { 419 } else if ([_playArray[_index].activityStatus isEqualToString:@"-2"]) {
410 420
411 _bgView.anchorStatus = 6; 421 _bgView.anchorStatus = 6;
  422 + _bgView.model = _playArray[_index];
412 } 423 }
413 424
414 } 425 }
@@ -529,6 +540,7 @@ @@ -529,6 +540,7 @@
529 //1)播放完毕。 540 //1)播放完毕。
530 case MPMovieFinishReasonPlaybackEnded: 541 case MPMovieFinishReasonPlaybackEnded:
531 _bgView.anchorStatus = 3; 542 _bgView.anchorStatus = 3;
  543 + _bgView.model = _bgModel;
532 [_currentTimer invalidate]; 544 [_currentTimer invalidate];
533 NSLog(@"playbackStateDidChange: MPMovieFinishReasonPlaybackEnded: %d\n", reason); 545 NSLog(@"playbackStateDidChange: MPMovieFinishReasonPlaybackEnded: %d\n", reason);
534 break; 546 break;
@@ -630,6 +642,7 @@ @@ -630,6 +642,7 @@
630 - (void)anchorStatusChanged:(NSNotification *)notification // 获取主播状态通知 642 - (void)anchorStatusChanged:(NSNotification *)notification // 获取主播状态通知
631 { 643 {
632 _bgView.anchorStatus = _player.anchorStatus; 644 _bgView.anchorStatus = _player.anchorStatus;
  645 + _bgView.model = _bgModel;
633 } 646 }
634 647
635 648
LiveVideoCloud/Classes/Sections/UGCSections/View/LVCUGCBackgroundView.h
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
  10 +#import "LVCUGCLivePlayerModel.h"
10 11
11 @interface LVCUGCBackgroundView : UIView 12 @interface LVCUGCBackgroundView : UIView
12 13
@@ -14,4 +15,6 @@ @@ -14,4 +15,6 @@
14 15
15 @property (nonatomic, strong) UIButton *backButton; 16 @property (nonatomic, strong) UIButton *backButton;
16 17
  18 +@property (nonatomic, strong) LVCUGCLivePlayerModel *model;
  19 +
17 @end 20 @end
LiveVideoCloud/Classes/Sections/UGCSections/View/LVCUGCBackgroundView.m
@@ -73,6 +73,18 @@ @@ -73,6 +73,18 @@
73 } 73 }
74 } 74 }
75 75
  76 +- (void)setModel:(LVCUGCLivePlayerModel *)model {
  77 + _model = model;
  78 + if (model.extensionName.length > 0) {
  79 + _nicknameLabel.text = model.extensionName;
  80 + } else {
  81 + _nicknameLabel.text = @"我的昵称";
  82 + }
  83 + NSString *iconPath = [[NSBundle mainBundle] pathForResource:@"头像" ofType:@"jpg"];
  84 + UIImage *iconImage = [UIImage imageWithContentsOfFile:iconPath];
  85 + [_iconView sd_setImageWithURL:[NSURL URLWithString:model.extensionIcon] placeholderImage:iconImage];
  86 +}
  87 +
76 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 88 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
77 - (UIImageView *)iconView { 89 - (UIImageView *)iconView {
78 90
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerController.h
@@ -10,6 +10,6 @@ @@ -10,6 +10,6 @@
10 10
11 @interface LVCVodPlayerController : BaseViewController 11 @interface LVCVodPlayerController : BaseViewController
12 12
13 -@property (nonatomic, strong) ProgramModel *model; 13 +@property (nonatomic, strong) LVCVodListModel *model;
14 14
15 @end 15 @end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerController.m
@@ -75,7 +75,7 @@ typedef enum { @@ -75,7 +75,7 @@ typedef enum {
75 [self.view addSubview:self.commentView]; 75 [self.view addSubview:self.commentView];
76 } 76 }
77 77
78 -- (void)setModel:(ProgramModel *)model { 78 +- (void)setModel:(LVCVodListModel *)model {
79 _model = model; 79 _model = model;
80 80
81 //用来更新视频当前播放时间 81 //用来更新视频当前播放时间
@@ -88,7 +88,7 @@ typedef enum { @@ -88,7 +88,7 @@ typedef enum {
88 #pragma mark - 初始化播放器 88 #pragma mark - 初始化播放器
89 - (void)playerInitialize { 89 - (void)playerInitialize {
90 90
91 - _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithVId:self.model.mediaId 91 + _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithVId:self.model.vId
92 authSuccess:^{ 92 authSuccess:^{
93 93
94 _isPlaying = YES; 94 _isPlaying = YES;
@@ -591,16 +591,19 @@ typedef enum { @@ -591,16 +591,19 @@ typedef enum {
591 591
592 switch (_player.playbackState) { 592 switch (_player.playbackState) {
593 case MPMoviePlaybackStateStopped: { 593 case MPMoviePlaybackStateStopped: {
  594 + _isPlaying = NO;
594 [self changePlayBtnStatus:NO]; 595 [self changePlayBtnStatus:NO];
595 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateStopped"); 596 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStateStopped");
596 break; 597 break;
597 } 598 }
598 case MPMoviePlaybackStatePlaying: { 599 case MPMoviePlaybackStatePlaying: {
  600 + _isPlaying = YES;
599 [self changePlayBtnStatus:YES]; 601 [self changePlayBtnStatus:YES];
600 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePlaying"); 602 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePlaying");
601 break; 603 break;
602 } 604 }
603 case MPMoviePlaybackStatePaused: 605 case MPMoviePlaybackStatePaused:
  606 + _isPlaying = NO;
604 [self changePlayBtnStatus:NO]; 607 [self changePlayBtnStatus:NO];
605 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePaused"); 608 NSLog(@"moviePlayBackStateDidChange : MPMoviePlaybackStatePaused");
606 break; 609 break;
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerFullController.h
@@ -10,6 +10,4 @@ @@ -10,6 +10,4 @@
10 10
11 @interface LVCVodPlayerFullController : UIViewController 11 @interface LVCVodPlayerFullController : UIViewController
12 12
13 -@property (nonatomic, strong) ProgramModel *model;  
14 -  
15 @end 13 @end
LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCVodPlayerListController.m
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 #import "LVCTelevisionCell.h" 10 #import "LVCTelevisionCell.h"
11 #import "LVCRequestFailedView.h" 11 #import "LVCRequestFailedView.h"
12 #import "LVCVodPlayerController.h" 12 #import "LVCVodPlayerController.h"
  13 +#import "CommonCrypto/CommonDigest.h"
13 14
14 static NSString *vodCellId = @"vodCellId"; 15 static NSString *vodCellId = @"vodCellId";
15 16
@@ -45,41 +46,44 @@ static NSString *vodCellId = @&quot;vodCellId&quot;; @@ -45,41 +46,44 @@ static NSString *vodCellId = @&quot;vodCellId&quot;;
45 46
46 _failedView.hidden = YES; 47 _failedView.hidden = YES;
47 48
48 - NSString *uid;  
49 - if ([UserTools isLogin]) {  
50 - uid = [UserInformationModel manager].uid;  
51 - } else {  
52 - uid = [NSString stringWithFormat:@"%u", arc4random()%3];  
53 - }  
54 - NSString *tm = [NSString stringWithFormat:@"%u_%@", arc4random()%10, uid];  
55 -  
56 - NSDictionary *parameter = @{@"cid": @"82_news/",  
57 - @"page": [NSString stringWithFormat:@"%d", 1],  
58 - @"pagesize": @"15",  
59 - @"tm": tm};  
60 -  
61 - [[AFHTTPRequestOperationManager manager] GET:Newslist parameters:[self addParameters:parameter] success:^(AFHTTPRequestOperation *operation, id responseObject) { 49 + NSInteger time = [[NSDate date] timeIntervalSince1970];
  50 + NSString *timeString = [NSString stringWithFormat:@"%ld", (long)time];
  51 + NSMutableDictionary *parameter = [@{
  52 + @"appId" : UserAppId,
  53 + @"pageNumber": @"1",
  54 + @"pagesize": @"10",
  55 + @"timestamp": timeString,
  56 + @"platform_id": [NSBundle mainBundle].bundleIdentifier
  57 + } mutableCopy];
  58 + NSString *string = [NSString stringWithFormat:@"%@&key=%@", [self sortParameters:parameter], UserAppKey];
  59 + NSString *signString = [[self sha1:string] uppercaseString];
  60 + [parameter setObject:signString forKey:@"sign"];
  61 +
  62 + NSString *vodListURL = @"http://api.cnlive.com/open/api2/vod_epg/getVodListInfo4App";
  63 + NSString *testVodListURL = @"http://test.open.cnlive.com/openapi/api2/vod_epg/getVodListInfo4App";
  64 +
  65 + [[AFHTTPRequestOperationManager manager] POST:testVodListURL parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
62 66
63 responseObject = [responseObject validatedDictionary]; 67 responseObject = [responseObject validatedDictionary];
64 -  
65 - if (responseObject[@"programs"] && [responseObject[@"programs"] isKindOfClass:[NSArray class]]) {  
66 -  
67 - for (NSDictionary *dic in responseObject[@"programs"]) {  
68 - ProgramModel *programModel = [ProgramModel modelWithDic:dic];  
69 - [_programArrayM addObject:programModel];  
70 - if (dic[@"comments"] && [dic[@"comments"] isKindOfClass:[NSArray class]] && [dic[@"comments"] count] > 0) {  
71 - NSMutableArray *comments = [[NSMutableArray alloc] init];  
72 - for (NSDictionary *commentDic in dic[@"comments"]) {  
73 - LVCCommentModel *commentModel = [LVCCommentModel modelWithDic:commentDic];  
74 - [comments addObject:commentModel];  
75 - }  
76 - [_programArrayM addObject:comments]; 68 + if ([responseObject[@"errorCode"] isEqualToString:@"0"]) {
  69 + if (responseObject[@"data"] && [responseObject[@"data"] isKindOfClass:[NSArray class]]) {
  70 +
  71 + for (NSDictionary *dic in responseObject[@"data"]) {
  72 + LVCVodListModel *vodListModel = [LVCVodListModel modelWithDic:dic];
  73 + [_programArrayM addObject:vodListModel];
77 } 74 }
78 } 75 }
  76 + _timestamp = [[self timestamp] longLongValue];
  77 + [self.tableView.header endRefreshing];
  78 + [self.tableView reloadData];
  79 + } else {
  80 + NSLog(@"点播列表请求失败!");
  81 + _timestamp = [[self timestamp] longLongValue];
  82 + [self.tableView.header endRefreshing];
  83 + if (_programArrayM.count == 0) {
  84 + _failedView.hidden = NO;
  85 + }
79 } 86 }
80 - _timestamp = [[self timestamp] longLongValue];  
81 - [self.tableView.header endRefreshing];  
82 - [self.tableView reloadData];  
83 87
84 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 88 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
85 89
@@ -190,20 +194,50 @@ static NSString *vodCellId = @&quot;vodCellId&quot;; @@ -190,20 +194,50 @@ static NSString *vodCellId = @&quot;vodCellId&quot;;
190 } 194 }
191 195
192 #pragma mark ------------------------------ 分割线 ---------------------------------------------- 196 #pragma mark ------------------------------ 分割线 ----------------------------------------------
193 -- (NSDictionary *)addParameters:(NSDictionary *)dict { 197 +//sha1加密
  198 +- (NSString*)sha1:(NSString *)string
  199 +{
  200 + NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
  201 +
  202 + uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  203 +
  204 + CC_SHA1(data.bytes, data.length, digest);
  205 +
  206 + NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
194 207
195 - if (![dict isKindOfClass:[NSDictionary class]]) {  
196 - return dict; 208 + for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
  209 + [output appendFormat:@"%02x", digest[i]];
  210 +
  211 + while ([[output substringToIndex:1] isEqualToString:@"0"]) {
  212 + output = [[NSMutableString alloc] initWithString:[output substringFromIndex:1]];
197 } 213 }
198 - if (!dict) {  
199 - return @{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion};  
200 - } else {  
201 - NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:dict];  
202 - [dic addEntriesFromDictionary:@{@"appid": JBAppId, @"plat": @"i", @"version": JBAppVersion}];  
203 - return [[NSDictionary alloc] initWithDictionary:dic]; 214 +
  215 + return output;
  216 +}
  217 +//参数排序
  218 +- (NSString *)sortParameters:(NSDictionary*)parameters
  219 +{
  220 + //对所有传入参数按照字段名的 ASCII 码从小到大排序
  221 + NSArray *keyArr=[parameters allKeys];
  222 + NSArray *arr = [keyArr sortedArrayUsingSelector:@selector(compare:)];
  223 +
  224 + NSMutableString *string1 = [[NSMutableString alloc]init];
  225 + for (int i=0; i<arr.count; i++) {
  226 +
  227 + NSString *parametersString = parameters[[arr objectAtIndex:i]];
  228 + if (parametersString.length > 0) {
  229 + [string1 appendString:[NSString stringWithFormat:@"%@=%@&",[arr objectAtIndex:i],parameters[[arr objectAtIndex:i]]]];
  230 + }
  231 + }
  232 +
  233 + if (string1.length > 0) {
  234 + [string1 deleteCharactersInRange:NSMakeRange(string1.length-1, 1)];
204 } 235 }
  236 +
  237 + return string1;
205 } 238 }
206 239
  240 +
207 - (void)didReceiveMemoryWarning { 241 - (void)didReceiveMemoryWarning {
208 [super didReceiveMemoryWarning]; 242 [super didReceiveMemoryWarning];
209 // Dispose of any resources that can be recreated. 243 // Dispose of any resources that can be recreated.
LiveVideoCloud/Classes/Sections/homeSections/Model/LVCCommentModel.h deleted 100644 → 0
1 -//  
2 -// LVCCommentModel.h  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "BaseModel.h"  
10 -  
11 -@interface LVCCommentModel : BaseModel  
12 -  
13 -@property (nonatomic, strong)NSString *content;  
14 -@property (nonatomic, strong)NSString *uid;  
15 -@property (nonatomic, strong)NSString *facepath;  
16 -@property (nonatomic, strong)NSString *nick;  
17 -  
18 -@end  
LiveVideoCloud/Classes/Sections/homeSections/Model/LVCCommentModel.m deleted 100644 → 0
1 -//  
2 -// LVCCommentModel.m  
3 -// LiveVideoCloud  
4 -//  
5 -// Created by cnliveJunBo on 17/6/27.  
6 -// Copyright © 2017年 cnlive. All rights reserved.  
7 -//  
8 -  
9 -#import "LVCCommentModel.h"  
10 -  
11 -@implementation LVCCommentModel  
12 -  
13 -@end  
LiveVideoCloud/Classes/Sections/homeSections/Model/LVCVodListModel.h 0 → 100644
  1 +//
  2 +// LVCVodListModel.h
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/6/29.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "BaseModel.h"
  10 +
  11 +@interface LVCVodListModel : BaseModel
  12 +
  13 +@property (nonatomic ,copy) NSString * _Nullable type;
  14 +@property (nonatomic ,copy) NSString * _Nullable vId;
  15 +@property (nonatomic ,copy) NSString * _Nullable img;
  16 +@property (nonatomic ,copy) NSString * _Nullable subTitle;
  17 +@property (nonatomic ,copy) NSString * _Nullable rates;
  18 +@property (nonatomic ,copy) NSString * _Nullable desc;
  19 +@property (nonatomic ,copy) NSString * _Nullable tag;
  20 +@property (nonatomic ,copy) NSString * _Nullable title;
  21 +@property (nonatomic ,copy) NSString * _Nullable category;
  22 +
  23 +@end
LiveVideoCloud/Classes/Sections/homeSections/Model/LVCVodListModel.m 0 → 100644
  1 +//
  2 +// LVCVodListModel.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/6/29.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "LVCVodListModel.h"
  10 +
  11 +@implementation LVCVodListModel
  12 +
  13 +- (void)loadModel
  14 +{
  15 + [super loadModel];
  16 +
  17 + [LVCVodListModel mj_setupReplacedKeyFromPropertyName:^NSDictionary *{ return @{
  18 + @"desc":@"description"
  19 + };}];
  20 +
  21 +}
  22 +
  23 +@end
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentCell.h
@@ -10,4 +10,6 @@ @@ -10,4 +10,6 @@
10 10
11 @interface LVCCommentCell : UITableViewCell 11 @interface LVCCommentCell : UITableViewCell
12 12
  13 +@property (nonatomic, strong) CNLiveCommentDetailInfoResult *result;
  14 +
13 @end 15 @end
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentCell.m
@@ -23,12 +23,49 @@ @@ -23,12 +23,49 @@
23 { 23 {
24 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 24 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
25 if (self) { 25 if (self) {
  26 + [self addSubview:self.iconView];
26 [self addSubview:self.nameLabel]; 27 [self addSubview:self.nameLabel];
  28 + [self addSubview:self.likeButton];
27 [self addSubview:self.commentLabel]; 29 [self addSubview:self.commentLabel];
28 } 30 }
29 return self; 31 return self;
30 } 32 }
31 33
  34 +- (void)setResult:(CNLiveCommentDetailInfoResult *)result {
  35 +
  36 + _result = result;
  37 + [_iconView sd_setImageWithURL:[NSURL URLWithString:result.facepath] placeholderImage:[UIImage imageNamed:@"load_03"]];
  38 + if (result.nick) {
  39 + _nameLabel.text = result.nick;
  40 + } else {
  41 + _nameLabel.text = @"游客";
  42 + }
  43 + _commentLabel.text = result.content;
  44 + [_commentLabel sizeToFit];
  45 + [_likeButton setTitle:result.praise forState:UIControlStateNormal];
  46 + [_likeButton setImageEdgeInsets:UIEdgeInsetsMake(12, 5, 12, 35)];
  47 + [_likeButton setTitleEdgeInsets:UIEdgeInsetsMake(0, -60, 0, 0)];
  48 +}
  49 +
  50 +#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  51 +- (void)praiseAction:(UIButton *)btn {
  52 +
  53 + [[CNLiveCommentManager sharedCNLiveCommentManager] commentaryLikeWithProgramId:_result.pid sid:_result.uid commentId:_result.commentId completion:^(NSString *errorCode, NSString *errorMsg) {
  54 +
  55 + if ([errorCode isEqualToString:@"0"]) {
  56 +
  57 + NSLog(@"success");
  58 + btn.selected = YES;
  59 + [btn setUserInteractionEnabled:NO];
  60 + _result.praise = [NSString stringWithFormat:@"%ld",[_result.praise integerValue] + 1];
  61 + [_likeButton setTitle:_result.praise forState:UIControlStateNormal];
  62 +
  63 + } else {
  64 + NSLog(@"failed");
  65 + }
  66 + }];
  67 +}
  68 +
32 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!! 69 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!
33 - (UIImageView *)iconView { 70 - (UIImageView *)iconView {
34 if (!_iconView) { 71 if (!_iconView) {
@@ -39,7 +76,8 @@ @@ -39,7 +76,8 @@
39 76
40 - (UILabel *)nameLabel { 77 - (UILabel *)nameLabel {
41 if (!_nameLabel) { 78 if (!_nameLabel) {
42 - _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 10, KScreenWidth-130, 30)]; 79 + _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 10, KScreenWidth-120, 30)];
  80 + _nameLabel.textColor = [UIColor grayColorCNLive];
43 } 81 }
44 return _nameLabel; 82 return _nameLabel;
45 } 83 }
@@ -51,13 +89,22 @@ @@ -51,13 +89,22 @@
51 [_likeButton setImage:[UIImage imageNamed:@"videoSupportNormal"] forState:UIControlStateNormal]; 89 [_likeButton setImage:[UIImage imageNamed:@"videoSupportNormal"] forState:UIControlStateNormal];
52 [_likeButton setImage:[UIImage imageNamed:@"videoSupport"] forState:UIControlStateSelected]; 90 [_likeButton setImage:[UIImage imageNamed:@"videoSupport"] forState:UIControlStateSelected];
53 _likeButton.titleLabel.font = [UIFont systemFontOfSize:12]; 91 _likeButton.titleLabel.font = [UIFont systemFontOfSize:12];
54 - [_likeButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 92 + [_likeButton setTitleColor:[UIColor grayColorCNLive] forState:UIControlStateNormal];
55 _likeButton.backgroundColor = [UIColor whiteColor]; 93 _likeButton.backgroundColor = [UIColor whiteColor];
56 [_likeButton addTarget:self action:@selector(praiseAction:) forControlEvents:UIControlEventTouchUpInside]; 94 [_likeButton addTarget:self action:@selector(praiseAction:) forControlEvents:UIControlEventTouchUpInside];
57 } 95 }
58 return _likeButton; 96 return _likeButton;
59 } 97 }
60 98
  99 +- (UILabel *)commentLabel {
  100 + if (!_commentLabel) {
  101 + _commentLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, KScreenWidth-20, 10)];
  102 + _commentLabel.textColor = [UIColor grayColorCNLive];
  103 + _commentLabel.font = [UIFont systemFontOfSize:14];
  104 + }
  105 + return _commentLabel;
  106 +}
  107 +
61 - (void)awakeFromNib { 108 - (void)awakeFromNib {
62 [super awakeFromNib]; 109 [super awakeFromNib];
63 // Initialization code 110 // Initialization code
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentTitleCell.h
@@ -10,6 +10,6 @@ @@ -10,6 +10,6 @@
10 10
11 @interface LVCCommentTitleCell : UITableViewCell 11 @interface LVCCommentTitleCell : UITableViewCell
12 12
13 -@property (nonatomic, strong) ProgramModel *model; 13 +@property (nonatomic, strong) LVCVodListModel *model;
14 14
15 @end 15 @end
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentTitleCell.m
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 return self; 28 return self;
29 } 29 }
30 30
31 -- (void)setModel:(ProgramModel *)model { 31 +- (void)setModel:(LVCVodListModel *)model {
32 32
33 self.titleLabel.text = model.title; 33 self.titleLabel.text = model.title;
34 self.contentLabel.text = model.desc; 34 self.contentLabel.text = model.desc;
@@ -40,7 +40,6 @@ @@ -40,7 +40,6 @@
40 40
41 if (!_titleLabel) { 41 if (!_titleLabel) {
42 _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, KScreenWidth-20, 40)]; 42 _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, KScreenWidth-20, 40)];
43 - [_contentLabel setFont:[UIFont systemFontOfSize:22]];  
44 _titleLabel.text = @"标题"; 43 _titleLabel.text = @"标题";
45 } 44 }
46 return _titleLabel; 45 return _titleLabel;
@@ -49,7 +48,7 @@ @@ -49,7 +48,7 @@
49 - (UILabel *)contentLabel { 48 - (UILabel *)contentLabel {
50 49
51 if (!_contentLabel) { 50 if (!_contentLabel) {
52 - _contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, KScreenWidth-20, 100)]; 51 + _contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, KScreenWidth-20, 10)];
53 [_contentLabel setFont:[UIFont systemFontOfSize:14]]; 52 [_contentLabel setFont:[UIFont systemFontOfSize:14]];
54 _contentLabel.textColor = [UIColor grayColor]; 53 _contentLabel.textColor = [UIColor grayColor];
55 _contentLabel.text = @"描述"; 54 _contentLabel.text = @"描述";
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentView.h
@@ -10,6 +10,6 @@ @@ -10,6 +10,6 @@
10 10
11 @interface LVCCommentView : UIView 11 @interface LVCCommentView : UIView
12 12
13 -@property (nonatomic, strong) ProgramModel *model; 13 +@property (nonatomic, strong) LVCVodListModel *model;
14 14
15 @end 15 @end
LiveVideoCloud/Classes/Sections/homeSections/View/LVCCommentView.m
@@ -8,12 +8,24 @@ @@ -8,12 +8,24 @@
8 8
9 #import "LVCCommentView.h" 9 #import "LVCCommentView.h"
10 #import "LVCCommentTitleCell.h" 10 #import "LVCCommentTitleCell.h"
  11 +#import "LVCCommentCell.h"
11 12
12 static NSString *titleCellId = @"titleCellId"; 13 static NSString *titleCellId = @"titleCellId";
  14 +static NSString *commentCellId = @"commentCellId";
13 15
14 -@interface LVCCommentView()<UITableViewDelegate, UITableViewDataSource> 16 +@interface LVCCommentView()<UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate> {
  17 +
  18 + NSArray *_commentArray;
  19 + CGFloat _desHeight;
  20 + NSMutableArray *_cellHeightArrayM;
  21 +}
15 22
16 @property (nonatomic, strong) UITableView *tableview; 23 @property (nonatomic, strong) UITableView *tableview;
  24 +@property (nonatomic, strong) UILabel *countLabel;
  25 +@property (nonatomic, strong) UIView *textViewBackView; // 聊天输入框背景
  26 +@property (nonatomic, strong) UITextField *textField;
  27 +@property (nonatomic, strong) UIButton *resignTextViewBtn; // 点击空白取消评论按钮
  28 +@property (nonatomic, strong) UIButton *commentButton;
17 29
18 @end 30 @end
19 31
@@ -23,39 +35,130 @@ static NSString *titleCellId = @&quot;titleCellId&quot;; @@ -23,39 +35,130 @@ static NSString *titleCellId = @&quot;titleCellId&quot;;
23 { 35 {
24 self = [super initWithFrame:frame]; 36 self = [super initWithFrame:frame];
25 if (self) { 37 if (self) {
  38 + _commentArray = [[NSArray alloc] init];
  39 + _cellHeightArrayM = [[NSMutableArray alloc] init];
  40 + [self addNotification];
26 [self addSubview:self.tableview]; 41 [self addSubview:self.tableview];
27 } 42 }
28 return self; 43 return self;
29 } 44 }
30 45
31 -- (void)setModel:(ProgramModel *)model { 46 +- (void)setModel:(LVCVodListModel *)model {
32 47
33 if (_model != model) { 48 if (_model != model) {
34 _model = model; 49 _model = model;
35 } 50 }
36 - [self.tableview reloadData]; 51 + if (model.desc) {
  52 + CGRect contentRect = [model.desc boundingRectWithSize:CGSizeMake(KScreenWidth-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil];
  53 + _desHeight = contentRect.size.height;
  54 + } else {
  55 + _desHeight = 0;
  56 + }
  57 + [self getCommentListWithPid:@"123"];
  58 + [self getCommentCountWithPid:@"123"];
  59 +}
  60 +
  61 +#pragma mark - 获取评论列表
  62 +- (void)getCommentListWithPid:(NSString *)pid {
  63 +
  64 + [[CNLiveCommentManager sharedCNLiveCommentManager] getCommentListWithProgramId:pid page:@"1" pageSize:@"10" success:^(CNLiveCommentListResult *result) {
  65 +
  66 + _commentArray = result.comments;
  67 + if (_commentArray && _commentArray.count > 0) {
  68 + for (CNLiveCommentDetailInfoResult *result in _commentArray) {
  69 + if (result.content) {
  70 + CGRect contentRect = [result.content boundingRectWithSize:CGSizeMake(KScreenWidth-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil];
  71 + CGFloat contentHeight = contentRect.size.height;
  72 + [_cellHeightArrayM addObject:[NSString stringWithFormat:@"%f",contentHeight]];
  73 + } else {
  74 + [_cellHeightArrayM addObject:@"0"];
  75 + }
  76 + }
  77 + }
  78 +
  79 + [self.tableview reloadData];
  80 + } error:^(NSString *error) {
  81 + NSLog(@"获取评论列表失败");
  82 + }];
  83 +}
  84 +
  85 +#pragma mark - 获取评论数
  86 +- (void)getCommentCountWithPid:(NSString *)pid {
  87 +
  88 + [[CNLiveCommentManager sharedCNLiveCommentManager] getCommentCountWithProgramIds:@[pid] completion:^(NSString *errorCode, NSString *errorMsg, NSArray<CNLiveCommentCountResult *> *commentArray) {
  89 +
  90 + if ([errorCode isEqualToString:@"0"]) {
  91 + CNLiveCommentCountResult *result = [commentArray lastObject];
  92 + self.countLabel.text = result.count;
  93 + }
  94 + }];
37 } 95 }
38 96
39 #pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!! 97 #pragma mark - UITableViewDelegate !!!!!!!!!!!!!!!!!!!!!
40 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 98 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
41 - return SCREEN_WIDTH*9/16+40; 99 + if (indexPath.section == 0) {
  100 + return _desHeight+70;
  101 + } else {
  102 + return [_cellHeightArrayM[indexPath.row] floatValue] + 60;
  103 + }
42 } 104 }
43 105
44 #pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!! 106 #pragma mark - UITableViewDataSource !!!!!!!!!!!!!!!!!!!!!!!
  107 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  108 + return 2;
  109 +}
  110 +
45 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 111 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
46 112
47 - return 2; 113 + if (section == 0) {
  114 + return 1;
  115 + } else {
  116 + return _commentArray.count;
  117 + }
48 } 118 }
49 119
50 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 120 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
51 121
52 - if (indexPath.row == 0) {  
53 - 122 + if (indexPath.section == 0) {
  123 + LVCCommentTitleCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellId forIndexPath:indexPath];
  124 + cell.selectionStyle = UITableViewCellSelectionStyleNone;
  125 + cell.model = self.model;
  126 + return cell;
  127 + } else {
  128 + LVCCommentCell *cell = [tableView dequeueReusableCellWithIdentifier:commentCellId forIndexPath:indexPath];
  129 + cell.selectionStyle = UITableViewCellSelectionStyleNone;
  130 + cell.result = _commentArray[indexPath.row];
  131 + return cell;
  132 + }
  133 +}
  134 +
  135 +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
  136 +
  137 + if (section == 1) {
  138 + UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 90)];
  139 + headerView.backgroundColor = [UIColor whiteColor];
  140 + UILabel *commentLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 50, 40)];
  141 + commentLabel.font = [UIFont systemFontOfSize:20];
  142 + commentLabel.text = @"评论";
  143 + [headerView addSubview:commentLabel];
  144 + [headerView addSubview:self.countLabel];
  145 + [headerView addSubview:self.commentButton];
  146 + UIView *line = [[UIView alloc]initWithFrame:CGRectMake(0, 89, KScreenWidth, 1)];
  147 + line.backgroundColor = [UIColor lightGrayColor];
  148 + [headerView addSubview:line];
  149 + return headerView;
  150 + } else {
  151 + return nil;
54 } 152 }
  153 +}
  154 +
  155 +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
55 156
56 - LVCCommentTitleCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellId forIndexPath:indexPath];  
57 - cell.model = self.model;  
58 - return cell; 157 + if (section == 0) {
  158 + return 0;
  159 + } else {
  160 + return 90;
  161 + }
59 } 162 }
60 163
61 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!! 164 #pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!
@@ -67,10 +170,151 @@ static NSString *titleCellId = @&quot;titleCellId&quot;; @@ -67,10 +170,151 @@ static NSString *titleCellId = @&quot;titleCellId&quot;;
67 _tableview.dataSource = self; 170 _tableview.dataSource = self;
68 _tableview.showsVerticalScrollIndicator = NO; 171 _tableview.showsVerticalScrollIndicator = NO;
69 _tableview.showsHorizontalScrollIndicator = NO; 172 _tableview.showsHorizontalScrollIndicator = NO;
70 - _tableview.separatorStyle = UITableViewCellSeparatorStyleNone;  
71 [_tableview registerClass:[LVCCommentTitleCell class] forCellReuseIdentifier:titleCellId]; 173 [_tableview registerClass:[LVCCommentTitleCell class] forCellReuseIdentifier:titleCellId];
  174 + [_tableview registerClass:[LVCCommentCell class] forCellReuseIdentifier:commentCellId];
72 } 175 }
73 return _tableview; 176 return _tableview;
74 } 177 }
75 178
  179 +- (UILabel *)countLabel {
  180 + if (!_countLabel) {
  181 + _countLabel = [[UILabel alloc] initWithFrame:CGRectMake(KScreenWidth-40, 0, 40, 40)];
  182 + _countLabel.font = [UIFont systemFontOfSize:20];
  183 + _countLabel.text = @"0";
  184 + }
  185 + return _countLabel;
  186 +}
  187 +
  188 +- (UIView *)textViewBackView {
  189 + if (!_textViewBackView) {
  190 + _textViewBackView = [[UIView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, 40)];
  191 + _textViewBackView.backgroundColor = [UIColor colorWithRed:(230.0/255.0) green:(230.0/255.0) blue:(230.0/255.0) alpha:1];
  192 + [_textViewBackView addSubview:self.textField];
  193 + }
  194 + return _textViewBackView;
  195 +}
  196 +
  197 +- (UITextField *)textField {
  198 + if (!_textField) {
  199 + _textField = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, KScreenWidth - 10, 30)];
  200 + _textField.backgroundColor = [UIColor lightGrayColor];
  201 + _textField.returnKeyType = UIReturnKeySend;
  202 + _textField.font = [UIFont systemFontOfSize:14];
  203 + _textField.delegate = self;
  204 + _textField.enablesReturnKeyAutomatically = YES;
  205 + }
  206 + return _textField;
  207 +}
  208 +
  209 +- (UIButton *)resignTextViewBtn {
  210 + if (!_resignTextViewBtn) {
  211 + _resignTextViewBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  212 + [_resignTextViewBtn setFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
  213 + [_resignTextViewBtn addTarget:self action:@selector(commentBackBtnAction:) forControlEvents:UIControlEventTouchUpInside];
  214 + [_resignTextViewBtn addSubview:self.textViewBackView];
  215 + }
  216 + return _resignTextViewBtn;
  217 +}
  218 +
  219 +- (UIButton *)commentButton {
  220 + if (!_commentButton) {
  221 + _commentButton = [UIButton buttonWithType:UIButtonTypeCustom];
  222 + _commentButton.frame = CGRectMake(10, 40, KScreenWidth-20, 40);
  223 + _commentButton.backgroundColor = [UIColor colorWithRed:(230.0/255.0) green:(230.0/255.0) blue:(230.0/255.0) alpha:1];
  224 + [_commentButton setTitleColor:[UIColor grayColorCNLive] forState:UIControlStateNormal];
  225 + [_commentButton setTitle:@" 我来说两句....." forState:UIControlStateNormal];
  226 + _commentButton.layer.cornerRadius = 15;
  227 + _commentButton.layer.masksToBounds = YES;
  228 + [_commentButton addTarget:self action:@selector(commentBtnAction:) forControlEvents:UIControlEventTouchUpInside];
  229 + }
  230 + return _commentButton;
  231 +}
  232 +
  233 +#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  234 +- (void)addNotification {
  235 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
  236 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
  237 +}
  238 +
  239 +- (void)commentBtnAction:(UIButton *)button {
  240 + [self addSubview:self.resignTextViewBtn];
  241 + [self.textField becomeFirstResponder];
  242 +}
  243 +
  244 +- (void)commentBackBtnAction:(UIButton *)button {
  245 + [button removeFromSuperview];
  246 +}
  247 +
  248 +#pragma mark - UITextFieldDelegate
  249 +- (BOOL)textFieldShouldReturn:(UITextField *)textField {
  250 +
  251 + [[CNLiveCommentManager sharedCNLiveCommentManager] commentOnProgramWithProgramId:@"123" sid:@"555" comment:textField.text completion:^(NSString *errorCode, NSString *errorMsg) {
  252 +
  253 + if ([errorCode isEqualToString:@"0"]) {
  254 + textField.text = @"";
  255 + [textField resignFirstResponder];
  256 + [self getCommentListWithPid:@"123"];
  257 + [self getCommentCountWithPid:@"123"];
  258 + }
  259 + }];
  260 + return YES;
  261 +}
  262 +
  263 +#pragma mark <KeyboardNotificationAction>
  264 +- (void)keyboardWillShow:(NSNotification *)notification {
  265 +
  266 + CGRect keyboardRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
  267 + UIViewAnimationCurve curve = [[notification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue];
  268 + double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
  269 +
  270 + [UIView animateWithDuration:duration
  271 + delay:0.0f
  272 + options:[self animationOptionsForCurve:curve]
  273 + animations:^{
  274 +
  275 + CGRect inputViewFrame = self.textViewBackView.frame;
  276 + if (keyboardRect.origin.y == KScreenHeight) {
  277 + self.textViewBackView.frame = CGRectMake(inputViewFrame.origin.x,
  278 + self.frame.size.height-(inputViewFrame.size.height),
  279 + inputViewFrame.size.width,
  280 + inputViewFrame.size.height);
  281 + } else {
  282 +
  283 + self.textViewBackView.frame = CGRectMake(inputViewFrame.origin.x,
  284 + self.frame.size.height-keyboardRect.size.height-_textViewBackView.frame.size.height,
  285 + inputViewFrame.size.width,
  286 + inputViewFrame.size.height);
  287 +
  288 + }
  289 + }
  290 + completion:^(BOOL finished) {
  291 + }];
  292 +}
  293 +
  294 +- (void)keyboardWillHide:(NSNotification *)notification
  295 +{
  296 + [self.textViewBackView setFrame:CGRectMake(0, KScreenHeight, KScreenWidth, self.textViewBackView.frame.size.height)];
  297 + [self.resignTextViewBtn removeFromSuperview];
  298 +}
  299 +
  300 +- (UIViewAnimationOptions)animationOptionsForCurve:(UIViewAnimationCurve)curve
  301 +{
  302 + switch (curve) {
  303 + case UIViewAnimationCurveEaseInOut:
  304 + return UIViewAnimationOptionCurveEaseInOut;
  305 + break;
  306 + case UIViewAnimationCurveEaseIn:
  307 + return UIViewAnimationOptionCurveEaseIn;
  308 + break;
  309 + case UIViewAnimationCurveEaseOut:
  310 + return UIViewAnimationOptionCurveEaseOut;
  311 + break;
  312 + case UIViewAnimationCurveLinear:
  313 + return UIViewAnimationOptionCurveLinear;
  314 + break;
  315 + }
  316 +
  317 + return kNilOptions;
  318 +}
  319 +
76 @end 320 @end
LiveVideoCloud/PrefixHeader.pch
@@ -29,9 +29,8 @@ @@ -29,9 +29,8 @@
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 <CNLiveUserSystemSDK/CNLiveUserSystemCenter.h>  
33 - #import "LVCCommentModel.h"  
34 - 32 + #import <CNLiveUserSystemSDK/CNLiveUserSystemCenter.h>
  33 + #import "LVCVodListModel.h"
35 #import "Common.h" 34 #import "Common.h"
36 #import "MJExtension.h" 35 #import "MJExtension.h"
37 #import "CNLiveMacro.h" 36 #import "CNLiveMacro.h"
@@ -55,6 +54,7 @@ @@ -55,6 +54,7 @@
55 #import "WXApi.h" 54 #import "WXApi.h"
56 #import "WeiboSDK.h" 55 #import "WeiboSDK.h"
57 #import "AppDelegate.h" 56 #import "AppDelegate.h"
  57 + #import <CNLiveChatManager/CNLiveCommentManager.h>
58 58
59 59
60 #if TARGET_OS_IPHONE 60 #if TARGET_OS_IPHONE
@@ -78,9 +78,6 @@ @@ -78,9 +78,6 @@
78 #define UserAppKey @"4c8658abc5d66f270f9bf5dcd1ef11e3597fab4c4e0af9"//@"13c6f0ad6f459cd479834b0b39cff99c6cf20c970815bb"// 78 #define UserAppKey @"4c8658abc5d66f270f9bf5dcd1ef11e3597fab4c4e0af9"//@"13c6f0ad6f459cd479834b0b39cff99c6cf20c970815bb"//
79 #define UserAppSceret @"c2faeb120f0ea2e2d47020d4b03cb8a93bed2585897a94"//@"14c887b76ec2ecdf7083fb4c62808f13f6ab77a0f9dfec"// 79 #define UserAppSceret @"c2faeb120f0ea2e2d47020d4b03cb8a93bed2585897a94"//@"14c887b76ec2ecdf7083fb4c62808f13f6ab77a0f9dfec"//
80 80
81 -#define JBAppId @"hdtv"  
82 -#define JBAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] ///debug用 "CFBundleVersion"  
83 -  
84 81
85 #define PlaceholderImage @"placehodler" 82 #define PlaceholderImage @"placehodler"
86 #define appDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate) 83 #define appDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)
LiveVideoCloud/animation.xcassets/videoSupport.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "videoSupport.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 \ No newline at end of file 22 \ No newline at end of file
LiveVideoCloud/animation.xcassets/videoSupport.imageset/videoSupport.png 0 → 100644

1.94 KB

LiveVideoCloud/animation.xcassets/videoSupportNormal.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "videoSupportNormal.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 \ No newline at end of file 22 \ No newline at end of file
LiveVideoCloud/animation.xcassets/videoSupportNormal.imageset/videoSupportNormal.png 0 → 100644

2.01 KB