南鑫林 hace 5 años
padre
commit
afabdfa9c4
Se han modificado 21 ficheros con 1445 adiciones y 59 borrados
  1. 111 3
      RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj
  2. 2 2
      RainbowPlanet/RainbowPlanet/Base/BaseTabbarViewController/BaseTabbarViewController.swift
  3. 1 1
      RainbowPlanet/RainbowPlanet/Base/BaseView/BaseView.swift
  4. 2 0
      RainbowPlanet/RainbowPlanet/Macro/ColorMacro.swift
  5. 155 0
      RainbowPlanet/RainbowPlanet/Manager/AliyunVodManager/AliyunVodUptoyouDBManager/AliyunVodUptoyouDBManager.swift
  6. 170 0
      RainbowPlanet/RainbowPlanet/Manager/AliyunVodManager/AliyunVodUptoyouDBManager/Model/AliyunVodUptoyouEffectsModel.swift
  7. 8 0
      RainbowPlanet/RainbowPlanet/Manager/PathManager/PathManager.swift
  8. 6 0
      RainbowPlanet/RainbowPlanet/Modules/BackyardModule/Backyard/ViewController/BackyardViewController.swift
  9. 0 2
      RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/ResourceManager/Views/AliyunBeautyLevelCollectionViewCell.m
  10. 0 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewAuthorization/PublishNewAuthorizationView.swift
  11. 103 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectBeautyView/PublishNewEffectBeautyCollectionViewCell.swift
  12. 72 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectBeautyView/PublishNewEffectBeautyView.swift
  13. 171 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterBeautyView/PublishNewEffectFilterBeautyView.swift
  14. 90 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterView/PublishNewEffectFilterCollectionViewCell.swift
  15. 67 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterView/PublishNewEffectFilterView.swift
  16. 126 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewProgress/PublishNewProgressView.swift
  17. 36 0
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewView/PublishNewRecorderPreview.swift
  18. 104 1
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoSetView.swift
  19. 186 38
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoView.swift
  20. 30 7
      RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/ViewController/PublishNewViewController.swift
  21. 5 5
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceManger/SwiftMoyaNetWorkManager/ApiMacro.swift

+ 111 - 3
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -177,6 +177,7 @@
 		A757C92E22744ACE00226355 /* AddressManagerListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A757C92D22744ACE00226355 /* AddressManagerListModel.swift */; };
 		A757C9302274839900226355 /* SelfMentionAddressListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A757C92F2274839900226355 /* SelfMentionAddressListModel.swift */; };
 		A757C9342274882E00226355 /* UIScrollView+MJRefreshEX.m in Sources */ = {isa = PBXBuildFile; fileRef = A757C9322274882E00226355 /* UIScrollView+MJRefreshEX.m */; };
+		A75AEE5423404DE00092413C /* PublishNewProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75AEE5323404DE00092413C /* PublishNewProgressView.swift */; };
 		A75B782222DEC2F8007B986A /* SepcialOneTypeLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75B782022DEC2F8007B986A /* SepcialOneTypeLayout.swift */; };
 		A75B782322DEC2F8007B986A /* RedemptionAreaSpecialOneTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75B782122DEC2F8007B986A /* RedemptionAreaSpecialOneTableViewCell.swift */; };
 		A75B782522DEC592007B986A /* SpecialOneTypeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75B782422DEC592007B986A /* SpecialOneTypeCollectionViewCell.swift */; };
@@ -279,6 +280,14 @@
 		A7811CCB2323A6D400C2D8DE /* YPDouYinLikeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = A7811CCA2323A6D300C2D8DE /* YPDouYinLikeAnimation.m */; };
 		A7811CD22323D25A00C2D8DE /* PublishNewVideoPhotoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7811CCF2323D25A00C2D8DE /* PublishNewVideoPhotoView.swift */; };
 		A7811CD32323D25A00C2D8DE /* PublishNewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7811CD12323D25A00C2D8DE /* PublishNewViewController.swift */; };
+		A78168DC23418C3200033496 /* AliyunVodUptoyouDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168DB23418C3200033496 /* AliyunVodUptoyouDBManager.swift */; };
+		A78168DF2341A8FD00033496 /* AliyunVodUptoyouEffectsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168DE2341A8FD00033496 /* AliyunVodUptoyouEffectsModel.swift */; };
+		A78168E22341CE1D00033496 /* PublishNewEffectFilterBeautyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168E12341CE1D00033496 /* PublishNewEffectFilterBeautyView.swift */; };
+		A78168E42341EDB300033496 /* PublishNewRecorderPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168E32341EDB300033496 /* PublishNewRecorderPreview.swift */; };
+		A78168E72341F36000033496 /* PublishNewEffectFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168E62341F36000033496 /* PublishNewEffectFilterView.swift */; };
+		A78168E92341F37600033496 /* PublishNewEffectBeautyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168E82341F37600033496 /* PublishNewEffectBeautyView.swift */; };
+		A78168EE2341F62500033496 /* PublishNewEffectFilterCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168ED2341F62500033496 /* PublishNewEffectFilterCollectionViewCell.swift */; };
+		A78168F0234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78168EF234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift */; };
 		A7824AFB2271EA2600ABA381 /* SelfMentionContactsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7824AFA2271EA2600ABA381 /* SelfMentionContactsListView.swift */; };
 		A7824AFD2271EAC900ABA381 /* SelfMentionContactsListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7824AFC2271EAC900ABA381 /* SelfMentionContactsListTableViewCell.swift */; };
 		A7824B002271F0DD00ABA381 /* EditSelfMentionContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7824AFF2271F0DD00ABA381 /* EditSelfMentionContactsViewController.swift */; };
