Commit c5978c8ebd8bdacf337b615ff9b18ec040a7e8a8

Authored by 张旭
2 parents 57e31e4a f7db071f

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

# Conflicts:
#	LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
Showing 32 changed files with 615 additions and 261 deletions
LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
... ... @@ -164,12 +164,6 @@
164 164 D25BF8831E7F775F007FB138 /* LVCUGCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF8821E7F775F007FB138 /* LVCUGCPlayerLoadingView.m */; };
165 165 D25BF8901E7F7F8F007FB138 /* UGCLoading.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */; };
166 166 D25BF8931E7FBAEA007FB138 /* LVCUGCBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF8921E7FBAEA007FB138 /* LVCUGCBackgroundView.m */; };
167   - D25BF8971E7FE01B007FB138 /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */; };
168   - D25BF8991E7FE033007FB138 /* CNLiveChatManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */; };
169   - D25BF89A1E7FE046007FB138 /* CNLiveChatManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */; };
170   - D25BF89B1E7FE046007FB138 /* CNLiveChatManager.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
171   - D25BF89C1E7FE049007FB138 /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */; };
172   - D25BF89D1E7FE049007FB138 /* CNLiveMsgTools.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
173 167 D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */; };
174 168 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8A21E80C4FC007FB138 /* Accelerate.framework */; };
175 169 D25BF8A51E80EC76007FB138 /* 头像.jpg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF8A41E80EC76007FB138 /* 头像.jpg */; };
... ... @@ -179,10 +173,17 @@
179 173 D2888DB41E6EC154003A77C8 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB31E6EC154003A77C8 /* HomeViewController.m */; };
180 174 D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */; };
181 175 D29E81ED1E88DC5B008C9906 /* PriChatCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D29E81EC1E88DC5B008C9906 /* PriChatCell.m */; };
  176 + D29D88481E88C53300543A03 /* LVCUGCLivePrepareView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29D88471E88C53300543A03 /* LVCUGCLivePrepareView.m */; };
182 177 D2A803081E80BD6F009D6F1C /* TopToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A803071E80BD6F009D6F1C /* TopToolView.m */; };
  178 + D2B2ED7A1E88F90C00F7538A /* CNLiveChatManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */; };
  179 + D2B2ED7B1E88F90C00F7538A /* CNLiveChatManager.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
  180 + D2B2ED7C1E88F90F00F7538A /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */; };
  181 + D2B2ED7D1E88F90F00F7538A /* CNLiveMsgTools.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
183 182 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2501E8247D400ED084E /* ChatBarrageManager.m */; };
184 183 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */; };
185 184 D2B7B2571E8261EF00ED084E /* ChatBarrOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */; };
  185 + D2D236B41E88F8E600B7C517 /* CNLiveChatManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */; };
  186 + D2D236B51E88F8E600B7C517 /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */; };
186 187 /* End PBXBuildFile section */
187 188  
188 189 /* Begin PBXContainerItemProxy section */
... ... @@ -210,8 +211,8 @@
210 211 dstSubfolderSpec = 10;
211 212 files = (
212 213 811BB6851E8106AF005C6291 /* CNLivePlayerSDK.framework in Embed Frameworks */,
213   - D25BF89B1E7FE046007FB138 /* CNLiveChatManager.framework in Embed Frameworks */,
214   - D25BF89D1E7FE049007FB138 /* CNLiveMsgTools.framework in Embed Frameworks */,
  214 + D2B2ED7B1E88F90C00F7538A /* CNLiveChatManager.framework in Embed Frameworks */,
  215 + D2B2ED7D1E88F90F00F7538A /* CNLiveMsgTools.framework in Embed Frameworks */,
215 216 );
216 217 name = "Embed Frameworks";
217 218 runOnlyForDeploymentPostprocessing = 0;
... ... @@ -548,8 +549,6 @@
548 549 D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = UGCLoading.jpeg; sourceTree = "<group>"; };
549 550 D25BF8911E7FBAEA007FB138 /* LVCUGCBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCBackgroundView.h; sourceTree = "<group>"; };
550 551 D25BF8921E7FBAEA007FB138 /* LVCUGCBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCBackgroundView.m; sourceTree = "<group>"; };
551   - D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; };
552   - D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveChatManager.framework; sourceTree = "<group>"; };
553 552 D25BF89E1E80C4BD007FB138 /* UIImage+LVCVagueImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+LVCVagueImage.h"; sourceTree = "<group>"; };
554 553 D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+LVCVagueImage.m"; sourceTree = "<group>"; };
555 554 D25BF8A21E80C4FC007FB138 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
... ... @@ -566,6 +565,8 @@
566 565 D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMyViewController.m; sourceTree = "<group>"; };
567 566 D29E81EB1E88DC5B008C9906 /* PriChatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PriChatCell.h; sourceTree = "<group>"; };
568 567 D29E81EC1E88DC5B008C9906 /* PriChatCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PriChatCell.m; sourceTree = "<group>"; };
  568 + D29D88461E88C53300543A03 /* LVCUGCLivePrepareView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCLivePrepareView.h; sourceTree = "<group>"; };
  569 + D29D88471E88C53300543A03 /* LVCUGCLivePrepareView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCLivePrepareView.m; sourceTree = "<group>"; };
569 570 D2A803061E80BD6F009D6F1C /* TopToolView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopToolView.h; sourceTree = "<group>"; };
570 571 D2A803071E80BD6F009D6F1C /* TopToolView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopToolView.m; sourceTree = "<group>"; };
571 572 D2B7B24F1E8247D400ED084E /* ChatBarrageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageManager.h; sourceTree = "<group>"; };
... ... @@ -574,6 +575,8 @@
574 575 D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageView.m; sourceTree = "<group>"; };
575 576 D2B7B2551E8261EF00ED084E /* ChatBarrOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrOperation.h; sourceTree = "<group>"; };
576 577 D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrOperation.m; sourceTree = "<group>"; };
  578 + D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveChatManager.framework; sourceTree = "<group>"; };
  579 + D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; };
577 580 /* End PBXFileReference section */
578 581  
579 582 /* Begin PBXFrameworksBuildPhase section */
... ... @@ -583,11 +586,11 @@
583 586 files = (
584 587 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */,
585 588 D2575C7D1E76A4F300E3A8FC /* NHGiftAnimtionSDK.a in Frameworks */,
586   - D25BF89A1E7FE046007FB138 /* CNLiveChatManager.framework in Frameworks */,
587   - D25BF8971E7FE01B007FB138 /* CNLiveMsgTools.framework in Frameworks */,
588   - D25BF8991E7FE033007FB138 /* CNLiveChatManager.framework in Frameworks */,
589   - D25BF89C1E7FE049007FB138 /* CNLiveMsgTools.framework in Frameworks */,
  589 + D2B2ED7C1E88F90F00F7538A /* CNLiveMsgTools.framework in Frameworks */,
  590 + D2B2ED7A1E88F90C00F7538A /* CNLiveChatManager.framework in Frameworks */,
  591 + D2D236B51E88F8E600B7C517 /* CNLiveMsgTools.framework in Frameworks */,
590 592 811BB6831E8106A2005C6291 /* CNLivePlayerSDK.framework in Frameworks */,
  593 + D2D236B41E88F8E600B7C517 /* CNLiveChatManager.framework in Frameworks */,
591 594 );
592 595 runOnlyForDeploymentPostprocessing = 0;
593 596 };
... ... @@ -657,9 +660,9 @@
657 660 812E504E1E7699B9004F5FCD /* CNLiveSDK */ = {
658 661 isa = PBXGroup;
659 662 children = (
  663 + D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */,
  664 + D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */,
660 665 811BB6821E8106A2005C6291 /* CNLivePlayerSDK.framework */,
661   - D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */,
662   - D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */,
663 666 D25BF87C1E7B8C78007FB138 /* KSYGPUResource.bundle */,
664 667 );
665 668 path = CNLiveSDK;
... ... @@ -1441,6 +1444,8 @@
1441 1444 D25BF8771E7B8A82007FB138 /* FilterFunctionView.m */,
1442 1445 D25BF8781E7B8A82007FB138 /* SliderView.h */,
1443 1446 D25BF8791E7B8A82007FB138 /* SliderView.m */,
  1447 + D29D88461E88C53300543A03 /* LVCUGCLivePrepareView.h */,
  1448 + D29D88471E88C53300543A03 /* LVCUGCLivePrepareView.m */,
1444 1449 );
1445 1450 path = View;
1446 1451 sourceTree = "<group>";
... ... @@ -1867,6 +1872,7 @@
1867 1872 D2029CB31E6EADE10027CD92 /* UIScrollView+MJRefresh.m in Sources */,
1868 1873 D2029D051E6EAE2E0027CD92 /* UILabel+labelFitSize.m in Sources */,
1869 1874 D2029CB21E6EADE10027CD92 /* UIScrollView+MJExtension.m in Sources */,
  1875 + D29D88481E88C53300543A03 /* LVCUGCLivePrepareView.m in Sources */,
