Commit c5978c8ebd8bdacf337b615ff9b18ec040a7e8a8
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
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 = @"message_content"; | @@ -45,8 +45,8 @@ static NSString *message_content = @"message_content"; | ||
| 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 = @"message_content"; | @@ -65,22 +65,26 @@ static NSString *message_content = @"message_content"; | ||
| 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 = @"message_content"; | @@ -91,7 +95,7 @@ static NSString *message_content = @"message_content"; | ||
| 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 = @"message_content"; | @@ -103,7 +107,7 @@ static NSString *message_content = @"message_content"; | ||
| 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 = @"message_content"; | @@ -205,6 +209,9 @@ static NSString *message_content = @"message_content"; | ||
| 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