@@ -838,6 +847,7 @@
 		A757C92F2274839900226355 /* SelfMentionAddressListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelfMentionAddressListModel.swift; sourceTree = "<group>"; };
 		A757C9322274882E00226355 /* UIScrollView+MJRefreshEX.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefreshEX.m"; sourceTree = "<group>"; };
 		A757C9332274882E00226355 /* UIScrollView+MJRefreshEX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefreshEX.h"; sourceTree = "<group>"; };
+		A75AEE5323404DE00092413C /* PublishNewProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewProgressView.swift; sourceTree = "<group>"; };
 		A75B782022DEC2F8007B986A /* SepcialOneTypeLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SepcialOneTypeLayout.swift; sourceTree = "<group>"; };
 		A75B782122DEC2F8007B986A /* RedemptionAreaSpecialOneTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RedemptionAreaSpecialOneTableViewCell.swift; sourceTree = "<group>"; };
 		A75B782422DEC592007B986A /* SpecialOneTypeCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecialOneTypeCollectionViewCell.swift; sourceTree = "<group>"; };
@@ -954,6 +964,14 @@
 		A7811CCA2323A6D300C2D8DE /* YPDouYinLikeAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YPDouYinLikeAnimation.m; sourceTree = "<group>"; };
 		A7811CCF2323D25A00C2D8DE /* PublishNewVideoPhotoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishNewVideoPhotoView.swift; sourceTree = "<group>"; };
 		A7811CD12323D25A00C2D8DE /* PublishNewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishNewViewController.swift; sourceTree = "<group>"; };
+		A78168DB23418C3200033496 /* AliyunVodUptoyouDBManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AliyunVodUptoyouDBManager.swift; sourceTree = "<group>"; };
+		A78168DE2341A8FD00033496 /* AliyunVodUptoyouEffectsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AliyunVodUptoyouEffectsModel.swift; sourceTree = "<group>"; };
+		A78168E12341CE1D00033496 /* PublishNewEffectFilterBeautyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewEffectFilterBeautyView.swift; sourceTree = "<group>"; };
+		A78168E32341EDB300033496 /* PublishNewRecorderPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewRecorderPreview.swift; sourceTree = "<group>"; };
+		A78168E62341F36000033496 /* PublishNewEffectFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewEffectFilterView.swift; sourceTree = "<group>"; };
+		A78168E82341F37600033496 /* PublishNewEffectBeautyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewEffectBeautyView.swift; sourceTree = "<group>"; };
+		A78168ED2341F62500033496 /* PublishNewEffectFilterCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewEffectFilterCollectionViewCell.swift; sourceTree = "<group>"; };
+		A78168EF234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublishNewEffectBeautyCollectionViewCell.swift; sourceTree = "<group>"; };
 		A7824AFA2271EA2600ABA381 /* SelfMentionContactsListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfMentionContactsListView.swift; sourceTree = "<group>"; };
 		A7824AFC2271EAC900ABA381 /* SelfMentionContactsListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfMentionContactsListTableViewCell.swift; sourceTree = "<group>"; };
 		A7824AFF2271F0DD00ABA381 /* EditSelfMentionContactsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditSelfMentionContactsViewController.swift; sourceTree = "<group>"; };
@@ -2401,6 +2419,32 @@
 			path = MJRefreshEX;
 			sourceTree = "<group>";
 		};
+		A75AEE5123404CF00092413C /* PublishNewProgress */ = {
+			isa = PBXGroup;
+			children = (
+				A75AEE5323404DE00092413C /* PublishNewProgressView.swift */,
+			);
+			path = PublishNewProgress;
+			sourceTree = "<group>";
+		};
+		A75AEE5223404D0A0092413C /* PublishNewAuthorization */ = {
+			isa = PBXGroup;
+			children = (
+				A742C08B2325E8E40043184E /* PublishNewAuthorizationView.swift */,
+			);
+			path = PublishNewAuthorization;
+			sourceTree = "<group>";
+		};
+		A75AEE552340890A0092413C /* PublishNewView */ = {
+			isa = PBXGroup;
+			children = (
+				A7811CCF2323D25A00C2D8DE /* PublishNewVideoPhotoView.swift */,
+				A74144A8232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift */,
+				A78168E32341EDB300033496 /* PublishNewRecorderPreview.swift */,
+			);
+			path = PublishNewView;
+			sourceTree = "<group>";
+		};
 		A75B781F22DEC2F8007B986A /* SpecialCell */ = {
 			isa = PBXGroup;
 			children = (
@@ -3117,9 +3161,10 @@
 		A7811CCE2323D25A00C2D8DE /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A7811CCF2323D25A00C2D8DE /* PublishNewVideoPhotoView.swift */,
-				A74144A8232F8BF40062FB6F /* PublishNewVideoPhotoSetView.swift */,
-				A742C08B2325E8E40043184E /* PublishNewAuthorizationView.swift */,
+				A78168EC2341F3D200033496 /* PublishNewEffect */,
+				A75AEE552340890A0092413C /* PublishNewView */,
+				A75AEE5223404D0A0092413C /* PublishNewAuthorization */,
+				A75AEE5123404CF00092413C /* PublishNewProgress */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -3132,6 +3177,59 @@
 			path = ViewController;
 			sourceTree = "<group>";
 		};
+		A78168DA23418BFF00033496 /* AliyunVodUptoyouDBManager */ = {
+			isa = PBXGroup;
+			children = (
+				A78168DD2341A8AD00033496 /* Model */,
+				A78168DB23418C3200033496 /* AliyunVodUptoyouDBManager.swift */,
+			);
+			path = AliyunVodUptoyouDBManager;
+			sourceTree = "<group>";
+		};
+		A78168DD2341A8AD00033496 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				A78168DE2341A8FD00033496 /* AliyunVodUptoyouEffectsModel.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		A78168E02341CDF700033496 /* PublishNewEffectFilterBeautyView */ = {
+			isa = PBXGroup;
+			children = (
+				A78168E12341CE1D00033496 /* PublishNewEffectFilterBeautyView.swift */,
+			);
+			path = PublishNewEffectFilterBeautyView;
+			sourceTree = "<group>";
+		};
+		A78168EA2341F3BB00033496 /* PublishNewEffectFilterView */ = {
+			isa = PBXGroup;
+			children = (
+				A78168E62341F36000033496 /* PublishNewEffectFilterView.swift */,
+				A78168ED2341F62500033496 /* PublishNewEffectFilterCollectionViewCell.swift */,
+			);
+			path = PublishNewEffectFilterView;
+			sourceTree = "<group>";
+		};
+		A78168EB2341F3C900033496 /* PublishNewEffectBeautyView */ = {
+			isa = PBXGroup;
+			children = (
+				A78168E82341F37600033496 /* PublishNewEffectBeautyView.swift */,
+				A78168EF234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift */,
+			);
+			path = PublishNewEffectBeautyView;
+			sourceTree = "<group>";
+		};
+		A78168EC2341F3D200033496 /* PublishNewEffect */ = {
+			isa = PBXGroup;
+			children = (
+				A78168E02341CDF700033496 /* PublishNewEffectFilterBeautyView */,
+				A78168EA2341F3BB00033496 /* PublishNewEffectFilterView */,
+				A78168EB2341F3C900033496 /* PublishNewEffectBeautyView */,
+			);
+			path = PublishNewEffect;
+			sourceTree = "<group>";
+		};
 		A7824AFE2271F0C500ABA381 /* EditSelfMentionContacts */ = {
 			isa = PBXGroup;
 			children = (
@@ -4282,6 +4380,7 @@
 		A7F577CB22FECD2B00E2D757 /* AliyunVodManager */ = {
 			isa = PBXGroup;
 			children = (
+				A78168DA23418BFF00033496 /* AliyunVodUptoyouDBManager */,
 				A7F577CE22FECDB000E2D757 /* AliyunVodUpToyoPublishManager */,
 			);
 			path = AliyunVodManager;
@@ -5532,6 +5631,7 @@
 				A71AA5102272156A008FF1A5 /* ExpressAddressListViewController.swift in Sources */,
 				A7D07CC922B7769600186014 /* RainbowBeanPhysicalCollectionViewCell.swift in Sources */,
 				A74144A7232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift in Sources */,
+				A78168F0234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift in Sources */,
 				BD61229922C3605C00D3F513 /* AliyunDBHelper.m in Sources */,
 				A7A98E14227ED0E2005306E9 /* CategoryListModel.swift in Sources */,
 				A770E5E722D3422800CBD0A4 /* CommentInputView.swift in Sources */,
@@ -5595,6 +5695,7 @@
 				A7F304BE2333640F00A4850F /* PushNotificationSettingsViewController.swift in Sources */,
 				BD13B6E222BA03BC008BB323 /* PublishTopicTypeCell.swift in Sources */,
 				A72A726822321DBD00B21995 /* UMManager.swift in Sources */,
+				A78168DC23418C3200033496 /* AliyunVodUptoyouDBManager.swift in Sources */,
 				A70DE55222E7E53F009E06BE /* KeyBoardInputView.swift in Sources */,
 				A78CEE0A22E0864100C512A4 /* BaseLottieAnimateContentView.swift in Sources */,
 				BD108C9322A60C2100837DAB /* HGImageCompleteButton.swift in Sources */,
@@ -5604,6 +5705,7 @@
 				BD12B68322B4EFF000AEB10B /* KSMediaPickerView.swift in Sources */,
 				BDE376E522C22D2B0055E2EA /* AlivcImage.m in Sources */,
 				A71CAB3722C9A40A00D908A8 /* TotalBeanModel.swift in Sources */,
+				A78168E42341EDB300033496 /* PublishNewRecorderPreview.swift in Sources */,
 				A743229B22B8C1510017C367 /* AppStoreManager.swift in Sources */,
 				A77BB45B2329EDEF00DCAE32 /* NXLPermissionPhotoLibrary.swift in Sources */,
 				A7EE6E1223055A5A00628D39 /* MemoryManager.swift in Sources */,
@@ -5758,6 +5860,7 @@
 				A7778CA92244904500C7C47A /* Extension+Gifu.GIFImageView.swift in Sources */,
 				A71738AB22898660000AEA6A /* ShopModel.swift in Sources */,
 				A7EE6E1523055A8900628D39 /* MemoryManagerCacheCleanerPlugin.swift in Sources */,
+				A75AEE5423404DE00092413C /* PublishNewProgressView.swift in Sources */,
 				A7A98E02227E8900005306E9 /* ProductSearchListModel.swift in Sources */,
 				A763BE6C22F173A0000CE594 /* LoginNowView.swift in Sources */,
 				BDF7C5D922D70B6E007F3B79 /* CommunityVideoMajorCommentCell.swift in Sources */,
@@ -5785,6 +5888,7 @@
 				BD61231522C3749800D3F513 /* AliyunPathManager.m in Sources */,
 				BD12B69A22B4FA8400AEB10B /* KSMediaPickerSelectIndicator.swift in Sources */,
 				A7636AC822682BAF00374F9E /* LocationView.swift in Sources */,
+				A78168E92341F37600033496 /* PublishNewEffectBeautyView.swift in Sources */,
 				BD61227C22C35C7F00D3F513 /* AliyunMediaConfig.m in Sources */,
 				A7F2D6BD22B09F930093000B /* CommunityNavigationBarView.swift in Sources */,
 				A7274C5C228EE636000E3A07 /* LBXScanLineAnimation.swift in Sources */,
@@ -5824,6 +5928,7 @@
 				A7B4E73A228192D20012914A /* CMSTemplateModel.swift in Sources */,
 				A72A72C622321DE000B21995 /* WebView.swift in Sources */,
 				A76068E722E48DC5008DF18F /* BrowsePictureRouterModuleType.swift in Sources */,
+				A78168DF2341A8FD00033496 /* AliyunVodUptoyouEffectsModel.swift in Sources */,
 				BD12B66922B47D4800AEB10B /* RecommendSubCommentTableViewCell.swift in Sources */,
 				A7811CD22323D25A00C2D8DE /* PublishNewVideoPhotoView.swift in Sources */,
 				A7931E1822AFC1DF00297D0A /* CommunityFollowViewController.swift in Sources */,
@@ -5905,6 +6010,7 @@
 				A714348C22DDA3E400132DA9 /* CMSRedemptionAreaModel.swift in Sources */,
 				A738D66F225D9BD900EEE860 /* UMLoginModel.swift in Sources */,
 				A71738A622897892000AEA6A /* SwiftMoyaServiceShopApi.swift in Sources */,
+				A78168EE2341F62500033496 /* PublishNewEffectFilterCollectionViewCell.swift in Sources */,
 				A72A726722321DBD00B21995 /* LocationModel.swift in Sources */,
 				A7F2D6C622B0DC7B0093000B /* CommunityCommonSectionHeaderView.swift in Sources */,
 				A77BB4692329EFB500DCAE32 /* NXLPermissionMicrophone.swift in Sources */,
@@ -5919,6 +6025,7 @@
 				A739121B229F75F50033177E /* JXPagingView.swift in Sources */,
 				A7D07CCF22B77E0200186014 /* UserPersonalCenterOrderCollectionViewCell.swift in Sources */,
 				BD0808EC22C5BA3100D12E6A /* AliyunCompositionInfo.m in Sources */,
+				A78168E22341CE1D00033496 /* PublishNewEffectFilterBeautyView.swift in Sources */,
 				A72A72D222321E2700B21995 /* Common.swift in Sources */,
 				BD1FC17F22B08D3C00D55081 /* CommunityMyFollowTopicController.swift in Sources */,
 				A71AF0A6226EDDC8001730FE /* SearchViewController.swift in Sources */,
@@ -5959,6 +6066,7 @@
 				A701454322FA59AC0090E1BD /* UIViewController+Example.m in Sources */,
 				BD6122B022C3638300D3F513 /* AliyunEffectInfo.m in Sources */,
 				A757C9342274882E00226355 /* UIScrollView+MJRefreshEX.m in Sources */,
+				A78168E72341F36000033496 /* PublishNewEffectFilterView.swift in Sources */,
 				A7F2D6C822B0E2F60093000B /* CommunityRecommendFollowTableViewCell.swift in Sources */,
 				A77F2C9C2231FDCF001BD3F6 /* BaseView.swift in Sources */,
 				A7A98E2F228017E2005306E9 /* SwiftMoyaNetWorkServiceCMS.swift in Sources */,

+ 2 - 2
RainbowPlanet/RainbowPlanet/Base/BaseTabbarViewController/BaseTabbarViewController.swift

@@ -182,8 +182,8 @@ class BaseTabbarViewController: NSObject {
     /// 跳转到VC
     func pushPublishVC() {
         if BaseTabbarViewController.shared.v1.navigationBarbgView.isHidden {
-            let pickVc = PublishViewController()
-//            let  pickVc = PublishNewViewController()
+//            let pickVc = PublishViewController()
+            let  pickVc = PublishNewViewController()
             let nav = BaseNavigationViewController.init(rootViewController: pickVc)
             nav.modalPresentationStyle = .fullScreen
             BaseTabbarViewController.shared.esTabBarController.present(nav, animated: true, completion: nil)

+ 1 - 1
RainbowPlanet/RainbowPlanet/Base/BaseView/BaseView.swift

@@ -12,7 +12,7 @@ import RxSwift
 class BaseView: UIView {
 
     let disposeBag = DisposeBag()
-
+    
     override init(frame: CGRect) {
         super.init(frame: frame)
         self.setupViews()

+ 2 - 0
RainbowPlanet/RainbowPlanet/Macro/ColorMacro.swift

@@ -22,6 +22,8 @@ let kEnabledButtonColor = UIColor(hexString: "25E0CD")
 
 let kEnabledTitleColor = UIColor(hexString: "FFFFFF")
 
+let k000000Color = UIColor(hexString: "000000")
+
 let k333333Color = UIColor(hexString: "333333")
 
 let k262626Color = UIColor(hexString: "262626")

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 155 - 0
RainbowPlanet/RainbowPlanet/Manager/AliyunVodManager/AliyunVodUptoyouDBManager/AliyunVodUptoyouDBManager.swift


+ 170 - 0
RainbowPlanet/RainbowPlanet/Manager/AliyunVodManager/AliyunVodUptoyouDBManager/Model/AliyunVodUptoyouEffectsModel.swift

@@ -0,0 +1,170 @@
+//
+//  AliyunVodUptoyouEffectsDBModel.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+/// 素材类别
+///
+/// - font: 字体
+/// - paster: 动图
+/// - mv: imv
+/// - filter: 滤镜
+/// - music: 音乐
+/// - caption: 字幕
+/// - specialFilter: 特殊过滤器
+enum AliyunEffectsType : Int {
+    case font = 1
+    case paster = 2
+    case mv = 3
+    case filter = 4
+    case music = 5
+    case caption = 6
+    case specialFilter = 7
+}
+
+/// 滤镜效果
+///
+/// - none: 无效果
+/// - face: 人物
+/// - food: 食物
+/// - scenery: 风景
+/// - pet: 宠物
+/// - specialStyle: 特殊风格
+enum AliyunFilterType : Int {
+    case none = 0
+    case face = 1
+    case food = 2
+    case scenery = 3
+    case pet = 4
+    case specialStyle  = 5
+}
+
+
+class AliyunVodUptoyouEffectsModel: NSObject {
+
+    /*
+     * Local
+     */
+    
+    //素材类别
+    var effectsType: AliyunEffectsType?
+    // 用于判断数据库是否包含该资源
+    var isDBContain = false
+    // 资源路径
+    var resourcePath: String?
+    // 字体在字体库中的名称
+    var fontName : String?
+    // 字幕在config中的字体id
+    var configFontId : Int?
+    // 字幕在config中的字体name
+    var configFontName : String?
+    //滤镜的类型
+    var filterType : AliyunFilterType?
+    
+    /*
+     * 以下均为server返回字段
+     */
+    
+    // id
+    var eid : Int?
+    var isNew : Bool?
+    var level : Int?
+    
+    // 名称
+    var name : String?
+    var cnName : String?
+    var key : String?
+    var category : String?
+    
+    // 下载路径 动图 MV 字幕等在第二层
+    var url : String?
+    var md5 : String?
+    var banner : String?
+    var icon : String?
+    // 描述
+    var edescription : String?
+    var preview : String?
+    var tag : String?
+    var cat : String?
+    var previewPic : String?
+    var previewMp4 : String?
+    var duration : String?
+    var type : String?
+    var sort : String?
+    var mvList : Array<AliyunEffectMvInfoModel>?
+    
+}
+
+class AliyunEffectMvInfoModel: NSObject {
+    var resourcePath : String?
+    var aspect : String?
+    var download : String?
+    var md5 : String?
+}
+
+class AliyunEffectInfoModel: NSObject {
+    
+    /**
+     数据ID
+     */
+    var eid : Int?
+    
+    /**
+     数据类型
+     */
+    var effectType : Int?
+    
+    /**
+     滤镜类型
+     */
+    var filterType : Int?
+    
+    /**
+     滤镜分类名称
+     */
+    var filterTypeName : String?
+    /**
+     滤镜分组id
+     */
+    var groupId : Int?
+    
+    /**
+     图标
+     */
+    var icon : String??
+    
+    /**
+     名称
+     */
+    var name : String?
+    
+    /**
+     滤镜描述
+     */
+    var edescription : String?
+    
+    /**
+     是否在数据库里包含
+     */
+    var isDBContain : Bool?
+    
+    /**
+     分组名称
+     */
+    var groupName : String?
+    
+    /**
+     download URL
+     */
+    var url : String?
+    var md5 : String?
+    
+    /**
+     资源路径
+     */
+    var resourcePath : String?
+}

+ 8 - 0
RainbowPlanet/RainbowPlanet/Manager/PathManager/PathManager.swift

@@ -157,6 +157,14 @@ extension PathManager {
         return URL(fileURLWithPath: projectDocumentPath() ?? "").appendingPathComponent("record").absoluteString.substring(fromIndex: 5)
     }
     
+    
+    /// 阿里云短视频资源目录
+    ///
+    /// - Returns: 阿里云短视频资源目录
+    class func aliyunVodCreateResourcePath() -> String? {
+        return URL(fileURLWithPath: projectDocumentPath() ?? "").appendingPathComponent("Resource").absoluteString.substring(fromIndex: 5)
+    }
+    
     /// 阿里云短视频录制目录输出路径
     ///
     /// - Returns:阿里云短视频录制目录输出路径

+ 6 - 0
RainbowPlanet/RainbowPlanet/Modules/BackyardModule/Backyard/ViewController/BackyardViewController.swift

@@ -78,6 +78,12 @@ class BackyardViewController: BaseJSWebViewController {
             WebViewJavascriptBridgeManager.shared.callHandlerH5(bridge: self?.bridge)
 
         })
+        
+        //将要进入前台的时候
+        observe = NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: OperationQueue.main, using: {
+            [weak self] (notification) in
+            WebViewJavascriptBridgeManager.shared.callHandlerH5(bridge: self?.bridge)
+        })
 
         observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("BackyardViewModuleTop"), object: nil, queue: OperationQueue.main, using: {
             [weak self] (notification) in

+ 0 - 2
RainbowPlanet/RainbowPlanet/Modules/PublishModule/AliyunVideo/AlivcShortVideo/ShortVideoFile/Common/ResourceManager/Views/AliyunBeautyLevelCollectionViewCell.m

@@ -50,8 +50,6 @@
     } else {
         self.selectView.hidden = true;
     }
-    
-    
 }
 
 @end

RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewAuthorizationView.swift → RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewAuthorization/PublishNewAuthorizationView.swift


+ 103 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectBeautyView/PublishNewEffectBeautyCollectionViewCell.swift

@@ -0,0 +1,103 @@
+//
+//  PublishNewEffectBeautyCollectionViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewEffectBeautyCollectionViewCell: UICollectionViewCell {
+    class func cellWith(collectionView:UICollectionView,indexPath:IndexPath) -> PublishNewEffectBeautyCollectionViewCell {
+        let ID = "PublishNewEffectBeautyCollectionViewCell"
+        collectionView.register(PublishNewEffectBeautyCollectionViewCell.self, forCellWithReuseIdentifier: ID)
+        let cell : PublishNewEffectBeautyCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath) as! PublishNewEffectBeautyCollectionViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    //MARK: - indexPath
+    var indexPath: IndexPath?{
+        didSet {
+            if indexPath?.row == 0 {
+                iconImageView.isHidden = false
+                titleLabel.isHidden = true
+            }else {
+                iconImageView.isHidden = true
+                titleLabel.isHidden = false
+                titleLabel.text = "\(indexPath?.row ?? 1)"
+            }
+        }
+    }
+    //MARK: - 初始化
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    //MARK: - 设置view
+    private func setupViews() {
+        addSubview(iconImageView)
+        addSubview(iconView)
+        addSubview(titleLabel)
+    }
+    
+    private func setupLayouts() {
+        iconImageView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
+        }
+        
+        titleLabel.snp.makeConstraints { (make) in
+            make.center.equalToSuperview()
+        }
+        
+        iconView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
+        }
+        
+    }
+    
+    private lazy var iconImageView: UIImageView = {
+        let iconImageView = UIImageView()
+        iconImageView.image = kImage(name: "video_pic_filter_artwork")
+        iconImageView.cornerRadius = (kScreenWidth-38-38-80)/5/2
+        iconImageView.masksToBounds = true
+        iconImageView.isHidden = true
+        return iconImageView
+    }()
+    
+    private lazy var titleLabel: UILabel = {
+        let titleLabel = UILabel()
+        titleLabel.textColor = kffffffColor
+        titleLabel.font = kRegularFont18
+        titleLabel.isHidden = true
+        return titleLabel
+    }()
+    
+    private lazy var iconView: UIView = {
+        let iconView = UIView()
+        iconView.backgroundColor = kThemeColor.withAlphaComponent(0.2)
+        iconView.layer.borderColor = kThemeColor.cgColor
+        iconView.layer.borderWidth = 2
+        iconView.cornerRadius = (kScreenWidth-38-38-80)/5/2
+        iconView.masksToBounds = true
+        iconView.isHidden = true
+        return iconView
+    }()
+    
+    override var isSelected: Bool {
+        didSet {
+            if isSelected {
+                iconView.isHidden = false
+            }else {
+                iconView.isHidden = true
+            }
+        }
+    }
+    
+}

+ 72 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectBeautyView/PublishNewEffectBeautyView.swift

@@ -0,0 +1,72 @@
+//
+//  PublishNewEffectBeautyView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewEffectBeautyView: BaseView {
+
+    override func setupViews() {
+        addSubview(collectionView)
+        collectionView.selectItem(at: IndexPath(item: 2, section: 0), animated: true, scrollPosition: UICollectionView.ScrollPosition.centeredHorizontally)
+    }
+    
+    override func setupLayouts() {
+        
+    }
+    
+    override func setupData() {
+        
+    }
+    
+    private lazy var collectionView: UICollectionView = {
+        let collectionView = UICollectionView.init(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height), collectionViewLayout: collectionViewLayout)
+        collectionView.backgroundColor = UIColor.clear
+        collectionView.delegate = self;
+        collectionView.dataSource = self;
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        return collectionView
+    }()
+    
+    private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
+        let collectionViewLayout = UICollectionViewFlowLayout.init()
+        collectionViewLayout.minimumLineSpacing = 20
+        collectionViewLayout.minimumInteritemSpacing = 0
+        collectionViewLayout.itemSize = CGSize(width:(kScreenWidth-38-38-80)/5, height: (kScreenWidth-38-38-80)/5)
+        collectionViewLayout.scrollDirection = .horizontal
+        collectionViewLayout.sectionInset = UIEdgeInsets(top: 125-(kScreenWidth-38-38-80)/5-34, left: 38, bottom: 125-(kScreenWidth-38-38-80)/5-47, right: 38)
+        return collectionViewLayout
+    }()
+    
+    typealias DidSelectCloSure = (_ beautyValue:Int32) -> Void
+    var didSelectCloSure : DidSelectCloSure?
+}
+
+extension PublishNewEffectBeautyView: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {
+    func numberOfSections(in collectionView: UICollectionView) -> Int {
+        
+        return 1
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return 5
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = PublishNewEffectBeautyCollectionViewCell.cellWith(collectionView: collectionView, indexPath: indexPath)
+        return cell
+        
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
+        if let didSelectCloSure = didSelectCloSure {
+            didSelectCloSure((Int32(indexPath.row * 25)))
+        }
+        
+    }
+}

