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,12 +164,6 @@
164 D25BF8831E7F775F007FB138 /* LVCUGCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF8821E7F775F007FB138 /* LVCUGCPlayerLoadingView.m */; }; 164 D25BF8831E7F775F007FB138 /* LVCUGCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF8821E7F775F007FB138 /* LVCUGCPlayerLoadingView.m */; };
165 D25BF8901E7F7F8F007FB138 /* UGCLoading.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */; }; 165 D25BF8901E7F7F8F007FB138 /* UGCLoading.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */; };
166 D25BF8931E7FBAEA007FB138 /* LVCUGCBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF8921E7FBAEA007FB138 /* LVCUGCBackgroundView.m */; }; 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 D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */; }; 167 D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */; };
174 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8A21E80C4FC007FB138 /* Accelerate.framework */; }; 168 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8A21E80C4FC007FB138 /* Accelerate.framework */; };
175 D25BF8A51E80EC76007FB138 /* 头像.jpg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF8A41E80EC76007FB138 /* 头像.jpg */; }; 169 D25BF8A51E80EC76007FB138 /* 头像.jpg in Resources */ = {isa = PBXBuildFile; fileRef = D25BF8A41E80EC76007FB138 /* 头像.jpg */; };
@@ -179,10 +173,17 @@ @@ -179,10 +173,17 @@
179 D2888DB41E6EC154003A77C8 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB31E6EC154003A77C8 /* HomeViewController.m */; }; 173 D2888DB41E6EC154003A77C8 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB31E6EC154003A77C8 /* HomeViewController.m */; };
180 D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */; }; 174 D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */; };
181 D29E81ED1E88DC5B008C9906 /* PriChatCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D29E81EC1E88DC5B008C9906 /* PriChatCell.m */; }; 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 D2A803081E80BD6F009D6F1C /* TopToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A803071E80BD6F009D6F1C /* TopToolView.m */; }; 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 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2501E8247D400ED084E /* ChatBarrageManager.m */; }; 182 D2B7B2511E8247D400ED084E /* ChatBarrageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2501E8247D400ED084E /* ChatBarrageManager.m */; };
184 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */; }; 183 D2B7B2541E824B2D00ED084E /* ChatBarrageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */; };
185 D2B7B2571E8261EF00ED084E /* ChatBarrOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */; }; 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 /* End PBXBuildFile section */ 187 /* End PBXBuildFile section */
187 188
188 /* Begin PBXContainerItemProxy section */ 189 /* Begin PBXContainerItemProxy section */
@@ -210,8 +211,8 @@ @@ -210,8 +211,8 @@
210 dstSubfolderSpec = 10; 211 dstSubfolderSpec = 10;
211 files = ( 212 files = (
212 811BB6851E8106AF005C6291 /* CNLivePlayerSDK.framework in Embed Frameworks */, 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 name = "Embed Frameworks"; 217 name = "Embed Frameworks";
217 runOnlyForDeploymentPostprocessing = 0; 218 runOnlyForDeploymentPostprocessing = 0;
@@ -548,8 +549,6 @@ @@ -548,8 +549,6 @@
548 D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = UGCLoading.jpeg; sourceTree = "<group>"; }; 549 D25BF88F1E7F7F8F007FB138 /* UGCLoading.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = UGCLoading.jpeg; sourceTree = "<group>"; };
549 D25BF8911E7FBAEA007FB138 /* LVCUGCBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCBackgroundView.h; sourceTree = "<group>"; }; 550 D25BF8911E7FBAEA007FB138 /* LVCUGCBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCUGCBackgroundView.h; sourceTree = "<group>"; };
550 D25BF8921E7FBAEA007FB138 /* LVCUGCBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCBackgroundView.m; sourceTree = "<group>"; }; 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 D25BF89E1E80C4BD007FB138 /* UIImage+LVCVagueImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+LVCVagueImage.h"; sourceTree = "<group>"; }; 552 D25BF89E1E80C4BD007FB138 /* UIImage+LVCVagueImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+LVCVagueImage.h"; sourceTree = "<group>"; };
554 D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+LVCVagueImage.m"; sourceTree = "<group>"; }; 553 D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+LVCVagueImage.m"; sourceTree = "<group>"; };
555 D25BF8A21E80C4FC007FB138 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 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,6 +565,8 @@
566 D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMyViewController.m; sourceTree = "<group>"; }; 565 D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMyViewController.m; sourceTree = "<group>"; };
567 D29E81EB1E88DC5B008C9906 /* PriChatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PriChatCell.h; sourceTree = "<group>"; }; 566 D29E81EB1E88DC5B008C9906 /* PriChatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PriChatCell.h; sourceTree = "<group>"; };
568 D29E81EC1E88DC5B008C9906 /* PriChatCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PriChatCell.m; sourceTree = "<group>"; }; 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 D2A803061E80BD6F009D6F1C /* TopToolView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopToolView.h; sourceTree = "<group>"; }; 570 D2A803061E80BD6F009D6F1C /* TopToolView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopToolView.h; sourceTree = "<group>"; };
570 D2A803071E80BD6F009D6F1C /* TopToolView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopToolView.m; sourceTree = "<group>"; }; 571 D2A803071E80BD6F009D6F1C /* TopToolView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopToolView.m; sourceTree = "<group>"; };
571 D2B7B24F1E8247D400ED084E /* ChatBarrageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageManager.h; sourceTree = "<group>"; }; 572 D2B7B24F1E8247D400ED084E /* ChatBarrageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrageManager.h; sourceTree = "<group>"; };
@@ -574,6 +575,8 @@ @@ -574,6 +575,8 @@
574 D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageView.m; sourceTree = "<group>"; }; 575 D2B7B2531E824B2D00ED084E /* ChatBarrageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrageView.m; sourceTree = "<group>"; };
575 D2B7B2551E8261EF00ED084E /* ChatBarrOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrOperation.h; sourceTree = "<group>"; }; 576 D2B7B2551E8261EF00ED084E /* ChatBarrOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatBarrOperation.h; sourceTree = "<group>"; };
576 D2B7B2561E8261EF00ED084E /* ChatBarrOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatBarrOperation.m; sourceTree = "<group>"; }; 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 /* End PBXFileReference section */ 580 /* End PBXFileReference section */
578 581
579 /* Begin PBXFrameworksBuildPhase section */ 582 /* Begin PBXFrameworksBuildPhase section */
@@ -583,11 +586,11 @@ @@ -583,11 +586,11 @@
583 files = ( 586 files = (
584 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */, 587 D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */,
585 D2575C7D1E76A4F300E3A8FC /* NHGiftAnimtionSDK.a in Frameworks */, 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 811BB6831E8106A2005C6291 /* CNLivePlayerSDK.framework in Frameworks */, 592 811BB6831E8106A2005C6291 /* CNLivePlayerSDK.framework in Frameworks */,
  593 + D2D236B41E88F8E600B7C517 /* CNLiveChatManager.framework in Frameworks */,
591 ); 594 );
592 runOnlyForDeploymentPostprocessing = 0; 595 runOnlyForDeploymentPostprocessing = 0;
593 }; 596 };
@@ -657,9 +660,9 @@ @@ -657,9 +660,9 @@
657 812E504E1E7699B9004F5FCD /* CNLiveSDK */ = { 660 812E504E1E7699B9004F5FCD /* CNLiveSDK */ = {
658 isa = PBXGroup; 661 isa = PBXGroup;
659 children = ( 662 children = (
  663 + D2D236B21E88F8E600B7C517 /* CNLiveChatManager.framework */,
  664 + D2D236B31E88F8E600B7C517 /* CNLiveMsgTools.framework */,
660 811BB6821E8106A2005C6291 /* CNLivePlayerSDK.framework */, 665 811BB6821E8106A2005C6291 /* CNLivePlayerSDK.framework */,
661 - D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */,  
662 - D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */,  
663 D25BF87C1E7B8C78007FB138 /* KSYGPUResource.bundle */, 666 D25BF87C1E7B8C78007FB138 /* KSYGPUResource.bundle */,
664 ); 667 );
665 path = CNLiveSDK; 668 path = CNLiveSDK;
@@ -1441,6 +1444,8 @@ @@ -1441,6 +1444,8 @@
1441 D25BF8771E7B8A82007FB138 /* FilterFunctionView.m */, 1444 D25BF8771E7B8A82007FB138 /* FilterFunctionView.m */,
1442 D25BF8781E7B8A82007FB138 /* SliderView.h */, 1445 D25BF8781E7B8A82007FB138 /* SliderView.h */,
1443 D25BF8791E7B8A82007FB138 /* SliderView.m */, 1446 D25BF8791E7B8A82007FB138 /* SliderView.m */,
  1447 + D29D88461E88C53300543A03 /* LVCUGCLivePrepareView.h */,
  1448 + D29D88471E88C53300543A03 /* LVCUGCLivePrepareView.m */,
1444 ); 1449 );
1445 path = View; 1450 path = View;
1446 sourceTree = "<group>"; 1451 sourceTree = "<group>";
@@ -1867,6 +1872,7 @@ @@ -1867,6 +1872,7 @@
1867 D2029CB31E6EADE10027CD92 /* UIScrollView+MJRefresh.m in Sources */, 1872 D2029CB31E6EADE10027CD92 /* UIScrollView+MJRefresh.m in Sources */,
1868 D2029D051E6EAE2E0027CD92 /* UILabel+labelFitSize.m in Sources */, 1873 D2029D051E6EAE2E0027CD92 /* UILabel+labelFitSize.m in Sources */,
1869 D2029CB21E6EADE10027CD92 /* UIScrollView+MJExtension.m in Sources */, 1874 D2029CB21E6EADE10027CD92 /* UIScrollView+MJExtension.m in Sources */,
  1875 + D29D88481E88C53300543A03 /* LVCUGCLivePrepareView.m in Sources */,