1870 1876 D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */,
1871 1877 D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */,
1872 1878 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */,
... ...
LiveVideoCloud/LiveVideoCloud/AppDelegate/AppDelegate.m
... ... @@ -27,20 +27,20 @@
27 27  
28 28 //初始化聊天SDK并连接服务器
29 29 [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:AppKey appId:AppId];
30   - [[CNLiveChatManager sharedCNLiveChatManager] connectServerSuccess:^{
31   - NSLog(@"连接服务器-----success");
  30 +// [[CNLiveChatManager sharedCNLiveChatManager] connectServerSuccess:^{
  31 +// NSLog(@"连接服务器-----success");
  32 +// } error:^(CNLiveChatConnectErrorCode errors) {
  33 +// NSLog(@"连接服务器失败-----%ld", errors);
  34 +// }];
  35 + // 20170327 20170328
  36 + CNLiveChatUserInfo *userInfo = [[CNLiveChatUserInfo alloc] initWithUserId:@"20170328" name:@"20170328" portrait:@""];
  37 + [[CNLiveChatManager sharedCNLiveChatManager] loginServer:userInfo success:^(NSString *userId) {
  38 + NSLog(@"连接服务器-----success");
  39 +
32 40 } error:^(CNLiveChatConnectErrorCode errors) {
33 41 NSLog(@"连接服务器失败-----%ld", errors);
34   - }];;
35   -
36   - [self.window makeKeyAndVisible];
37   -
38   - [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:AppKey appId:AppId];
39   - [[CNLiveChatManager sharedCNLiveChatManager] connectServerSuccess:^{
40   - NSLog(@"connectSuccess");
41   - } error:^(CNLiveChatConnectErrorCode errors) {
42   - NSLog(@"errors%ld",errors);
43 42 }];
  43 + [self.window makeKeyAndVisible];
44 44  
45 45 return YES;
46 46 }
... ...
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveChatManager.framework/CNLiveChatManager
No preview for this file type
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveChatManager.framework/Headers/CNLiveChatMessage.h
... ... @@ -20,17 +20,17 @@
20 20 /**
21 21 目标ID(消息来自聊天室的ID / 接收者ID)
22 22 */
23   -@property (nonatomic, assign) NSString *targetId;
  23 +@property (nonatomic, copy) NSString *targetId;
24 24  
25 25 /**
26 26 消息ID(本地存储的消息的唯一值(数据库索引唯一值))
27 27 */
28   -@property (nonatomic, assign) NSString *messageId;
  28 +@property (nonatomic, copy) NSString *messageId;
29 29  
30 30 /**
31 31 消息内容
32 32 */
33   -@property (nonatomic, strong) NSString *messageContent;
  33 +@property (nonatomic, copy) NSString *messageContent;
34 34  
35 35 /**
36 36 发送者的用户信息(userId, name, portraitUri)
... ...
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveChatManager.framework/Headers/CNLiveChatUserInfo.h
... ... @@ -13,17 +13,17 @@
13 13 /*!
14 14 用户ID(一旦以一个用户ID连接到服务器,就不能再修改用户ID了,如果修改也会被忽略)
15 15 */
16   -@property(nonatomic, strong, readonly) NSString *userId;
  16 +@property(nonatomic, copy, readonly) NSString *userId;
17 17  
18 18 /*!
19 19 用户名称
20 20 */
21   -@property(nonatomic, strong) NSString *name;
  21 +@property(nonatomic, copy) NSString *name;
22 22  
23 23 /*!
24 24 用户头像的URL
25 25 */
26   -@property(nonatomic, strong) NSString *portraitUri;
  26 +@property(nonatomic, copy) NSString *portraitUri;
27 27  
28 28 /*!
29 29 用户信息的初始化方法,
... ...
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveChatManager.framework/Modules/module.modulemap deleted 100644 → 0
1   -framework module CNLiveChatManager {
2   - umbrella header "CNLiveChatManager.h"
3   -
4   - export *
5   - module * { export * }
6   -}
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveMsgTools.framework/CNLiveMsgTools
No preview for this file type
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/BounceView.m
... ... @@ -8,6 +8,7 @@
8 8  
9 9 #import "BounceView.h"
10 10 #import "userInfoModel.h"
  11 +#import "LiveBaseView.h"
11 12  
12 13 @interface BounceView ()
13 14  
... ... @@ -60,21 +61,24 @@
60 61 - (void)closeClick
61 62 {
62 63 [Tools closeBouces];
  64 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypeHome model:_model];
63 65 }
64 66  
65 67 - (void)aiteHeBtnClick
66 68 {
67   - NSLog(@"aiteHeBtnClick");
  69 + [Tools closeBouces];
  70 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypeAite model:_model];
68 71 }
69 72  
70 73 - (void)privateChatClick
71 74 {
72   - NSLog(@"privateChatClick");
  75 + [Tools closeBouces];
  76 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypePriChat model:_model];
73 77 }
74 78  
75 79 - (void)homeBtnClick
76 80 {
77   - NSLog(@"homeBtnClick");
  81 + [Tools closeBouces];
78 82 }
79 83  
80 84 - (UIImageView *)icon
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatMsgModel/chatMsgModel.m
... ... @@ -22,7 +22,7 @@
22 22 //文字
23 23 CGFloat textMaxW = self.cellWidth;
24 24 CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT);
25   - CGSize textSize = [content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil].size;
  25 + CGSize textSize = [content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:kContentFont]} context:nil].size;
26 26  
27 27 //底部空隙
28 28 _cellHeight += textSize.height + ChatCellMargin;
... ... @@ -40,10 +40,10 @@
40 40 //文字
41 41 CGFloat textMaxW = self.priCellWidth;
42 42 CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT);
43   - CGSize textSize = [content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil].size;
  43 + CGSize textSize = [content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:kContentFont]} context:nil].size;
44 44  
45 45 //底部空隙
46   - _priCellHeight += textSize.height + ChatCellMargin;
  46 + _priCellHeight += textSize.height + 5;
47 47 // NSLog(@"pricellHeight = %f",_priCellHeight);
48 48 return _priCellHeight;
49 49 }
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LVCInteractionController.m
... ... @@ -32,7 +32,7 @@
32 32 {
33 33 if (!_liveBaseView)
34 34 {
35   - _liveBaseView = [[LiveBaseView alloc] initWithFrame:SCREEN_RECT];
  35 + _liveBaseView = [LiveBaseView liveBaseView];
36 36 _liveBaseView.viewController = self;
37 37 _liveBaseView.backgroundColor = [UIColor clearColor];
38 38 }
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LiveBaseView.h
... ... @@ -9,9 +9,20 @@
9 9 #import "BaseView.h"
10 10 @class PresentView;
11 11 @class AnimationBaseView;
  12 +
  13 +typedef NS_ENUM(NSInteger, BounceBtnType) {//弹窗按钮类型
  14 + BounceBtnTypeAite = 1,//@TA按钮点击
  15 + BounceBtnTypePriChat ,//私聊按钮点击
  16 + BounceBtnTypeHome ,//主页按钮点击
  17 +};
  18 +
12 19 @interface LiveBaseView : BaseView
13 20  
14 21 @property (nonatomic ,strong) UIViewController * _Nullable viewController;
15 22 @property (nonatomic ,strong ,readonly) PresentView * _Nullable presentView;
16 23 @property (nonatomic ,strong ,readonly) AnimationBaseView * _Nullable animationBaseView;
  24 +
  25 ++ (instancetype _Nullable)liveBaseView;
  26 +
  27 +- (void)bounceBtnType:(BounceBtnType)btnType model:(userInfoModel *_Nonnull)model;
17 28 @end
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LiveBaseView.m
... ... @@ -58,6 +58,17 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
58 58  
59 59 @implementation LiveBaseView
60 60  
  61 ++ (instancetype _Nullable)liveBaseView
  62 +{
  63 + static LiveBaseView *liveBaseView;
  64 +
  65 + static dispatch_once_t onceToken;
  66 + dispatch_once(&onceToken, ^{
  67 + liveBaseView = [[LiveBaseView alloc] initWithFrame:SCREEN_RECT];
  68 + });
  69 + return liveBaseView;
  70 +}
  71 +
61 72 - (instancetype)initWithFrame:(CGRect)frame
62 73 {
63 74 if (self = [super initWithFrame:frame]) {
... ... @@ -76,8 +87,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
76 87 self.chatTableView.alpha = 0.7;
77 88  
78 89 [self.animationBaseView addSubview:self.topToolsView];
79   - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
80   - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
  90 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self];
  91 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:self];
81 92  
82 93 [CNLiveChatManager sharedCNLiveChatManager].delegate = self;
83 94 [[CNLiveChatManager sharedCNLiveChatManager] joinChatRoom:@"1234" messageCount:10 success:^(NSString *targetId) {
... ... @@ -92,22 +103,25 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
92 103 }
93 104  
94 105 - (void)keyboardWillShow:(NSNotification *)notify {
95   -
96   - NSDictionary *userInfo = notify.userInfo;
97   - CGRect newFrameKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//变化前的frame
98   - [UIView animateWithDuration:0.25 animations:^{
99   - self.animationBaseView.top = - newFrameKeyboard.size.height + self.bottomToolView.height;
100   - }];
101   - self.bottomToolView.hidden = YES;
  106 + if ([notify.object isKindOfClass:[LiveBaseView class]]) {
  107 +
  108 + NSDictionary *userInfo = notify.userInfo;
  109 + CGRect newFrameKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//变化前的frame
  110 + [UIView animateWithDuration:0.25 animations:^{
  111 + self.animationBaseView.top = - newFrameKeyboard.size.height + self.bottomToolView.height;
  112 + }];
  113 + self.bottomToolView.hidden = YES;
  114 + }
102 115 }
103 116  
104 117 - (void)keyboardWillHidden:(NSNotification *)notify {
105   -
106   - [UIView animateWithDuration:0.1 animations:^{
107   - self.animationBaseView.top = 0;
108   - [self.animationBaseView setNeedsDisplay];
109   - }];
110   - self.bottomToolView.hidden = NO;
  118 + if ([notify.object isKindOfClass:[LiveBaseView class]]) {
  119 + [UIView animateWithDuration:0.1 animations:^{
  120 + self.animationBaseView.top = 0;
  121 + [self.animationBaseView setNeedsDisplay];
  122 + }];
  123 + self.bottomToolView.hidden = NO;
  124 + }
111 125 }
112 126  
113 127 - (void)createCommentsView {
... ... @@ -208,9 +222,34 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
208 222 textField.text = @"";
209 223 }
210 224 [textField resignFirstResponder];
  225 +
211 226 return YES;
212 227 }
213 228  
  229 +- (void)bounceBtnType:(BounceBtnType)btnType model:(userInfoModel *_Nonnull)model
  230 +{
  231 + switch (btnType) {
  232 + case BounceBtnTypeAite:
  233 + {
  234 + [self bottomActionWithType:BtnClickTypeChat button:nil];
  235 + _commentText.text = [NSString stringWithFormat:@"@%@ ",model.name];
  236 + }
  237 + break;
  238 + case BounceBtnTypePriChat:
  239 + {
  240 + [self bottomActionWithType:BtnClickTypePriChat button:nil];
  241 + }
  242 + break;
  243 + case BounceBtnTypeHome:
  244 + {
  245 +
  246 + }
  247 + break;
  248 + default:
  249 + break;
  250 + }
  251 +}
  252 +
214 253 #pragma mark - bottomBtnActionDelegate
215 254 - (void)bottomActionWithType:(BtnClickType)btnType button:(UIButton *)button
216 255 {
... ... @@ -252,7 +291,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
252 291 [self addSubview:privateView];
253 292 privateView.delegate = self;
254 293 self.giftPopView = privateView;
255   -
256 294 [UIView animateWithDuration:0.5 animations:^{
257 295 privateView.top -= 300;
258 296 } completion:^(BOOL finished) {
... ... @@ -303,6 +341,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
303 341 self.giftPopView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 300);
304 342 [self hiddenView:NO];
305 343 } completion:^(BOOL finished) {
  344 +
  345 + [self.giftPopView removeFromSuperview];
306 346 }];
307 347 }
308 348  
... ... @@ -454,7 +494,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
454 494 model.content = content;
455 495 model.ID = message.targetId;
456 496 model.icon = message.userInfo.portraitUri;
457   - model.cellWidth = privateView.tableView.width - 20;
  497 + model.priCellWidth = privateView.tableView.width * 0.5 - 30;
458 498 [privateView.chatArray addObject:model];
459 499 [privateView.tableView reloadData];
460 500  
... ... @@ -606,8 +646,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
606 646 {
607 647 if (!_topToolsView)
608 648 {
609   - _topToolsView = [[TopToolView alloc] initWithFrame:CGRectMake(10, 20, 150, 30)];
610   - _topToolsView.backgroundColor = ZXRandomColor;
  649 + _topToolsView = [[TopToolView alloc] initWithFrame:CGRectMake(10, 20, 100, 30) isHost:NO];
611 650 }
612 651 return _topToolsView;
613 652 }
... ... @@ -623,7 +662,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
623 662 tableView.showsHorizontalScrollIndicator = NO;
624 663 tableView.bounces = NO;
625 664 tableView.backgroundColor = [UIColor clearColor];
626   - tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
627 665 _chatTableView = tableView;
628 666 }
629 667 return _chatTableView;
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/PrivateView/PriChatCell.m
... ... @@ -10,14 +10,12 @@
10 10 #import "chatMsgModel.h"
11 11  
12 12 #define CHAT_POP_WIDTH 260
13   -#define TOP_MARGIN 6
14 13  
15 14 @interface PriChatCell ()
16 15  
17 16 @property (nonatomic ,strong) chatMsgModel * _Nullable model;
18 17 @property (nonatomic ,strong) UIImageView * _Nullable icon;
19 18 @property (nonatomic ,strong) UILabel * _Nullable content;
20   -@property (nonatomic ,strong) UIImageView * _Nullable bgImgView;
21 19  
22 20 @end
23 21  
... ... @@ -43,13 +41,19 @@
43 41  
44 42 - (void)bindView
45 43 {
46   - self.icon.frame = CGRectMake(self.width - 30, TOP_MARGIN, 25, 25);
47   -// NSLog(@"self.icon.centerY%f",self.height * 0.5);//13.353516
48   - self.icon.top = 13.353516;
49   - self.content.frame = CGRectMake(self.width - 30 - CHAT_POP_WIDTH, TOP_MARGIN, CHAT_POP_WIDTH, self.height - 2 * TOP_MARGIN);
50   -// self.bgImgView.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);
51   - self.icon.backgroundColor = ZXRandomColor;
52   - self.content.backgroundColor = ZXRandomColor;
  44 + if (_model.isMine) {
  45 + self.icon.frame = CGRectMake(self.width - 30, 6, 25, 25);
  46 + NSLog(@"self.icon.centerY%f",self.height * 0.5);//13.353516
  47 + self.icon.centerY = (self.height - 25)*0.5 + 12.5;//13.353516;
  48 + self.content.frame = CGRectMake(self.width - 30 - 5 - CHAT_POP_WIDTH, 2.5, CHAT_POP_WIDTH, self.height - 5);
  49 + self.content.backgroundColor = [UIColor blueColorZX];
  50 +
  51 + }else{
  52 + self.icon.frame = CGRectMake(5, 6, 25, 25);
  53 + self.icon.centerY = (self.height - 25)*0.5 + 12.5;//13.353516;
  54 + self.content.frame = CGRectMake(5 + 30, 2.5, CHAT_POP_WIDTH, self.height - 5);
  55 + self.content.backgroundColor = [UIColor greenColor];
  56 + }
53 57 }
54 58  
55 59 #pragma mark - getter
... ... @@ -58,10 +62,12 @@
58 62 if (!_content)
59 63 {
60 64 _content = [[UILabel alloc] init];
61   - _content.textAlignment = NSTextAlignmentCenter;
  65 + _content.textAlignment = NSTextAlignmentLeft;
62 66 _content.textColor = [UIColor blackColor];
63 67 _content.numberOfLines = 0;
64   - _content.font = [UIFont systemFontOfSize:14.f];
  68 + _content.font = [UIFont systemFontOfSize:kContentFont];
  69 + _content.layer.cornerRadius = 10;
  70 + _content.layer.masksToBounds = YES;
65 71 [self addSubview:_content];
66 72 }
67 73 return _content;
... ... @@ -79,16 +85,6 @@
79 85 return _icon;
80 86 }
81 87  
82   -- (UIImageView * _Nullable)bgImgView
83   -{
84   - if (!_bgImgView)
85   - {
86   - _bgImgView = [[UIImageView alloc] init];
87   - [self addSubview:_bgImgView];
88   - }
89   - return _bgImgView;
90   -}
91   -
92 88 - (void)awakeFromNib {
93 89 [super awakeFromNib];
94 90 // Initialization code
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/PrivateView/PrivateView.m
... ... @@ -45,8 +45,8 @@ static NSString *message_content = @&quot;message_content&quot;;
45 45 [self.bottomTool addSubview:self.sendBtn];
46 46 [self.bottomTool addSubview:self.textField];
47 47  
48   - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
49   - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
  48 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self];
  49 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:self];
50 50 }
51 51 return self;
52 52 }
... ... @@ -65,22 +65,26 @@ static NSString *message_content = @&quot;message_content&quot;;
65 65  
66 66 - (void)keyboardWillShow:(NSNotification *)notify {
67 67  
68   - NSDictionary *userInfo = notify.userInfo;
69   - CGRect newFrameKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//变化前的frame
70   - [UIView animateWithDuration:0.25 animations:^{
71   - self.top = SCREEN_HEIGHT - newFrameKeyboard.size.height - self.height;
72   - }];
73   - self.isEditing = YES;
74   - NSLog(@"showtop:%f",self.top);
  68 + if ([notify.object isKindOfClass:[PrivateView class]]) {
  69 + NSDictionary *userInfo = notify.userInfo;
  70 + CGRect newFrameKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//变化前的frame
  71 + [UIView animateWithDuration:0.25 animations:^{
  72 + self.top = SCREEN_HEIGHT - newFrameKeyboard.size.height - self.height;
  73 + }];
  74 + self.isEditing = YES;
  75 + NSLog(@"showtop:%f",self.top);
  76 + }
75 77 }
76 78  
77 79 - (void)keyboardWillHidden:(NSNotification *)notify {
78 80  
79   - [UIView animateWithDuration:0.1 animations:^{
80   - self.top = SCREEN_HEIGHT - 300;
81   - }];
82   - NSLog(@"hiddentop:%f",self.top);
83   - self.isEditing = NO;
  81 + if ([notify.object isKindOfClass:[PrivateView class]]) {
  82 + [UIView animateWithDuration:0.1 animations:^{
  83 + self.top = SCREEN_HEIGHT - 300;
  84 + }];
  85 + NSLog(@"hiddentop:%f",self.top);
  86 + self.isEditing = NO;
  87 + }
84 88 }
85 89  
86 90 #pragma mark - UITextFieldDelegate
... ... @@ -91,7 +95,7 @@ static NSString *message_content = @&quot;message_content&quot;;
91 95 NSDictionary *dic = @{message_content:textField.text};
92 96 weakself
93 97 NSString *message = [Tools dictionaryToJson:dic];
94   - [[CNLiveChatManager sharedCNLiveChatManager] sendMessage:message type:CNLive_ConversationType_PRIVATE targetId:@"1234" success:^(CNLiveChatMessage *message) {
  98 + [[CNLiveChatManager sharedCNLiveChatManager] sendMessage:message type:CNLive_ConversationType_PRIVATE targetId:@"20170327" success:^(CNLiveChatMessage *message) {
95 99  
96 100 dispatch_async(dispatch_get_main_queue(), ^{
97 101 strongself
... ... @@ -103,7 +107,7 @@ static NSString *message_content = @&quot;message_content&quot;;
103 107 model.name = message.userInfo.name;
104 108 model.isMine = YES;
105 109 model.content = content;
106   -// model.ID = message.targetId;
  110 + model.ID = message.targetId;
107 111 model.icon = message.userInfo.portraitUri;
108 112 model.priCellWidth = self.tableView.width * 0.5 - 30;
109 113 // model.sendTime;//发送时间
... ... @@ -205,6 +209,9 @@ static NSString *message_content = @&quot;message_content&quot;;
205 209 _tableView.dataSource = self;
206 210 _tableView.showsVerticalScrollIndicator = NO;
207 211 _tableView.showsHorizontalScrollIndicator = NO;
  212 + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  213 + _tableView.bounces = NO;
  214 + _tableView.backgroundColor = [UIColor clearColor];
208 215 }
209 216 return _tableView;
210 217 }
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.h
... ... @@ -8,7 +8,10 @@
8 8  
9 9 #import <UIKit/UIKit.h>
10 10  
  11 +@class userInfoModel;
11 12 @interface TopToolView : UIView
12 13  
13   -- (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost;
  14 +- (instancetype _Nonnull)initWithFrame:(CGRect)frame isHost:(BOOL)isHost;
  15 +
  16 +@property (nonatomic ,strong) userInfoModel * _Nullable model;
14 17 @end
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.m
... ... @@ -7,26 +7,96 @@
7 7 //
8 8  
9 9 #import "TopToolView.h"
  10 +#import "userInfoModel.h"
  11 +
  12 +@interface TopToolView ()
  13 +
  14 +@property (nonatomic ,strong) UIImageView * _Nullable icon;
  15 +@property (nonatomic ,strong) UIImageView * _Nullable bgView;
  16 +@property (nonatomic ,strong) UILabel * _Nullable stateLbl;
  17 +//@property (nonatomic ,strong) UILabel * _Nullable numberLbl;
  18 +
  19 +@end
10 20  
11 21 @implementation TopToolView
12 22  
13 23 - (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost
14 24 {
15 25 if (self = [super initWithFrame:frame]) {
16   -
  26 +
  27 + [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)]];
  28 + [self addSubview:self.bgView];
  29 + [self addSubview:self.stateLbl];
17 30 if (isHost) {
18 31 //主播端没有自己头像
19 32  
20   -
21 33 }else
22 34 {//观众端有主播头像
23   -
24   -
  35 + [self addSubview:self.icon];
25 36 }
26 37 }
27 38 return self;
28 39 }
29 40  
  41 +- (void)setModel:(userInfoModel *)model
  42 +{
  43 + _model = model;
  44 + [_icon zx_setHeader:model.icon];
  45 +}
  46 +
  47 +- (void)tapClick:(UITapGestureRecognizer *)gesture
  48 +{
  49 + userInfoModel *userModel = [[userInfoModel alloc ]init];
  50 + userModel.name = @"职业主播";
  51 + userModel.icon = @"http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=f0c5c08030d3d539c16807c70fb7c566/8ad4b31c8701a18bbef9f231982f07082838feba.jpg";
  52 + userModel.sign = @"哈哈啊哈哈啊哈哈,这是我的签名~";
  53 + userModel.uId = @"123124";
  54 +
  55 + [Tools showBouncedWithModel:userModel callBackBlock:^(UIView * _Nullable bounceView) {
  56 +
  57 + }];
  58 +}
  59 +
  60 +- (UIImageView *)icon
  61 +{
  62 + if (!_icon)
  63 + {
  64 + _icon = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
  65 + _icon.backgroundColor = ZXRandomColor;
  66 + _icon.layer.masksToBounds = YES;
  67 + _icon.layer.cornerRadius = _icon.height * 0.5;
  68 + [_icon zx_setHeader:@"http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=f0c5c08030d3d539c16807c70fb7c566/8ad4b31c8701a18bbef9f231982f07082838feba.jpg"];
  69 + }
  70 + return _icon;
  71 +}
  72 +
  73 +- (UIImageView *)bgView
  74 +{
  75 + if (!_bgView)
  76 + {
  77 + _bgView = [[UIImageView alloc] initWithFrame:self.bounds];
  78 + _bgView.backgroundColor = ZXRandomColor;
  79 + _bgView.layer.masksToBounds = YES;
  80 + _bgView.layer.cornerRadius = _bgView.height * 0.5;
  81 +
  82 + }
  83 + return _bgView;
  84 +}
  85 +
  86 +- (UILabel *)stateLbl
  87 +{
  88 + if (!_stateLbl)
  89 + {
  90 + _stateLbl = [[UILabel alloc] initWithFrame:CGRectMake(self.icon.right + 5, 0, 60, 20)];
  91 + _stateLbl.textAlignment = NSTextAlignmentCenter;
  92 + _stateLbl.textColor = [UIColor whiteColor];
  93 + _stateLbl.text = @"直播";//直播 精彩回放
  94 + _stateLbl.height = [_stateLbl labelSize].height;
  95 + _stateLbl.font = [UIFont systemFontOfSize:kDetailContentFont];
  96 + }
  97 + return _stateLbl;
  98 +}
  99 +
30 100 /*
31 101 // Only override drawRect: if you perform custom drawing.
32 102 // An empty implementation adversely affects performance during animation.
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/Controller/LVCLiveViewController.m
... ... @@ -10,45 +10,32 @@
10 10 #import <CNLivePlayerSDK/CNLiveGPUStreamerKit.h>
11 11 #import <CNLivePlayerSDK/CNLiveWebcastManager.h>
12 12 #import "FilterFunctionView.h"
  13 +#import "LVCUGCLivePrepareView.h"
13 14  
14 15 #define KAppId @"60_irn9edco29"
15 16 #define KAppKey @"69fe70bda67e059286ad509d9f5377f815955645b52f94"
16 17  
17   -@interface LVCLiveViewController ()<UIGestureRecognizerDelegate> {
18   - // 开始直播
19   - UIButton *_startLiveBtn;
20   - // 缩放因子
21   - CGFloat _currentPinchZoomFactor;
22   -}
  18 +@interface LVCLiveViewController ()<UIGestureRecognizerDelegate>
23 19  
24   -@property (nonatomic,strong) UIView *captureView;
  20 +@property (nonatomic, strong) LVCUGCLivePrepareView *prepareView;
25 21  
26   -@property (nonatomic,strong) CNLiveGPUStreamerKit *kitCN;
  22 +@property (nonatomic, strong) UIView *captureView;
27 23  
28   -@property (nonatomic,strong) FilterFunctionView *filterView;
  24 +@property (nonatomic, strong) CNLiveGPUStreamerKit *kitCN;
29 25  
30   -@end
  26 +@property (nonatomic, strong) FilterFunctionView *filterView;
31 27  
32   -@implementation LVCLiveViewController
  28 +@property (nonatomic, strong) UIButton *quitButton;
33 29  
34   -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
35   -
36   - if (_kitCN) {
37   - return UIInterfaceOrientationMaskAllButUpsideDown;
38   - } else {
39   - return UIInterfaceOrientationMaskPortrait;
40   - }
41   -}
  30 +@property (nonatomic, strong) UIButton *openFilterButton;
42 31  
43   --(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
44   -
45   - UIInterfaceOrientation orie = [[UIApplication sharedApplication] statusBarOrientation];
46   - [_kitCN rotatePreviewTo:orie];
47   -
48   - if (_kitCN.streamerBase.isStreaming) {
49   - [_kitCN rotateStreamTo:orie];
50   - }
51   -}
  32 +@property (nonatomic, strong) UIButton *changeCameraButton;
  33 +
  34 +@property (nonatomic, strong) UIButton *openFlashButton;
  35 +
  36 +@end
  37 +
  38 +@implementation LVCLiveViewController
52 39  
53 40 - (void)viewDidLoad {
54 41 [super viewDidLoad];
... ... @@ -56,17 +43,18 @@
56 43 self.view.backgroundColor = [UIColor blueColor];
57 44  
58 45 [self.view addSubview:self.captureView];
  46 + [self.view addSubview:self.prepareView];
  47 + [self.view addSubview:self.quitButton];
  48 + [self.view addSubview:self.changeCameraButton];
  49 + [self.view addSubview:self.openFilterButton];
  50 + [self.view addSubview:self.openFlashButton];
  51 + [self.view addSubview:self.filterView];
59 52  
60   - UIButton *closeBtn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH - 50, 30, 50, 30)];
61   - [closeBtn setTitle:@"关闭" forState:UIControlStateNormal];
62   - [closeBtn addTarget:self action:@selector(closeBtnClivk) forControlEvents:UIControlEventTouchUpInside];
63   - [self.view addSubview:closeBtn];
64   -
65   - // 活动Id
  53 + // 初始化推流
66 54 NSString *activityId = [NSString stringWithFormat:@"%d%d%d%d%d",arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9];
67   - // 初始化直播云
  55 +
68 56 [[CNLiveWebcastManager manager] initWithAppId:KAppId appKey:KAppKey];
69   - // 初始化推流
  57 +
70 58 _kitCN = [[CNLiveGPUStreamerKit alloc] initWithDefaultConfigWithActivityId:activityId channelId:@"iOStest" isHorizontalScreen:@"0"];
71 59  
72 60 // _kitCN.activityName = @"iOS test";
... ... @@ -74,25 +62,12 @@
74 62  
75 63 // 设置推流配置
76 64 [self setStreamerCfg];
77   - // 添加监听
78   - [self addObservers];
79   -
80   - _startLiveBtn = [self addButton:@"开始直播" frame:CGRectMake(100, 40, 80, 40) action:@selector(startCapture:)];
81   - [_startLiveBtn setTitle:@"开始直播" forState:UIControlStateNormal];
82   - [_startLiveBtn setTitle:@"停止直播" forState:UIControlStateSelected];
83 65  
84   - [self addButton:@"关闭预览" frame:CGRectMake(10, 40, 80, 40) action:@selector(startPreview:)];
85   -// [self addButton:@"退出" frame:CGRectMake(190, 40, 80, 40) action:@selector(quit)];
86   - [self addButton:@"美颜" frame:CGRectMake(10, 100, 80, 40) action:@selector(openFilter:)];
87   - [self addButton:@"摄像头" frame:CGRectMake(100, 100, 80, 40) action:@selector(changeCamera:)];
88   - [self addButton:@"闪光灯" frame:CGRectMake(190, 100, 80, 40) action:@selector(openFlash)];
  66 + [self addObservers];
89 67  
90 68 UITapGestureRecognizer * singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
91 69 singleRecognizer.delegate = self;
92 70 [self.captureView addGestureRecognizer:singleRecognizer];
93   -
94   - UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchDetected:)];
95   - [self.view addGestureRecognizer:pinch];
96 71 }
97 72  
98 73 #pragma mark - initialization Streamer
... ... @@ -124,75 +99,24 @@
124 99 // 启动预览
125 100 [_kitCN startPreview:self.captureView];
126 101  
127   - //水印图片
128   -// _kitCN.watermark.logoPic = [UIImage imageNamed:@"互动电视180x180"];
129   -// _kitCN.watermark.logoRect = CGRectMake(0.8, 0.8, 50, 50);
130   -// _kitCN.watermark.logoAlpha = 0.6;
131   -
132   - //水印文字
133   -// _kitCN.watermark.textLabel = [[UILabel alloc] init];
134   -// _kitCN.watermark.textLabel.text = [NSString stringWithFormat:@"cnlive"];
135   -// _kitCN.watermark.textLabel.font = [UIFont systemFontOfSize:8];
136   -// _kitCN.watermark.textRect = CGRectMake(0.78, 0.88, 0.2, 0.04);
137   -// [_kitCN.watermark updateTextLabel];
138   -
139 102 }
140 103  
141   -#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
142   -// 拍摄视图
143   -- (UIView *)captureView {
144   -
145   - if (!_captureView) {
146   - _captureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
147   - _captureView.backgroundColor = [UIColor blackColor];
148   - }
149   - return _captureView;
150   -}
151   -
152   -
153 104 #pragma mark - UIButton Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
154   -
155   -// 开始推流
156   -- (void)startCapture:(UIButton *)button {
  105 +- (void)startCapture:(UIButton *)button { // 开始推流
157 106  
158   - button.selected = !button.selected;
  107 + [_prepareView removeFromSuperview];
159 108  
160   - if (button.selected) {
161   - [_kitCN startStream:^{
162   - NSLog(@"开启推流成功 ------- success");
163   - } failure:^(NSDictionary *errorDic) {
164   - NSString *str=[[NSMutableString alloc] initWithData:errorDic[@"errorMessage"] encoding:NSUTF8StringEncoding];
165   - NSLog(@"%@",str);
166   - [self toast:errorDic[@"errorMessage"]];
167   - _startLiveBtn.selected = NO;
168   - }];
169   - }else{
170   -
171   - [_kitCN stopStream];
172   - }
  109 + [_kitCN startStream:^{
  110 + NSLog(@"开启推流成功 ------- success");
  111 + } failure:^(NSDictionary *errorDic) {
  112 + NSString *str=[[NSMutableString alloc] initWithData:errorDic[@"errorMessage"] encoding:NSUTF8StringEncoding];
  113 + NSLog(@"%@",str);
  114 + [self toast:errorDic[@"errorMessage"]];
  115 + }];
173 116 }
174 117  
175   -// 开始 / 关闭 预览
176   -- (void)startPreview:(UIButton *)button {
177   -
178   - button.selected = !button.selected;
179   - if (button.selected) {
180   - _startLiveBtn.enabled = NO;
181   - [button setTitle:@"开启预览" forState:UIControlStateNormal];
182   - if (_kitCN.streamState == CNLiveStreamStateConnected) {
183   - [_kitCN stopStream];
184   - _startLiveBtn.selected = NO;
185   - }
186   - [_kitCN stopPreview];
187   - }else{
188   - [_kitCN startPreview:self.captureView];
189   - [button setTitle:@"关闭预览" forState:UIControlStateNormal];
190   - _startLiveBtn.enabled = YES;
191   - }
192   -}
193 118  
194   -// 美颜滤镜
195   -- (void)openFilter:(UIButton *)button {
  119 +- (void)openFilter:(UIButton *)button { // 美颜滤镜
196 120  
197 121 button.selected = !button.selected;
198 122  
... ... @@ -220,14 +144,14 @@
220 144 } else {
221 145  
222 146 _filterView.hidden = YES;
223   -
224 147 }
225 148 }
226 149  
227   -// 转换前后置摄像头
228   -- (void)changeCamera:(UIButton *)button {
  150 +
  151 +- (void)changeCamera:(UIButton *)button { // 转换前后置摄像头
229 152  
230   -// button.selected = !button.selected;
  153 + button.selected = !button.selected;
  154 + _openFlashButton.hidden = !_openFlashButton.hidden;
231 155 // if (button.selected) {
232 156 // _kitCN.cameraPosition = AVCaptureDevicePositionBack;
233 157 // }else{
... ... @@ -237,15 +161,16 @@
237 161  
238 162 }
239 163  
240   -// 闪光灯
241   -- (void)openFlash {
  164 +
  165 +- (void)openFlash:(UIButton *)button { // 闪光灯
242 166  
  167 + button.selected = !button.selected;
243 168 [_kitCN toggleTorch];
244 169 // [_kitCN setTorchMode:AVCaptureTorchModeOn];
245 170 }
246 171  
247   -// 退出
248   -- (void)closeBtnClivk {
  172 +
  173 +- (void)quitBtnClick { // 退出
249 174  
250 175 if (_kitCN.streamState == CNLiveStreamStateConnected) {
251 176 [_kitCN stopStream];
... ... @@ -259,38 +184,32 @@
259 184  
260 185  
261 186 #pragma mark - UIGestureRecognizer Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
262   -//对焦与曝光
263   -- (void)onTap:(UIGestureRecognizer *)sender {
  187 +
  188 +- (void)onTap:(UIGestureRecognizer *)sender { //对焦与曝光
264 189  
265 190 CGPoint current = [sender locationInView:self.view];
266 191 CGPoint point = [self convertToPointOfInterestFromViewCoordinates:current];
267 192 [_kitCN exposureAtPoint:point];
268 193 [_kitCN focusAtPoint:point];
269   -}
270   -
271   -//缩放
272   -- (void)pinchDetected:(UIPinchGestureRecognizer *)recognizer {
273 194  
274   - if (recognizer.state == UIGestureRecognizerStateBegan) {
275   - _currentPinchZoomFactor = _kitCN.pinchZoomFactor;
  195 + if ([_prepareView.titleTextField isFirstResponder]) {
  196 + [_prepareView.titleTextField resignFirstResponder];
276 197 }
277   - CGFloat zoomFactor = _currentPinchZoomFactor * recognizer.scale;//当前触摸缩放因子*坐标比例
278   - [_kitCN setPinchZoomFactor:zoomFactor];
279 198 }
280 199  
281 200 #pragma mark - notification !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
282   -// 进入后台
283   -- (void)enterBg {
  201 +
  202 +- (void)enterBg { // 进入后台
284 203  
285 204 [_kitCN appEnterBackground];
286 205 }
287   -// 回到前台
288   -- (void)becameActive {
  206 +
  207 +- (void)becameActive { // 回到前台
289 208  
290 209 [_kitCN appBecomeActive];
291 210 }
292   -// 采集状态改变
293   -- (void)captureStateChange {
  211 +
  212 +- (void)captureStateChange { // 采集状态改变
294 213  
295 214 if ( _kitCN.captureState == CNLiveCaptureStateIdle){
296 215 //初始化时状态为空闲
... ... @@ -325,8 +244,8 @@
325 244  
326 245 }
327 246 }
328   -// 推流状态改变
329   -- (void)streamStateChange {
  247 +
  248 +- (void)streamStateChange { // 推流状态改变
330 249  
331 250 if (_kitCN.streamState == CNLiveStreamStateIdle) {
332 251  
... ... @@ -362,8 +281,8 @@
362 281 NSLog(@"---------CNLiveStopStreamSuccess");
363 282 }
364 283 }
365   -// 推流失败
366   -- (void)onStreamError {
  284 +
  285 +- (void)onStreamError { // 推流失败
367 286  
368 287 CNLiveStreamErrorCode err = _kitCN.streamErrorCode;
369 288  
... ... @@ -384,7 +303,6 @@
384 303 else if ( CNLiveStreamErrorCode_ABNORMAL == err) {
385 304  
386 305 [self toast:@"推流异常中断~~"];
387   - _startLiveBtn.selected = NO;
388 306  
389 307 } else if (err == CNLiveStreamErrorCode_CODEC_OPEN_FAILED) {
390 308 NSLog(@"video codec open failed, try software codec");
... ... @@ -403,8 +321,8 @@
403 321  
404 322 }
405 323  
406   -// 重试
407   -- (void) tryReconnect {
  324 +
  325 +- (void) tryReconnect { // 重试
408 326  
409 327 dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC));
410 328 dispatch_after(delay, dispatch_get_main_queue(), ^{
... ... @@ -415,18 +333,16 @@
415 333  
416 334 [_kitCN startStream:^{
417 335 NSLog(@"开启推流成功 ------- success");
418   - _startLiveBtn.selected = YES;
419 336  
420 337 } failure:^(NSDictionary *errorDic) {
421 338 [self toast:errorDic[@"errorMessage"]];
422   - _startLiveBtn.selected = NO;
423 339 }];
424 340  
425 341 });
426 342 }
427 343  
428   -// 提示框
429   -- (void)toast:(NSString*)message {
  344 +
  345 +- (void)toast:(NSString*)message { // 提示框
430 346  
431 347 UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
432 348 message:message
... ... @@ -441,8 +357,8 @@
441 357 }
442 358  
443 359  
444   -// 将UI的坐标转换成相机坐标
445   -- (CGPoint)convertToPointOfInterestFromViewCoordinates:(CGPoint)viewCoordinates {
  360 +
  361 +- (CGPoint)convertToPointOfInterestFromViewCoordinates:(CGPoint)viewCoordinates {// 将UI的坐标转换成相机坐标
446 362  
447 363 CGPoint pointOfInterest = CGPointMake(.5f, .5f);
448 364 CGSize frameSize = self.view.frame.size;
... ... @@ -476,8 +392,76 @@
476 392 return pointOfInterest;
477 393 }
478 394  
479   -#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  395 +#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  396 +
  397 +- (LVCUGCLivePrepareView *)prepareView {
  398 +
  399 + if (!_prepareView) {
  400 + _prepareView = [[LVCUGCLivePrepareView alloc] initWithFrame:self.view.bounds];
  401 + [_prepareView.startButton addTarget:self action:@selector(startCapture:) forControlEvents:UIControlEventTouchUpInside];
  402 + UITapGestureRecognizer * tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
  403 + tapRecognizer.delegate = self;
  404 + [_prepareView addGestureRecognizer:tapRecognizer];
  405 + }
  406 + return _prepareView;
  407 +}
480 408  
  409 +- (FilterFunctionView *)filterView
  410 +{
  411 + if (!_filterView) {
  412 + _filterView = [[FilterFunctionView alloc] initWithFrame:CGRectMake(0, 75, SCREEN_WIDTH, 200)];
  413 + _filterView.hidden = YES;
  414 + }
  415 + return _filterView;
  416 +}
  417 +
  418 +- (UIView *)captureView { // 拍摄视图
  419 +
  420 + if (!_captureView) {
  421 + _captureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
  422 + _captureView.backgroundColor = [UIColor blackColor];
  423 + }
  424 + return _captureView;
  425 +}
  426 +
  427 +- (UIButton *)quitButton {
  428 +
  429 + if (!_quitButton) {
  430 + _quitButton = [self createButtonWithFrame:CGRectMake(SCREEN_WIDTH - 50, 30, 35, 35) image:@"LiveCloseNormal" selected:@"LiveCloseTouch"];
  431 + [_quitButton addTarget:self action:@selector(quitBtnClick) forControlEvents:UIControlEventTouchUpInside];
  432 + }
  433 + return _quitButton;
  434 +}
  435 +
  436 +- (UIButton *)changeCameraButton {
  437 +
  438 + if (!_changeCameraButton) {
  439 + _changeCameraButton = [self createButtonWithFrame:CGRectMake(SCREEN_WIDTH - 100, 30, 35, 35) image:@"camera" selected:@"Select the camera"];
  440 + [_changeCameraButton addTarget:self action:@selector(changeCamera:) forControlEvents:UIControlEventTouchUpInside];
  441 + }
  442 + return _changeCameraButton;
  443 +}
  444 +
  445 +- (UIButton *)openFlashButton {
  446 +
  447 + if (!_openFlashButton) {
  448 + _openFlashButton = [self createButtonWithFrame:CGRectMake(SCREEN_WIDTH - 100, 75, 35, 35) image:@"open flash" selected:@"Flash off"];
  449 + _openFlashButton.hidden = YES;
  450 + [_openFlashButton addTarget:self action:@selector(openFlash:) forControlEvents:UIControlEventTouchUpInside];
  451 + }
  452 + return _openFlashButton;
  453 +}
  454 +
  455 +- (UIButton *)openFilterButton {
  456 +
  457 + if (!_openFilterButton) {
  458 + _openFilterButton = [self createButtonWithFrame:CGRectMake(SCREEN_WIDTH - 150, 30, 35, 35) image:@"Is closed" selected:@"Is open"];
  459 + [_openFilterButton addTarget:self action:@selector(openFilter:) forControlEvents:UIControlEventTouchUpInside];
  460 + }
  461 + return _openFilterButton;
  462 +}
  463 +
  464 +#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
481 465 - (void)addObservers {
482 466  
483 467 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureStateChange) name:CNLiveCaptureStateDidChangeNotification object:nil];
... ... @@ -517,6 +501,15 @@
517 501  
518 502 }
519 503  
  504 +- (UIButton *)createButtonWithFrame:(CGRect)frame image:(NSString *)image selected:(NSString *)selected {
  505 +
  506 + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  507 + [btn setFrame:frame];
  508 + [btn setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
  509 + [btn setImage:[UIImage imageNamed:selected] forState:UIControlStateSelected];
  510 + return btn;
  511 +}
  512 +
520 513 - (void)didReceiveMemoryWarning {
521 514 [super didReceiveMemoryWarning];
522 515 // Dispose of any resources that can be recreated.
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/View/FilterFunctionView.m
... ... @@ -28,9 +28,9 @@
28 28 {
29 29 self = [super initWithFrame:frame];
30 30 if (self) {
31   - [self addSubview:self.slider1];
32   - [self addSubview:self.slider2];
33   - [self addSubview:self.slider3];
  31 +// [self addSubview:self.slider1];
  32 +// [self addSubview:self.slider2];
  33 +// [self addSubview:self.slider3];
34 34 [self addSubview:self.effectPicker];
35 35 [self addSubview:self.filterGroupType];
36 36  
... ... @@ -135,7 +135,7 @@
135 135 - (UIPickerView *)effectPicker
136 136 {
137 137 if (!_effectPicker) {
138   - _effectPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(8, 130, self.bounds.size.width-16, 100)];
  138 + _effectPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(8, 20, self.bounds.size.width-16, 100)];
139 139 _effectPicker.showsSelectionIndicator=YES;
140 140 _effectPicker.tintColor = [UIColor whiteColor];
141 141 _effectPicker.dataSource = self;
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/View/LVCUGCLivePrepareView.h 0 → 100644
  1 +//
  2 +// LVCUGCLivePrepareView.h
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/3/27.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +@interface LVCUGCLivePrepareView : UIView
  12 +
  13 +@property (nonatomic, strong) UIButton *startButton;
  14 +
  15 +@property (nonatomic, strong) UITextField *titleTextField;
  16 +
  17 +@end
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/View/LVCUGCLivePrepareView.m 0 → 100644
  1 +//
  2 +// LVCUGCLivePrepareView.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/3/27.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "LVCUGCLivePrepareView.h"
  10 +
  11 +@interface LVCUGCLivePrepareView()
  12 +
  13 +@property (nonatomic, strong) UIImageView *iconView;
  14 +
  15 +@property (nonatomic, strong) UIView *lineView;
  16 +
  17 +@end
  18 +
  19 +@implementation LVCUGCLivePrepareView
  20 +
  21 +- (instancetype)initWithFrame:(CGRect)frame
  22 +{
  23 + self = [super initWithFrame:frame];
  24 + if (self) {
  25 + self.backgroundColor = [UIColor clearColor];
  26 + [self addSubview:self.iconView];
  27 + [self addSubview:self.titleTextField];
  28 + [self addSubview:self.lineView];
  29 + [self addSubview:self.startButton];
  30 + }
  31 + return self;
  32 +}
  33 +
  34 +#pragma mark - GetMethod !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  35 +- (UIImageView *)iconView {
  36 +
  37 + if (!_iconView) {
  38 + NSString *path = [[NSBundle mainBundle] pathForResource:@"头像" ofType:@"jpg"];
  39 + UIImage *image = [UIImage imageWithContentsOfFile:path];
  40 + _iconView = [[UIImageView alloc] initWithImage:image];
  41 + _iconView.frame = CGRectMake(10, SCREEN_HEIGHT * 0.35, 90, 90);
  42 + _iconView.layer.cornerRadius = 45;
  43 + _iconView.layer.masksToBounds = YES;
  44 + }
  45 + return _iconView;
  46 +}
  47 +
  48 +- (UITextField *)titleTextField {
  49 +
  50 + if (!_titleTextField) {
  51 + _titleTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, SCREEN_HEIGHT * 0.35 + 50, SCREEN_WIDTH - 120, 30)];
  52 +
  53 + NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc]initWithString:@"起个名字开始直播~"];
  54 +
  55 +
  56 + _titleTextField.attributedPlaceholder = placeholder;
  57 +
  58 + _titleTextField.font = [UIFont systemFontOfSize:19];
  59 + }
  60 + return _titleTextField;
  61 +}
  62 +
  63 +- (UIView *)lineView {
  64 +
  65 + if (!_lineView) {
  66 + _lineView = [[UIView alloc] initWithFrame:CGRectMake(110, SCREEN_HEIGHT * 0.35 + 82, SCREEN_WIDTH - 120, 2)];
  67 + _lineView.backgroundColor = [UIColor blackColor];
  68 + }
  69 + return _lineView;
  70 +}
  71 +
  72 +- (UIButton *)startButton {
  73 +
  74 + if (!_startButton) {
  75 + _startButton = [UIButton buttonWithType:UIButtonTypeCustom];
  76 + _startButton.frame = CGRectMake(30, SCREEN_HEIGHT * 0.62, SCREEN_WIDTH - 60, 38);
  77 + _startButton.backgroundColor = [UIColor redColor];
  78 + [_startButton setTitle:@"开始直播" forState:UIControlStateNormal];
  79 + _startButton.titleLabel.font = [UIFont systemFontOfSize:20];
  80 + [_startButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  81 + [_startButton setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
  82 + _startButton.layer.cornerRadius = 19;
  83 + _startButton.layer.masksToBounds = YES;
  84 + }
  85 + return _startButton;
  86 +}
  87 +
  88 +
  89 +@end
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Flash off.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Flash off.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Flash off.imageset/Flash off.png 0 → 100644

3.46 KB

LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Is closed.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Is closed.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Is closed.imageset/Is closed.png 0 → 100644

4.48 KB

LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Is open.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Is open.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Is open.imageset/Is open.png 0 → 100644

6.14 KB

LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Select the camera.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Select the camera.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/Select the camera.imageset/Select the camera.png 0 → 100644

2.12 KB

LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/camera.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "camera.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/camera.imageset/camera.png 0 → 100644

2.07 KB

LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/open flash.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "open flash.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 22 \ No newline at end of file
... ...
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/open flash.imageset/open flash.png 0 → 100644

3.52 KB