+ 171 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterBeautyView/PublishNewEffectFilterBeautyView.swift

@@ -0,0 +1,171 @@
+//
+//  PublishNewEffectFilterBeautyView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+import JXSegmentedView
+
+class PublishNewEffectFilterBeautyView: BaseView {
+    
+    
+    /// 效果类型
+    ///
+    /// - filter: 滤镜
+    /// - beauty: 美颜
+    enum FilterBeautyType {
+        case filter
+        case beauty
+    }
+    
+    var filterBeautyType : FilterBeautyType? {
+        didSet {
+            if filterBeautyType == .filter {
+                segmentedView.selectItemAt(index: 0)
+            }
+            if filterBeautyType == .beauty {
+                segmentedView.selectItemAt(index: 1)
+            }
+        }
+    }
+    
+    
+    override func setupViews() {
+        configRectCorner(corner: [.topLeft,.topRight], radii: CGSize(width: 8, height: 8))
+        clipsToBounds = true
+        addSubview(vibrancyView)
+        addSubview(segmentedView)
+        addSubview(scrollView)
+        scrollView.addSubview(effectFilterView)
+        scrollView.addSubview(effectBeautyView)
+    }
+    
+    override func setupLayouts() {
+        vibrancyView.snp.makeConstraints { (make) in
+            make.bottom.left.right.equalToSuperview()
+            make.height.equalTo(kSafeTabBarHeight + 125 + 48)
+        }
+        segmentedView.snp.makeConstraints { (make) in
+            make.left.right.equalToSuperview()
+            make.bottom.equalTo(-kSafeTabBarHeight)
+            make.height.equalTo(48)
+        }
+        scrollView.snp.makeConstraints { (make) in
+            make.bottom.equalTo(segmentedView.snp.top)
+            make.left.right.equalToSuperview()
+            make.height.equalTo(125)
+        }
+    }
+    
+    // 毛玻璃效果
+    lazy var vibrancyView: UIVisualEffectView = {
+        let vibrancyView = UIVisualEffectView(frame: self.frame)
+        vibrancyView.effect = UIBlurEffect(style: .dark)
+        return vibrancyView
+    }()
+    
+    //1.初始化JXSegmentedViewx
+    private lazy var segmentedView: JXSegmentedView = {
+        let segmentedView = JXSegmentedView()
+        segmentedView.backgroundColor = .clear
+        segmentedView.delegate = self
+        segmentedView.dataSource = segmentedDataSourceAlbum
+        segmentedView.indicators = [indicator]
+        segmentedView.selectItemAt(index: 0)
+        segmentedView.defaultSelectedIndex = 0
+        return segmentedView
+    }()
+    
+    //2.初始化dataSource
+    private lazy var segmentedDataSourceAlbum: JXSegmentedTitleDataSource = {
+        let segmentedDataSource = JXSegmentedTitleDataSource()
+        segmentedDataSource.titles = ["滤镜","美颜"]
+        segmentedDataSource.isTitleColorGradientEnabled = true
+        segmentedDataSource.isItemSpacingAverageEnabled = true
+        segmentedDataSource.isTitleZoomEnabled = true
+        segmentedDataSource.titleNormalColor = k999999Color
+        segmentedDataSource.titleSelectedColor = kffffffColor
+        segmentedDataSource.titleNormalFont = kRegularFont14!
+        segmentedDataSource.titleSelectedFont = kBoldFont22
+        segmentedDataSource.isTitleStrokeWidthEnabled = true
+        //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
+        segmentedDataSource.reloadData(selectedIndex: 0)
+        return segmentedDataSource
+    }()
+    
+    //3.初始化指示器indicator
+    private lazy var indicator: JXSegmentedIndicatorLineView = {
+        let indicator = JXSegmentedIndicatorLineView()
+        indicator.indicatorColor = .white
+        indicator.indicatorHeight = 3
+        indicator.indicatorWidth = 20
+        indicator.verticalOffset = 8
+        return indicator
+    }()
+    
+    //滚动的View
+    private lazy var scrollView: UIScrollView = {
+        let scrollView = UIScrollView()
+        scrollView.contentSize = CGSize(width: kScreenWidth * 2, height: kScreenHeight)
+        scrollView.isPagingEnabled = true
+        scrollView.showsHorizontalScrollIndicator = false
+        scrollView.showsVerticalScrollIndicator = false
+        scrollView.scrollsToTop = false
+        scrollView.isScrollEnabled = false
+        scrollView.isHidden = false
+        return scrollView
+    }()
+    
+    // 滤镜View
+    lazy var effectFilterView : PublishNewEffectFilterView = {
+        let effectFilterView = PublishNewEffectFilterView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 125))
+        return effectFilterView
+    }()
+     // 美颜View
+    lazy var effectBeautyView : PublishNewEffectBeautyView = {
+        let effectBeautyView = PublishNewEffectBeautyView(frame: CGRect(x: kScreenWidth, y: 0, width: kScreenWidth, height: 125))
+        return effectBeautyView
+    }()
+    
+}
+
+extension PublishNewEffectFilterBeautyView : JXSegmentedViewDelegate {
+ 
+    //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
+    func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
+        switch index {
+        case 0:
+            scrollView.setContentOffset(CGPoint(x: 0, y:0), animated: false)
+            break
+        case 1:
+            scrollView.setContentOffset(CGPoint(x: kScreenWidth, y:0), animated: false)
+            break
+        default:
+            break
+        }
+    }
+    
+    // 点击选中的情况才会调用该方法
+    func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
+        //传递didClickSelectedItemAt事件给listContainerView,必须调用!!!
+    }
+    
+    // 滚动选中的情况才会调用该方法(未支持滚动选中)
+    func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
+        print("\n------滚动选中\(index)")
+    }
+    
+    // 正在滚动中的回调
+    func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
+        self.segmentedView.backgroundColor = .clear
+        //传递scrolling事件给listContainerView,必须调用!!!
+    }
+    
+    /// 是否允许点击选中目标index的item
+    func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
+        return true
+    }
+}