1870 D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */, 1876 D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */,
1871 D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */, 1877 D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */,
1872 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */, 1878 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */,
LiveVideoCloud/LiveVideoCloud/AppDelegate/AppDelegate.m
@@ -27,20 +27,20 @@ @@ -27,20 +27,20 @@
27 27
28 //初始化聊天SDK并连接服务器 28 //初始化聊天SDK并连接服务器
29 [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:AppKey appId:AppId]; 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 } error:^(CNLiveChatConnectErrorCode errors) { 40 } error:^(CNLiveChatConnectErrorCode errors) {
33 NSLog(@"连接服务器失败-----%ld", errors); 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 return YES; 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,17 +20,17 @@
20 /** 20 /**
21 目标ID(消息来自聊天室的ID / 接收者ID) 21 目标ID(消息来自聊天室的ID / 接收者ID)
22 */ 22 */
23 -@property (nonatomic, assign) NSString *targetId; 23 +@property (nonatomic, copy) NSString *targetId;
24 24
25 /** 25 /**
26 消息ID(本地存储的消息的唯一值(数据库索引唯一值)) 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 发送者的用户信息(userId, name, portraitUri) 36 发送者的用户信息(userId, name, portraitUri)
LiveVideoCloud/LiveVideoCloud/Classes/CNLiveSDK/CNLiveChatManager.framework/Headers/CNLiveChatUserInfo.h
@@ -13,17 +13,17 @@ @@ -13,17 +13,17 @@
13 /*! 13 /*!
14 用户ID(一旦以一个用户ID连接到服务器,就不能再修改用户ID了,如果修改也会被忽略) 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 用户头像的URL 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,6 +8,7 @@
8 8
9 #import "BounceView.h" 9 #import "BounceView.h"
10 #import "userInfoModel.h" 10 #import "userInfoModel.h"
  11 +#import "LiveBaseView.h"
11 12
12 @interface BounceView () 13 @interface BounceView ()
13 14
@@ -60,21 +61,24 @@ @@ -60,21 +61,24 @@
60 - (void)closeClick 61 - (void)closeClick
61 { 62 {
62 [Tools closeBouces]; 63 [Tools closeBouces];
  64 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypeHome model:_model];
63 } 65 }
64 66
65 - (void)aiteHeBtnClick 67 - (void)aiteHeBtnClick
66 { 68 {
67 - NSLog(@"aiteHeBtnClick"); 69 + [Tools closeBouces];
  70 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypeAite model:_model];
68 } 71 }
69 72
70 - (void)privateChatClick 73 - (void)privateChatClick
71 { 74 {
72 - NSLog(@"privateChatClick"); 75 + [Tools closeBouces];
  76 + [[LiveBaseView liveBaseView] bounceBtnType:BounceBtnTypePriChat model:_model];
73 } 77 }
74 78
75 - (void)homeBtnClick 79 - (void)homeBtnClick
76 { 80 {
77 - NSLog(@"homeBtnClick"); 81 + [Tools closeBouces];
78 } 82 }
79 83
80 - (UIImageView *)icon 84 - (UIImageView *)icon
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatMsgModel/chatMsgModel.m
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 //文字 22 //文字
23 CGFloat textMaxW = self.cellWidth; 23 CGFloat textMaxW = self.cellWidth;
24 CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT); 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 _cellHeight += textSize.height + ChatCellMargin; 28 _cellHeight += textSize.height + ChatCellMargin;
@@ -40,10 +40,10 @@ @@ -40,10 +40,10 @@
40 //文字 40 //文字
41 CGFloat textMaxW = self.priCellWidth; 41 CGFloat textMaxW = self.priCellWidth;
42 CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT); 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 // NSLog(@"pricellHeight = %f",_priCellHeight); 47 // NSLog(@"pricellHeight = %f",_priCellHeight);
48 return _priCellHeight; 48 return _priCellHeight;
49 } 49 }
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LVCInteractionController.m
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 { 32 {
33 if (!_liveBaseView) 33 if (!_liveBaseView)
34 { 34 {
35 - _liveBaseView = [[LiveBaseView alloc] initWithFrame:SCREEN_RECT]; 35 + _liveBaseView = [LiveBaseView liveBaseView];
36 _liveBaseView.viewController = self; 36 _liveBaseView.viewController = self;
37 _liveBaseView.backgroundColor = [UIColor clearColor]; 37 _liveBaseView.backgroundColor = [UIColor clearColor];
38 } 38 }
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LiveBaseView.h
@@ -9,9 +9,20 @@ @@ -9,9 +9,20 @@
9 #import "BaseView.h" 9 #import "BaseView.h"
10 @class PresentView; 10 @class PresentView;
11 @class AnimationBaseView; 11 @class AnimationBaseView;
  12 +
  13 +typedef NS_ENUM(NSInteger, BounceBtnType) {//弹窗按钮类型
  14 + BounceBtnTypeAite = 1,//@TA按钮点击
  15 + BounceBtnTypePriChat ,//私聊按钮点击
  16 + BounceBtnTypeHome ,//主页按钮点击
  17 +};
  18 +
12 @interface LiveBaseView : BaseView 19 @interface LiveBaseView : BaseView
13 20
14 @property (nonatomic ,strong) UIViewController * _Nullable viewController; 21 @property (nonatomic ,strong) UIViewController * _Nullable viewController;
15 @property (nonatomic ,strong ,readonly) PresentView * _Nullable presentView; 22 @property (nonatomic ,strong ,readonly) PresentView * _Nullable presentView;
16 @property (nonatomic ,strong ,readonly) AnimationBaseView * _Nullable animationBaseView; 23 @property (nonatomic ,strong ,readonly) AnimationBaseView * _Nullable animationBaseView;
  24 +
  25 ++ (instancetype _Nullable)liveBaseView;
  26 +
  27 +- (void)bounceBtnType:(BounceBtnType)btnType model:(userInfoModel *_Nonnull)model;
17 @end 28 @end
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LiveBaseView.m
@@ -58,6 +58,17 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -58,6 +58,17 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
58 58
59 @implementation LiveBaseView 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 - (instancetype)initWithFrame:(CGRect)frame 72 - (instancetype)initWithFrame:(CGRect)frame
62 { 73 {
63 if (self = [super initWithFrame:frame]) { 74 if (self = [super initWithFrame:frame]) {
@@ -76,8 +87,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -76,8 +87,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
76 self.chatTableView.alpha = 0.7; 87 self.chatTableView.alpha = 0.7;
77 88
78 [self.animationBaseView addSubview:self.topToolsView]; 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 [CNLiveChatManager sharedCNLiveChatManager].delegate = self; 93 [CNLiveChatManager sharedCNLiveChatManager].delegate = self;
83 [[CNLiveChatManager sharedCNLiveChatManager] joinChatRoom:@"1234" messageCount:10 success:^(NSString *targetId) { 94 [[CNLiveChatManager sharedCNLiveChatManager] joinChatRoom:@"1234" messageCount:10 success:^(NSString *targetId) {
@@ -92,22 +103,25 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -92,22 +103,25 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
92 } 103 }
93 104
94 - (void)keyboardWillShow:(NSNotification *)notify { 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 - (void)keyboardWillHidden:(NSNotification *)notify { 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 - (void)createCommentsView { 127 - (void)createCommentsView {
@@ -208,9 +222,34 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -208,9 +222,34 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
208 textField.text = @""; 222 textField.text = @"";
209 } 223 }
210 [textField resignFirstResponder]; 224 [textField resignFirstResponder];
  225 +
211 return YES; 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 #pragma mark - bottomBtnActionDelegate 253 #pragma mark - bottomBtnActionDelegate
215 - (void)bottomActionWithType:(BtnClickType)btnType button:(UIButton *)button 254 - (void)bottomActionWithType:(BtnClickType)btnType button:(UIButton *)button
216 { 255 {
@@ -252,7 +291,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -252,7 +291,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
252 [self addSubview:privateView]; 291 [self addSubview:privateView];
253 privateView.delegate = self; 292 privateView.delegate = self;
254 self.giftPopView = privateView; 293 self.giftPopView = privateView;
255 -  
256 [UIView animateWithDuration:0.5 animations:^{ 294 [UIView animateWithDuration:0.5 animations:^{
257 privateView.top -= 300; 295 privateView.top -= 300;
258 } completion:^(BOOL finished) { 296 } completion:^(BOOL finished) {
@@ -303,6 +341,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -303,6 +341,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
303 self.giftPopView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 300); 341 self.giftPopView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 300);
304 [self hiddenView:NO]; 342 [self hiddenView:NO];
305 } completion:^(BOOL finished) { 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,7 +494,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
454 model.content = content; 494 model.content = content;
455 model.ID = message.targetId; 495 model.ID = message.targetId;
456 model.icon = message.userInfo.portraitUri; 496 model.icon = message.userInfo.portraitUri;
457 - model.cellWidth = privateView.tableView.width - 20; 497 + model.priCellWidth = privateView.tableView.width * 0.5 - 30;
458 [privateView.chatArray addObject:model]; 498 [privateView.chatArray addObject:model];
459 [privateView.tableView reloadData]; 499 [privateView.tableView reloadData];
460 500
@@ -606,8 +646,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -606,8 +646,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
606 { 646 {
607 if (!_topToolsView) 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 return _topToolsView; 651 return _topToolsView;
613 } 652 }
@@ -623,7 +662,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 @@ -623,7 +662,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型
623 tableView.showsHorizontalScrollIndicator = NO; 662 tableView.showsHorizontalScrollIndicator = NO;
624 tableView.bounces = NO; 663 tableView.bounces = NO;
625 tableView.backgroundColor = [UIColor clearColor]; 664 tableView.backgroundColor = [UIColor clearColor];
626 - tableView.separatorStyle = UITableViewCellSeparatorStyleNone;  
627 _chatTableView = tableView; 665 _chatTableView = tableView;
628 } 666 }
629 return _chatTableView; 667 return _chatTableView;
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/PrivateView/PriChatCell.m
@@ -10,14 +10,12 @@ @@ -10,14 +10,12 @@
10 #import "chatMsgModel.h" 10 #import "chatMsgModel.h"
11 11
12 #define CHAT_POP_WIDTH 260 12 #define CHAT_POP_WIDTH 260
13 -#define TOP_MARGIN 6  
14 13
15 @interface PriChatCell () 14 @interface PriChatCell ()
16 15
17 @property (nonatomic ,strong) chatMsgModel * _Nullable model; 16 @property (nonatomic ,strong) chatMsgModel * _Nullable model;
18 @property (nonatomic ,strong) UIImageView * _Nullable icon; 17 @property (nonatomic ,strong) UIImageView * _Nullable icon;
19 @property (nonatomic ,strong) UILabel * _Nullable content; 18 @property (nonatomic ,strong) UILabel * _Nullable content;
20 -@property (nonatomic ,strong) UIImageView * _Nullable bgImgView;  
21 19
22 @end 20 @end
23 21
@@ -43,13 +41,19 @@ @@ -43,13 +41,19 @@
43 41
44 - (void)bindView 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 #pragma mark - getter 59 #pragma mark - getter
@@ -58,10 +62,12 @@ @@ -58,10 +62,12 @@
58 if (!_content) 62 if (!_content)
59 { 63 {
60 _content = [[UILabel alloc] init]; 64 _content = [[UILabel alloc] init];
61 - _content.textAlignment = NSTextAlignmentCenter; 65 + _content.textAlignment = NSTextAlignmentLeft;
62 _content.textColor = [UIColor blackColor]; 66 _content.textColor = [UIColor blackColor];
63 _content.numberOfLines = 0; 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 [self addSubview:_content]; 71 [self addSubview:_content];
66 } 72 }
67 return _content; 73 return _content;
@@ -79,16 +85,6 @@ @@ -79,16 +85,6 @@
79 return _icon; 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 - (void)awakeFromNib { 88 - (void)awakeFromNib {
93 [super awakeFromNib]; 89 [super awakeFromNib];
94 // Initialization code 90 // Initialization code
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/PrivateView/PrivateView.m
@@ -45,8 +45,8 @@ static NSString *message_content = @&quot;message_content&quot;; @@ -45,8 +45,8 @@ static NSString *message_content = @&quot;message_content&quot;;
45 [self.bottomTool addSubview:self.sendBtn]; 45 [self.bottomTool addSubview:self.sendBtn];
46 [self.bottomTool addSubview:self.textField]; 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 return self; 51 return self;
52 } 52 }
@@ -65,22 +65,26 @@ static NSString *message_content = @&quot;message_content&quot;; @@ -65,22 +65,26 @@ static NSString *message_content = @&quot;message_content&quot;;
65 65
66 - (void)keyboardWillShow:(NSNotification *)notify { 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 - (void)keyboardWillHidden:(NSNotification *)notify { 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 #pragma mark - UITextFieldDelegate 90 #pragma mark - UITextFieldDelegate
@@ -91,7 +95,7 @@ static NSString *message_content = @&quot;message_content&quot;; @@ -91,7 +95,7 @@ static NSString *message_content = @&quot;message_content&quot;;
91 NSDictionary *dic = @{message_content:textField.text}; 95 NSDictionary *dic = @{message_content:textField.text};
92 weakself 96 weakself
93 NSString *message = [Tools dictionaryToJson:dic]; 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 dispatch_async(dispatch_get_main_queue(), ^{ 100 dispatch_async(dispatch_get_main_queue(), ^{
97 strongself 101 strongself
@@ -103,7 +107,7 @@ static NSString *message_content = @&quot;message_content&quot;; @@ -103,7 +107,7 @@ static NSString *message_content = @&quot;message_content&quot;;
103 model.name = message.userInfo.name; 107 model.name = message.userInfo.name;
104 model.isMine = YES; 108 model.isMine = YES;
105 model.content = content; 109 model.content = content;
106 -// model.ID = message.targetId; 110 + model.ID = message.targetId;
107 model.icon = message.userInfo.portraitUri; 111 model.icon = message.userInfo.portraitUri;
108 model.priCellWidth = self.tableView.width * 0.5 - 30; 112 model.priCellWidth = self.tableView.width * 0.5 - 30;
109 // model.sendTime;//发送时间 113 // model.sendTime;//发送时间
@@ -205,6 +209,9 @@ static NSString *message_content = @&quot;message_content&quot;; @@ -205,6 +209,9 @@ static NSString *message_content = @&quot;message_content&quot;;
205 _tableView.dataSource = self; 209 _tableView.dataSource = self;
206 _tableView.showsVerticalScrollIndicator = NO; 210 _tableView.showsVerticalScrollIndicator = NO;
207 _tableView.showsHorizontalScrollIndicator = NO; 211 _tableView.showsHorizontalScrollIndicator = NO;
  212 + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  213 + _tableView.bounces = NO;
  214 + _tableView.backgroundColor = [UIColor clearColor];
208 } 215 }
209 return _tableView; 216 return _tableView;
210 } 217 }
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.h
@@ -8,7 +8,10 @@ @@ -8,7 +8,10 @@
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 10
  11 +@class userInfoModel;
11 @interface TopToolView : UIView 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 @end 17 @end
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.m
@@ -7,26 +7,96 @@ @@ -7,26 +7,96 @@
7 // 7 //
8 8
9 #import "TopToolView.h" 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 @implementation TopToolView 21 @implementation TopToolView
12 22
13 - (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost 23 - (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost
14 { 24 {
15 if (self = [super initWithFrame:frame]) { 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 if (isHost) { 30 if (isHost) {
18 //主播端没有自己头像 31 //主播端没有自己头像
19 32
20 -  
21 }else 33 }else
22 {//观众端有主播头像 34 {//观众端有主播头像
23 -  
24 - 35 + [self addSubview:self.icon];
25 } 36 }
26 } 37 }
27 return self; 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 // Only override drawRect: if you perform custom drawing. 101 // Only override drawRect: if you perform custom drawing.
32 // An empty implementation adversely affects performance during animation. 102 // An empty implementation adversely affects performance during animation.
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/Controller/LVCLiveViewController.m
@@ -10,45 +10,32 @@ @@ -10,45 +10,32 @@
10 #import <CNLivePlayerSDK/CNLiveGPUStreamerKit.h> 10 #import <CNLivePlayerSDK/CNLiveGPUStreamerKit.h>
11 #import <CNLivePlayerSDK/CNLiveWebcastManager.h> 11 #import <CNLivePlayerSDK/CNLiveWebcastManager.h>
12 #import "FilterFunctionView.h" 12 #import "FilterFunctionView.h"
  13 +#import "LVCUGCLivePrepareView.h"
13 14
14 #define KAppId @"60_irn9edco29" 15 #define KAppId @"60_irn9edco29"
15 #define KAppKey @"69fe70bda67e059286ad509d9f5377f815955645b52f94" 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 - (void)viewDidLoad { 40 - (void)viewDidLoad {
54 [super viewDidLoad]; 41 [super viewDidLoad];
@@ -56,17 +43,18 @@ @@ -56,17 +43,18 @@
56 self.view.backgroundColor = [UIColor blueColor]; 43 self.view.backgroundColor = [UIColor blueColor];
57 44
58 [self.view addSubview:self.captureView]; 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 NSString *activityId = [NSString stringWithFormat:@"%d%d%d%d%d",arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9]; 54 NSString *activityId = [NSString stringWithFormat:@"%d%d%d%d%d",arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9];
67 - // 初始化直播云 55 +
68 [[CNLiveWebcastManager manager] initWithAppId:KAppId appKey:KAppKey]; 56 [[CNLiveWebcastManager manager] initWithAppId:KAppId appKey:KAppKey];
69 - // 初始化推流 57 +
70 _kitCN = [[CNLiveGPUStreamerKit alloc] initWithDefaultConfigWithActivityId:activityId channelId:@"iOStest" isHorizontalScreen:@"0"]; 58 _kitCN = [[CNLiveGPUStreamerKit alloc] initWithDefaultConfigWithActivityId:activityId channelId:@"iOStest" isHorizontalScreen:@"0"];
71 59
72 // _kitCN.activityName = @"iOS test"; 60 // _kitCN.activityName = @"iOS test";
@@ -74,25 +62,12 @@ @@ -74,25 +62,12 @@
74 62
75 // 设置推流配置 63 // 设置推流配置
76 [self setStreamerCfg]; 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 UITapGestureRecognizer * singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)]; 68 UITapGestureRecognizer * singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
91 singleRecognizer.delegate = self; 69 singleRecognizer.delegate = self;
92 [self.captureView addGestureRecognizer:singleRecognizer]; 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 #pragma mark - initialization Streamer 73 #pragma mark - initialization Streamer
@@ -124,75 +99,24 @@ @@ -124,75 +99,24 @@
124 // 启动预览 99 // 启动预览
125 [_kitCN startPreview:self.captureView]; 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 #pragma mark - UIButton Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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 button.selected = !button.selected; 121 button.selected = !button.selected;
198 122
@@ -220,14 +144,14 @@ @@ -220,14 +144,14 @@
220 } else { 144 } else {
221 145
222 _filterView.hidden = YES; 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 // if (button.selected) { 155 // if (button.selected) {
232 // _kitCN.cameraPosition = AVCaptureDevicePositionBack; 156 // _kitCN.cameraPosition = AVCaptureDevicePositionBack;
233 // }else{ 157 // }else{
@@ -237,15 +161,16 @@ @@ -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 [_kitCN toggleTorch]; 168 [_kitCN toggleTorch];
244 // [_kitCN setTorchMode:AVCaptureTorchModeOn]; 169 // [_kitCN setTorchMode:AVCaptureTorchModeOn];
245 } 170 }
246 171
247 -// 退出  
248 -- (void)closeBtnClivk { 172 +
  173 +- (void)quitBtnClick { // 退出
249 174
250 if (_kitCN.streamState == CNLiveStreamStateConnected) { 175 if (_kitCN.streamState == CNLiveStreamStateConnected) {
251 [_kitCN stopStream]; 176 [_kitCN stopStream];
@@ -259,38 +184,32 @@ @@ -259,38 +184,32 @@
259 184
260 185
261 #pragma mark - UIGestureRecognizer Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 186 #pragma mark - UIGestureRecognizer Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
262 -//对焦与曝光  
263 -- (void)onTap:(UIGestureRecognizer *)sender { 187 +
  188 +- (void)onTap:(UIGestureRecognizer *)sender { //对焦与曝光
264 189
265 CGPoint current = [sender locationInView:self.view]; 190 CGPoint current = [sender locationInView:self.view];
266 CGPoint point = [self convertToPointOfInterestFromViewCoordinates:current]; 191 CGPoint point = [self convertToPointOfInterestFromViewCoordinates:current];
267 [_kitCN exposureAtPoint:point]; 192 [_kitCN exposureAtPoint:point];
268 [_kitCN focusAtPoint:point]; 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 #pragma mark - notification !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 200 #pragma mark - notification !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
282 -// 进入后台  
283 -- (void)enterBg { 201 +
  202 +- (void)enterBg { // 进入后台
284 203
285 [_kitCN appEnterBackground]; 204 [_kitCN appEnterBackground];
286 } 205 }
287 -// 回到前台  
288 -- (void)becameActive { 206 +
  207 +- (void)becameActive { // 回到前台
289 208
290 [_kitCN appBecomeActive]; 209 [_kitCN appBecomeActive];
291 } 210 }
292 -// 采集状态改变  
293 -- (void)captureStateChange { 211 +
  212 +- (void)captureStateChange { // 采集状态改变
294 213
295 if ( _kitCN.captureState == CNLiveCaptureStateIdle){ 214 if ( _kitCN.captureState == CNLiveCaptureStateIdle){
296 //初始化时状态为空闲 215 //初始化时状态为空闲
@@ -325,8 +244,8 @@ @@ -325,8 +244,8 @@
325 244
326 } 245 }
327 } 246 }
328 -// 推流状态改变  
329 -- (void)streamStateChange { 247 +
  248 +- (void)streamStateChange { // 推流状态改变
330 249
331 if (_kitCN.streamState == CNLiveStreamStateIdle) { 250 if (_kitCN.streamState == CNLiveStreamStateIdle) {
332 251
@@ -362,8 +281,8 @@ @@ -362,8 +281,8 @@
362 NSLog(@"---------CNLiveStopStreamSuccess"); 281 NSLog(@"---------CNLiveStopStreamSuccess");
363 } 282 }
364 } 283 }
365 -// 推流失败  
366 -- (void)onStreamError { 284 +
  285 +- (void)onStreamError { // 推流失败
367 286
368 CNLiveStreamErrorCode err = _kitCN.streamErrorCode; 287 CNLiveStreamErrorCode err = _kitCN.streamErrorCode;
369 288
@@ -384,7 +303,6 @@ @@ -384,7 +303,6 @@
384 else if ( CNLiveStreamErrorCode_ABNORMAL == err) { 303 else if ( CNLiveStreamErrorCode_ABNORMAL == err) {
385 304
386 [self toast:@"推流异常中断~~"]; 305 [self toast:@"推流异常中断~~"];
387 - _startLiveBtn.selected = NO;  
388 306
389 } else if (err == CNLiveStreamErrorCode_CODEC_OPEN_FAILED) { 307 } else if (err == CNLiveStreamErrorCode_CODEC_OPEN_FAILED) {
390 NSLog(@"video codec open failed, try software codec"); 308 NSLog(@"video codec open failed, try software codec");
@@ -403,8 +321,8 @@ @@ -403,8 +321,8 @@
403 321
404 } 322 }
405 323
406 -// 重试  
407 -- (void) tryReconnect { 324 +
  325 +- (void) tryReconnect { // 重试
408 326
409 dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)); 327 dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC));
410 dispatch_after(delay, dispatch_get_main_queue(), ^{ 328 dispatch_after(delay, dispatch_get_main_queue(), ^{
@@ -415,18 +333,16 @@ @@ -415,18 +333,16 @@
415 333
416 [_kitCN startStream:^{ 334 [_kitCN startStream:^{
417 NSLog(@"开启推流成功 ------- success"); 335 NSLog(@"开启推流成功 ------- success");
418 - _startLiveBtn.selected = YES;  
419 336
420 } failure:^(NSDictionary *errorDic) { 337 } failure:^(NSDictionary *errorDic) {
421 [self toast:errorDic[@"errorMessage"]]; 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 UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil 347 UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
432 message:message 348 message:message
@@ -441,8 +357,8 @@ @@ -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 CGPoint pointOfInterest = CGPointMake(.5f, .5f); 363 CGPoint pointOfInterest = CGPointMake(.5f, .5f);
448 CGSize frameSize = self.view.frame.size; 364 CGSize frameSize = self.view.frame.size;
@@ -476,8 +392,76 @@ @@ -476,8 +392,76 @@
476 return pointOfInterest; 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 - (void)addObservers { 465 - (void)addObservers {
482 466
483 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureStateChange) name:CNLiveCaptureStateDidChangeNotification object:nil]; 467 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureStateChange) name:CNLiveCaptureStateDidChangeNotification object:nil];
@@ -517,6 +501,15 @@ @@ -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 - (void)didReceiveMemoryWarning { 513 - (void)didReceiveMemoryWarning {
521 [super didReceiveMemoryWarning]; 514 [super didReceiveMemoryWarning];
522 // Dispose of any resources that can be recreated. 515 // Dispose of any resources that can be recreated.
LiveVideoCloud/LiveVideoCloud/Classes/Sections/LiveSections/View/FilterFunctionView.m
@@ -28,9 +28,9 @@ @@ -28,9 +28,9 @@
28 { 28 {
29 self = [super initWithFrame:frame]; 29 self = [super initWithFrame:frame];
30 if (self) { 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 [self addSubview:self.effectPicker]; 34 [self addSubview:self.effectPicker];
35 [self addSubview:self.filterGroupType]; 35 [self addSubview:self.filterGroupType];
36 36
@@ -135,7 +135,7 @@ @@ -135,7 +135,7 @@
135 - (UIPickerView *)effectPicker 135 - (UIPickerView *)effectPicker
136 { 136 {
137 if (!_effectPicker) { 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 _effectPicker.showsSelectionIndicator=YES; 139 _effectPicker.showsSelectionIndicator=YES;
140 _effectPicker.tintColor = [UIColor whiteColor]; 140 _effectPicker.tintColor = [UIColor whiteColor];
141 _effectPicker.dataSource = self; 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 22 \ No newline at end of file
LiveVideoCloud/LiveVideoCloud/animation.xcassets/player/open flash.imageset/open flash.png 0 → 100644

3.52 KB