+ 90 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterView/PublishNewEffectFilterCollectionViewCell.swift

@@ -0,0 +1,90 @@
+//
+//  PublishNewEffectFilterCollectionViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewEffectFilterCollectionViewCell: UICollectionViewCell {
+    class func cellWith(collectionView:UICollectionView,indexPath:IndexPath) -> PublishNewEffectFilterCollectionViewCell {
+        let ID = "PublishNewEffectFilterCollectionViewCell"
+        collectionView.register(PublishNewEffectFilterCollectionViewCell.self, forCellWithReuseIdentifier: ID)
+        let cell : PublishNewEffectFilterCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath) as! PublishNewEffectFilterCollectionViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    //MARK: - indexPath
+    var indexPath: IndexPath?{
+        didSet {
+            
+        }
+    }
+    //MARK: - 初始化
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    //MARK: - 设置view
+    private func setupViews() {
+        addSubview(iconImageView)
+        addSubview(iconView)
+        addSubview(titleLabel)
+    }
+    
+    private func setupLayouts() {
+        iconImageView.snp.makeConstraints { (make) in
+            make.top.centerX.equalToSuperview()
+            make.size.equalTo(52)
+        }
+        
+        iconView.snp.makeConstraints { (make) in
+            make.top.centerX.equalToSuperview()
+            make.size.equalTo(52)
+        }
+        
+        titleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(iconImageView.snp.bottom).offset(14)
+            make.left.equalTo(5)
+            make.right.equalTo(-5)
+            make.height.equalTo(16)
+        }
+    }
+    
+    private lazy var iconImageView: UIImageView = {
+        let iconImageView = UIImageView()
+        iconImageView.image = kImage(name: "video_pic_filter_artwork")
+        iconImageView.cornerRadius = 52/2
+        iconImageView.masksToBounds = true
+        return iconImageView
+    }()
+    
+    private lazy var iconView: UIView = {
+        let iconView = UIView()
+        iconView.backgroundColor = kThemeColor.withAlphaComponent(0.2)
+        iconView.layer.borderColor = kThemeColor.cgColor
+        iconView.layer.borderWidth = 2
+        iconView.cornerRadius = 52/2
+        iconView.masksToBounds = true
+        return iconView
+    }()
+    
+    private lazy var titleLabel: UILabel = {
+        let titleLabel = UILabel()
+        titleLabel.text = "滤镜"
+        titleLabel.textColor = kffffffColor
+        titleLabel.font = kRegularFont12
+        titleLabel.textAlignment = .center
+        titleLabel.numberOfLines = 1
+        return titleLabel
+    }()
+
+}

+ 67 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewEffect/PublishNewEffectFilterView/PublishNewEffectFilterView.swift

@@ -0,0 +1,67 @@
+//
+//  PublishNewEffectFilterView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewEffectFilterView: BaseView {
+
+    override func setupViews() {
+        addSubview(collectionView)
+    }
+    
+    override func setupLayouts() {
+        
+    }
+    
+    override func setupData() {
+        
+    }
+    
+    private lazy var collectionView: UICollectionView = {
+        let collectionView = UICollectionView.init(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height), collectionViewLayout: collectionViewLayout)
+        collectionView.backgroundColor = UIColor.clear
+        collectionView.delegate = self;
+        collectionView.dataSource = self;
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        return collectionView
+    }()
+    
+    private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
+        let collectionViewLayout = UICollectionViewFlowLayout.init()
+        collectionViewLayout.minimumLineSpacing = 15
+        collectionViewLayout.minimumInteritemSpacing = 0
+        collectionViewLayout.itemSize = CGSize(width:52, height: 52)
+        collectionViewLayout.scrollDirection = .horizontal
+        collectionViewLayout.sectionInset = UIEdgeInsets(top: 30, left: 14, bottom: 15, right: 14)
+        return collectionViewLayout
+    }()
+
+}
+
+extension PublishNewEffectFilterView: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {
+    func numberOfSections(in collectionView: UICollectionView) -> Int {
+        
+       return 1
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return 10
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = PublishNewEffectFilterCollectionViewCell.cellWith(collectionView: collectionView, indexPath: indexPath)
+        return cell
+        
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
+
+    }
+}
+

+ 126 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewProgress/PublishNewProgressView.swift

@@ -0,0 +1,126 @@
+//
+//  PublishNewProressView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/29.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewProgressView: BaseView {
+
+    /// 视频个数
+    var videoCount: Int = 0 {
+        didSet {
+            if oldValue < videoCount {
+                pointArray.append(progress)
+            } else {
+                if !pointArray.isEmpty {
+                    pointArray.removeLast()
+                }
+            }
+            NXLLog("progressArr:\(pointArray)")
+            videoCount = videoCount < 0 ? 0 : videoCount;
+            selectedIndex = -1;
+        }
+    }
+    
+    /// 选中的视频
+    var selectedIndex: Int = -1
+    
+    /// 显示通知的点
+    var showNoticePoint: Bool? = true
+    
+    /// 最小时长
+    var minDuration: CGFloat = 3.0
+    
+    /// 最大时长
+    var maxDuration: CGFloat = 60.0
+    
+    /// 进度的个数
+    var pointArray = Array<CGFloat>()
+    
+    /// 进度颜色
+    var colorProgress: UIColor? = kffffffColor
+    
+    /// 选中的颜色
+    var colorSelect: UIColor? = kThemeColor
+    
+    /// 通知颜色
+    var colorNotice: UIColor? = UIColor.red
+    
+    /// 间隔颜色
+    var colorSepatorPoint: UIColor? = kThemeColor
+    
+    /// 进度
+    var progress: CGFloat = 0.0 {
+        didSet {
+            if progress == 0 {
+                videoCount = 0
+                pointArray.removeAll()
+            }
+            setNeedsDisplay()
+        }
+    }
+    
+    /// 行线宽度
+    var lineWidth: CGFloat? {
+        return bounds.width * UIScreen.main.scale
+    }
+    
+    override func setupViews() {
+        backgroundColor = k000000Color.withAlphaComponent(0.3)
+    }
+    
+    override func draw(_ rect: CGRect) {
+        guard let context = UIGraphicsGetCurrentContext() else { return }
+        context.setLineWidth(lineWidth ?? 0);
+        let w = bounds.width
+        
+        NXLLog("----videoCount == \(videoCount)")
+        for i in 0..<videoCount {
+            let sp: CGFloat = CGFloat((pointArray[i]))
+            if i == selectedIndex {
+                context.setStrokeColor((colorSelect?.cgColor)!)
+            } else {
+                context.setStrokeColor((colorProgress?.cgColor)!)
+            }
+            var x: CGFloat = sp / maxDuration * w
+            context.move(to: CGPoint(x: x, y: 0))
+            x = progress / maxDuration * w
+            context.addLine(to: CGPoint(x: x, y: 0))
+            context.strokePath()
+        }
+        
+        NXLLog("---- pointArray.count == \(pointArray.count)")
+        for i in 0..<(pointArray.count) {
+            let p: CGFloat = CGFloat((pointArray[i]))
+            context.setStrokeColor((colorSepatorPoint?.cgColor)!)
+            let x: CGFloat = p/maxDuration * w
+            context.move(to: CGPoint(x: x - 1, y: 0))
+            context.addLine(to: CGPoint(x: x, y: 0))
+            context.strokePath()
+        }
+        
+        // 3s节点
+        if showNoticePoint ?? false && shouldShowNotice() ?? false {
+            context.setStrokeColor((colorNotice?.cgColor)!)
+            context.move(to: CGPoint(x: w * minDuration / maxDuration, y: 0))
+            context.addLine(to: CGPoint(x: w * minDuration / maxDuration + 1, y: 0))
+            context.strokePath()
+        }
+    
+    }
+    
+    func endPointX() -> CGFloat {
+        return progress / maxDuration * bounds.width
+    }
+    
+    func shouldShowNotice() -> Bool? {
+        return progress < minDuration
+    }
+    
+}
+
+

+ 36 - 0
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewView/PublishNewRecorderPreview.swift

@@ -0,0 +1,36 @@
+//
+//  PublishNewRecorderPreview.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/9/30.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class PublishNewRecorderPreview: UIView {
+
+    lazy var tap: UITapGestureRecognizer = {
+        let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
+        tap.numberOfTapsRequired = 1
+        tap.numberOfTouchesRequired = 1
+        return tap
+    }()
+     /// 添加手势
+    func addTap() {
+        addGestureRecognizer(tap)
+    }
+    /// 移除手势
+    func removetap() {
+        removeGestureRecognizer(tap)
+    }
+    /// 点击手势
+    typealias TapClosure = () -> Void
+    var tapClosure : TapClosure?
+    @objc func tapAction() {
+        if let tapClosure = tapClosure {
+            tapClosure()
+        }
+    }
+
+}

+ 104 - 1
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoSetView.swift

@@ -11,9 +11,16 @@ import UIKit
 class PublishNewVideoPhotoSetView: BaseView {
 
     override func setupViews() {
-        
+        // 录视频进度条
+        addSubview(progressView)
         // 返回按钮
         addSubview(closeButton)
+        // 摄像头翻转
+        addSubview(cameraFlipButton)
+        // 滤镜按钮
+        addSubview(filterButton)
+        // 美颜
+        addSubview(beautyButton)
         // 录制按钮
         addSubview(recordButton)
         // 回删按钮
@@ -40,6 +47,35 @@ class PublishNewVideoPhotoSetView: BaseView {
             make.centerX.equalToSuperview()
             make.size.equalTo(80)
         }
+        
+        // 摄像头翻转
+        cameraFlipButton.snp.makeConstraints { (make) in
+            make.top.equalTo(kNavBarTotalHeight)
+            make.right.equalTo(-26)
+            make.height.equalTo(50)
+            make.width.equalTo(30)
+        }
+        cameraFlipButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
+        
+        // 滤镜
+        filterButton.snp.makeConstraints { (make) in
+            make.top.equalTo(cameraFlipButton.snp.bottom).offset(20)
+            make.right.equalTo(-26)
+            make.height.equalTo(50)
+            make.width.equalTo(30)
+        }
+        filterButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
+        
+        // 美颜
+        beautyButton.snp.makeConstraints { (make) in
+            make.top.equalTo(filterButton.snp.bottom).offset(20)
+            make.right.equalTo(-26)
+            make.height.equalTo(50)
+            make.width.equalTo(30)
+        }
+        beautyButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
+
+        
         // 回删按钮
         deleteButton.snp.makeConstraints { (make) in
             make.centerY.equalTo(recordButton)
@@ -69,12 +105,56 @@ class PublishNewVideoPhotoSetView: BaseView {
         }
     }
     
+    
+    /// 录视频进度条
+    lazy var progressView: PublishNewProgressView = {
+        let progressView = PublishNewProgressView(frame: CGRect(x: 14, y: kSafeStatusBarHeight+19, width: kScreenWidth-28, height: 5))
+        progressView.layer.cornerRadius = 2
+        progressView.layer.masksToBounds = true
+        return progressView
+    }()
+    
+    
+    /// 关闭按钮
     lazy var closeButton: UIButton = {
         let closeButton = UIButton(type: UIButton.ButtonType.custom)
         closeButton.setImage(kImage(name: "video_btn_close_white"), for: UIControl.State.normal)
         return closeButton
     }()
     
+    /// 相机翻转
+    lazy var cameraFlipButton: UIButton = {
+        let cameraFlipButton = UIButton()
+        cameraFlipButton.setImage(kImage(name: "video_ico_overturn"), for: UIControl.State.normal)
+        cameraFlipButton.setImage(kImage(name: "video_ico_overturn"), for: UIControl.State.highlighted)
+        cameraFlipButton.setTitle("翻转", for: UIControl.State.normal)
+        cameraFlipButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        cameraFlipButton.titleLabel?.font = kRegularFont12
+        return cameraFlipButton
+    }()
+    
+    /// 滤镜
+    lazy var filterButton: UIButton = {
+        let filterButton = UIButton()
+        filterButton.setImage(kImage(name: "video_ico_filter"), for: UIControl.State.normal)
+        filterButton.setImage(kImage(name: "video_ico_filter"), for: UIControl.State.highlighted)
+        filterButton.setTitle("滤镜", for: UIControl.State.normal)
+        filterButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        filterButton.titleLabel?.font = kRegularFont12
+        return filterButton
+    }()
+    
+    /// 美颜
+    lazy var beautyButton: UIButton = {
+        let beautyButton = UIButton()
+        beautyButton.setImage(kImage(name: "video_ico_beauty"), for: UIControl.State.normal)
+        beautyButton.setImage(kImage(name: "video_ico_beauty"), for: UIControl.State.highlighted)
+        beautyButton.setTitle("美颜", for: UIControl.State.normal)
+        beautyButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        beautyButton.titleLabel?.font = kRegularFont12
+        return beautyButton
+    }()
+    
     /// 拍摄录制按钮
     lazy var recordButton: UIButton = {
         let recordButton = UIButton(type: UIButton.ButtonType.custom)
@@ -122,5 +202,28 @@ class PublishNewVideoPhotoSetView: BaseView {
         durationTimeDotLabel.isHidden = true
         return durationTimeDotLabel
     }()
+    
+    /// 更新录制视频返回按钮的位置
+    func closeVideoUpMakeConstraints(duration:TimeInterval) {
+        closeButton.snp.updateConstraints { (make) in
+            make.top.equalTo(kNavBarTotalHeight)
+        }
+        UIView.animate(withDuration:duration) {
+            [weak self] in
+            self?.layoutIfNeeded()
+        }
+    }
+    
+    /// 更新拍照返回按钮的位置
+    func closePhotoUpMakeConstraints(duration:TimeInterval) {
+        closeButton.snp.updateConstraints { (make) in
+            make.top.equalTo(kSafeStatusBarHeight + 11)
+        }
+        UIView.animate(withDuration: duration) {
+            [weak self] in
+            self?.layoutIfNeeded()
+        }
+    }
+    
 
 }

+ 186 - 38
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/View/PublishNewVideoPhotoView.swift

@@ -27,7 +27,10 @@ class PublishNewVideoPhotoView: BaseView {
     
     /// 添加View
     override func setupViews() {
+        backgroundColor = UIColor.black
+        addSubview(recorderPreview)
         addSubview(publishNewVideoPhotoSetView)
+        addSubview(effectFilterBeautyView)
         
     }
     
@@ -48,6 +51,23 @@ class PublishNewVideoPhotoView: BaseView {
             vc?.navigationController?.dismiss(animated: true, completion: nil)
         }).disposed(by: disposeBag)
         
+        // 翻转
+        publishNewVideoPhotoSetView.cameraFlipButton.rx.tap.subscribe(onNext: {[weak self] (data) in
+            self?.setCameraFlip()
+        }).disposed(by: disposeBag)
+        
+        // 滤镜
+        publishNewVideoPhotoSetView.filterButton.rx.tap.subscribe(onNext: {[weak self] (data) in
+            self?.effectFilterBeautyView.filterBeautyType = .filter
+            self?.effectFilterBeautyViewisHidden(isHidden: false)
+        }).disposed(by: disposeBag)
+        
+        // 美颜
+        publishNewVideoPhotoSetView.beautyButton.rx.tap.subscribe(onNext: {[weak self] (data) in
+            self?.effectFilterBeautyView.filterBeautyType = .beauty
+            self?.effectFilterBeautyViewisHidden(isHidden: false)
+        }).disposed(by: disposeBag)
+        
         //录制/拍摄
         publishNewVideoPhotoSetView.recordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
             // 开始录制/暂停录制
@@ -80,6 +100,18 @@ class PublishNewVideoPhotoView: BaseView {
             /// 回删视频
             self?.finishTakeVideo()
         }).disposed(by: disposeBag)
+
+        // 点击手势
+        recorderPreview.tapClosure = {
+            [weak self] in
+            // 隐藏滤镜
+            self?.effectFilterBeautyViewisHidden(isHidden: true)
+        }
+        // 美颜等级设置
+        effectFilterBeautyView.effectBeautyView.didSelectCloSure = {
+            [weak self] beautifyValue in
+            self?.recorder?.beautifyValue = beautifyValue
+        }
     }
     
     /// SDK录制类
@@ -87,7 +119,7 @@ class PublishNewVideoPhotoView: BaseView {
         
         let recorder = AliyunIRecorder.init(delegate: self, videoSize: CGSize(width: 720, height: 1280))
         // 预览View
-        recorder?.preview = self
+        recorder?.preview = recorderPreview
         //清除录制路径
         PathManager.clearRecrodPath()
         // 设置文件夹路径
@@ -126,10 +158,22 @@ class PublishNewVideoPhotoView: BaseView {
         return recorder!
     }()
     
+    
+    /// 摄像头
+    lazy var recorderPreview : PublishNewRecorderPreview = {
+        let recorderPreview = PublishNewRecorderPreview(frame: bounds)
+        return recorderPreview
+    }()
+    /// 所有按钮View
     lazy var publishNewVideoPhotoSetView: PublishNewVideoPhotoSetView = {
         let publishNewVideoPhotoSetView = PublishNewVideoPhotoSetView()
         return publishNewVideoPhotoSetView
     }()
+    /// 滤镜跟美颜
+    lazy var effectFilterBeautyView: PublishNewEffectFilterBeautyView = {
+        let effectFilterBeautyView = PublishNewEffectFilterBeautyView(frame: CGRect(x: 0, y: kScreenHeight, width: kScreenWidth, height: 48 + 125 + kSafeTabBarHeight))
+        return effectFilterBeautyView
+    }()
     
 }
 
@@ -139,71 +183,96 @@ extension PublishNewVideoPhotoView {
     
     /// 开始拍视频
     func startTakeVideo() {
-        recorder?.startRecording()
-        // 回删按钮隐藏
-        deleteAlpha(alpha: 0)
-        // 分段view隐藏
-        segmentedViewAlpha(alpha: 0)
-        // 开始录制隐藏View
-        startTakeVideoHiddenView()
-        
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.recorder?.startRecording()
+            // 回删按钮隐藏
+            self?.deleteAlpha(alpha: 0)
+            // 分段view隐藏
+            self?.segmentedViewAlpha(alpha: 0)
+            // 开始录制隐藏View
+            self?.startTakeVideoHiddenView()
+        }
     }
     
     /// 暂停拍视频
     func stopTakeVideo() {
-        recorder?.stopRecording()
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.recorder?.stopRecording()
+        }
     }
     
     /// 开始录制隐藏View
     func startTakeVideoHiddenView() {
+        publishNewVideoPhotoSetView.progressView.videoCount += 1
         publishNewVideoPhotoSetView.closeButton.isHidden = true
+        publishNewVideoPhotoSetView.cameraFlipButton.isHidden = true
+        publishNewVideoPhotoSetView.filterButton.isHidden = true
+        publishNewVideoPhotoSetView.beautyButton.isHidden = true
+
     }
     
     /// 停止录制显示View
     func stopTakeVideoVideoHiddenView() {
         publishNewVideoPhotoSetView.closeButton.isHidden = false
+        publishNewVideoPhotoSetView.cameraFlipButton.isHidden = false
+        publishNewVideoPhotoSetView.filterButton.isHidden = false
+        publishNewVideoPhotoSetView.beautyButton.isHidden = false
     }
     
     /// 完成拍视频
     func finishTakeVideo() {
-        recorder?.finishRecording()
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.recorder?.finishRecording()
+        }
     }
     
     /// 拍照
     func takePhoto() {
-        recorder?.takePhoto({ (image, rawImage) in
-            // 跳转到使用照片页面
-            let vc = UIViewController.topMost
-            let publishConfirmPhotoNewVC  = PublishConfirmPhotoNewViewController()
-            publishConfirmPhotoNewVC.photoImg = image
-            vc?.navigationController?.pushViewController(publishConfirmPhotoNewVC, animated: true)
-        })
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.recorder?.takePhoto({ (image, rawImage) in
+                // 跳转到使用照片页面
+                let vc = UIViewController.topMost
+                let publishConfirmPhotoNewVC  = PublishConfirmPhotoNewViewController()
+                publishConfirmPhotoNewVC.photoImg = image
+                vc?.navigationController?.pushViewController(publishConfirmPhotoNewVC, animated: true)
+            })
+        }
     }
     /// 回删视频
     func deleteVideo() {
-        if recorder?.clipManager?.partCount ?? 0 > 0 {
-            AlertSheetView.alert(title: "是否删除上一片段?") { [weak self] (popupView, index, title) in
-                let partCount = self?.recorder?.clipManager?.partCount
-                // 删除最后一个视频片段
-                self?.recorder?.clipManager.deletePart()
-                // 视频时长
-                self?.recorderDuration = (self?.recorder?.clipManager.duration)!
-                // 完成按钮是否显示
-                self?.finishAlpha()
-                // 时间按钮是否显示
-                self?.durationTimeAlpha()
-                // 剩下最后一个片段视频
-                if partCount == 1 {
-                    // 回删按钮是否隐藏
-                    self?.deleteAlpha(alpha: 0)
-                    // 分段view隐藏
-                    self?.segmentedViewAlpha(alpha: 1)
+        DispatchQueue.main.async {
+            [weak self] in
+            if self?.recorder?.clipManager?.partCount ?? 0 > 0 {
+                AlertSheetView.alert(title: "是否删除上一片段?") { [weak self] (popupView, index, title) in
+                    let partCount = self?.recorder?.clipManager?.partCount
+                    // 删除最后一个视频片段
+                    self?.recorder?.clipManager.deletePart()
+                    // 视频时长
+                    self?.recorderDuration = (self?.recorder?.clipManager.duration)!
+                    // 完成按钮是否显示
+                    self?.finishAlpha()
+                    // 时间按钮是否显示
+                    self?.durationTimeAlpha()
+                    // 设置回删的进度View
+                    self?.publishNewVideoPhotoSetView.progressView.videoCount -= 1
+                    // 设置回删的进度View
+                    self?.setProgress()
+                    // 剩下最后一个片段视频
+                    if partCount == 1 {
+                        // 回删按钮是否隐藏
+                        self?.deleteAlpha(alpha: 0)
+                        // 分段view隐藏
+                        self?.segmentedViewAlpha(alpha: 1)
+                    }
                 }
             }
         }
     }
     
-    
     /// 回删按钮显示跟隐藏
     /// - Parameter alpha: 回删按钮显示跟隐藏
     func deleteAlpha(alpha:CGFloat) {
@@ -253,6 +322,53 @@ extension PublishNewVideoPhotoView {
         }
     }
     
+    /// 设置时间进度
+    func setProgress() {
+        DispatchQueue.main.async {
+            [weak self] in
+            self?.publishNewVideoPhotoSetView.progressView.progress = self?.recorderDuration ?? 0
+        }
+    }
+    
+    /// 设置进度条是否显示
+    ///
+    /// - Parameter alpha: 透明度
+    func setProgressViewAlpha(alpha:CGFloat,duration:TimeInterval) {
+        UIView.animate(withDuration:  duration) {
+            [weak self] in
+            self?.publishNewVideoPhotoSetView.progressView.alpha = alpha
+        }
+        // 更新关闭按钮的位置
+        closeMakeConstraints(duration: duration)
+    }
+    
+    /// 更新关闭按钮的位置
+    ///
+    /// - Parameter duration: 0.5s
+    func closeMakeConstraints(duration:TimeInterval) {
+        if PublishNewViewModel.shared.publishNewRecorderType == .video {
+            publishNewVideoPhotoSetView.closeVideoUpMakeConstraints(duration: duration)
+        }else  if PublishNewViewModel.shared.publishNewRecorderType == .photo {
+            publishNewVideoPhotoSetView.closePhotoUpMakeConstraints(duration: duration)
+        }
+    }
+    
+    /// 设置相机翻转
+    func setCameraFlip() {
+        let cameraPosition = recorder?.cameraPosition
+        if cameraPosition == .front {
+            UIView.transition(with: recorderPreview, duration: 0.5, options: UIView.AnimationOptions.transitionFlipFromLeft, animations: {
+                [weak self] in
+                self?.recorder?.switchCameraPosition()
+            }, completion: { _ in})
+        }else {
+            UIView.transition(with: recorderPreview, duration: 0.5, options: UIView.AnimationOptions.transitionFlipFromRight, animations: {
+                [weak self] in
+                self?.recorder?.switchCameraPosition()
+            }, completion: { _ in})
+        }
+    }
+    
     /// 分段view显示
     /// - Parameter alpha: 透明度
     func segmentedViewAlpha(alpha:CGFloat) {
@@ -260,6 +376,37 @@ extension PublishNewVideoPhotoView {
             PublishNewViewModel.shared.segmentedView?.alpha = alpha
         }
     }
+    
+    
+    /// 滤镜是否显示
+    ///
+    /// - Parameter isHidden: 是否隐藏
+    func effectFilterBeautyViewisHidden(isHidden:Bool) {
+        var offsetY : CGFloat = kScreenHeight
+        if isHidden {
+            offsetY = kScreenHeight
+            segmentedViewAlpha(alpha:1)
+            // 移除点击手势
+            recorderPreview.removetap()
+        }else {
+            offsetY = kScreenHeight-(48 + 125 + kSafeTabBarHeight)
+            segmentedViewAlpha(alpha:0)
+            // 添加点击手势
+            recorderPreview.addTap()
+        }
+        UIView.animate(withDuration: 0.5) {
+            [weak self] in
+            self?.effectFilterBeautyView.frame = CGRect(x: 0, y: offsetY, width: kScreenWidth, height: 48 + 125 +
+                kSafeTabBarHeight)
+            if isHidden {
+                self?.effectFilterBeautyView.alpha = 0
+                self?.publishNewVideoPhotoSetView.alpha = 1
+            }else {
+                self?.effectFilterBeautyView.alpha = 1
+                self?.publishNewVideoPhotoSetView.alpha = 0
+            }
+        }
+    }
 }
 
 // MARK: - 代理
@@ -343,8 +490,9 @@ extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
         finishAlpha()
         // 时间按钮是否显示
         durationTimeAlpha()
+        // 时间进度
+        setProgress()
     }
-
     
     /**
      摄像头返回的原始视频纹理
@@ -370,7 +518,7 @@ extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
      开始预览回调
      */
     func recorderDidStartPreview() {
-        
+
     }
 
     

+ 30 - 7
RainbowPlanet/RainbowPlanet/Modules/PublishNewModule/PublishNew/ViewController/PublishNewViewController.swift

@@ -173,7 +173,12 @@ extension PublishNewViewController : JXSegmentedViewDelegate {
             scrollView.setContentOffset(CGPoint(x: 0, y:0), animated: true)
             segmentedDataSourceAlbum.reloadData(selectedIndex: 0)
             segmentedView.dataSource = segmentedDataSourceAlbum
-            statusBarStyle = .default
+            DispatchQueue.main.async {
+                [weak self] in
+                if self?.statusBarStyle != .default {
+                    self?.statusBarStyle = .default
+                }
+            }
             //停止预览摄像头
             publishNewVideoPhotoView.recorder?.stopPreview()
             PublishNewViewModel.shared.publishNewRecorderType = .none
@@ -181,19 +186,37 @@ extension PublishNewViewController : JXSegmentedViewDelegate {
             scrollView.setContentOffset(CGPoint(x: kScreenWidth, y:0), animated: true)
             segmentedDataSourceVideoPhoto.reloadData(selectedIndex: 1)
             segmentedView.dataSource = segmentedDataSourceVideoPhoto
-            statusBarStyle = .lightContent
-            //开始预览摄像头
-            publishNewVideoPhotoView.recorder?.startPreview()
+
+            DispatchQueue.main.async {
+                [weak self] in
+                if self?.statusBarStyle != .lightContent {
+                    self?.statusBarStyle = .lightContent
+                }
+            }
+            // 录制视频
             PublishNewViewModel.shared.publishNewRecorderType = .video
+            // 开始预览摄像头
+            publishNewVideoPhotoView.recorder?.startPreview()
+            // 是否显示进度条
+            publishNewVideoPhotoView.setProgressViewAlpha(alpha: 1,duration: 0.5)
 
         case 2:
             scrollView.setContentOffset(CGPoint(x: kScreenWidth, y:0), animated: true)
             segmentedDataSourceVideoPhoto.reloadData(selectedIndex: 2)
             segmentedView.dataSource = segmentedDataSourceVideoPhoto
-            statusBarStyle = .lightContent
-            //开始预览摄像头
-            publishNewVideoPhotoView.recorder?.startPreview()
+            DispatchQueue.main.async {
+                [weak self] in
+                if self?.statusBarStyle != .lightContent {
+                    self?.statusBarStyle = .lightContent
+                }
+            }
+            // 拍照
             PublishNewViewModel.shared.publishNewRecorderType = .photo
+            // 开始预览摄像头
+            publishNewVideoPhotoView.recorder?.startPreview()
+            // 是否显示进度条
+            publishNewVideoPhotoView.setProgressViewAlpha(alpha: 0,duration: 0.5)
+
 
         default:
             break

+ 5 - 5
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceManger/SwiftMoyaNetWorkManager/ApiMacro.swift

@@ -10,15 +10,15 @@ import Foundation
 
 /// Service
 let kPersonalService = false
-let kDevelopSever = false
-let kBetaSever = true
+let kDevelopSever = true
+let kBetaSever = false
 let kProductSever = false
 
 /// H5Service
-let kH5PersonalService = false
+let kH5PersonalService = true
 let kH5DevelopSever = false
-let kH5BetaSever = true
-let kH5ProductSever = true
+let kH5BetaSever = false
+let kH5ProductSever = false
 
 // MARK: - 数据服务器
 public func kApiDataPrefix() -> String {