From 09a372bc45fde16fd42257ab6f78b8deeecf720b Mon Sep 17 00:00:00 2001
From: 杨锴 <841720330@qq.com>
Date: 星期三, 16 四月 2025 16:38:05 +0800
Subject: [PATCH] fix bug
---
XQMuse/Root/CLPlayer/CLPlayerView.swift | 21 +
XQMuse/Config/StoreKit/XQMuseStoreKit.storekit | 10
XQMuse/Root/Network/NetworkRequest.swift | 6
XQMuse/Root/TreeGroup/TreeTeskVC.swift | 148 ++++++++-----
Pods/Pods.xcodeproj/project.pbxproj | 32 +-
XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift | 72 +++++
XQMuse/SceneDelegate.swift | 4
XQMuse/Root/PayMusicView/PayMusicVC.swift | 42 ++-
/dev/null | 0
XQMuse/Root/Home/HomeVC.swift | 57 ++--
XQMuse/Root/Me/MeVC.swift | 7
XQMuse/Config/Enums/Enums.swift | 22 ++
XQMuse/Root/Home/View/HomeTopMenuView.swift | 49 ++++
XQMuse/Root/Me/VC/LogoutAccountVC.swift | 1
XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift | 17 +
XQMuse.xcodeproj/project.pbxproj | 76 +-----
XQMuse/Root/Home/VC/BackgroundVoiceVC.swift | 52 ++++
XQMuse/Root/Me/VC/VIPCenterVC.swift | 24 +
XQMuse/Root/Course/View/CourseDetailHeaderView.swift | 2
XQMuse/Info.plist | 2
20 files changed, 414 insertions(+), 230 deletions(-)
diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj
index 2d3a6b5..d99727d 100644
--- a/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Pods/Pods.xcodeproj/project.pbxproj
@@ -14629,7 +14629,7 @@
GCC_PREFIX_HEADER = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-prefix.pch";
INFOPLIST_FILE = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -14873,7 +14873,7 @@
GCC_PREFIX_HEADER = "Target Support Files/UserDefaultsStore/UserDefaultsStore-prefix.pch";
INFOPLIST_FILE = "Target Support Files/UserDefaultsStore/UserDefaultsStore-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -14907,7 +14907,7 @@
GCC_PREFIX_HEADER = "Target Support Files/VTMagic/VTMagic-prefix.pch";
INFOPLIST_FILE = "Target Support Files/VTMagic/VTMagic-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -15163,7 +15163,7 @@
GCC_PREFIX_HEADER = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-prefix.pch";
INFOPLIST_FILE = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -15219,7 +15219,7 @@
GCC_PREFIX_HEADER = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -15742,7 +15742,7 @@
GCC_PREFIX_HEADER = "Target Support Files/VTMagic/VTMagic-prefix.pch";
INFOPLIST_FILE = "Target Support Files/VTMagic/VTMagic-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -15911,7 +15911,7 @@
GCC_PREFIX_HEADER = "Target Support Files/SPPageMenu/SPPageMenu-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SPPageMenu/SPPageMenu-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -16058,7 +16058,7 @@
GCC_PREFIX_HEADER = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-prefix.pch";
INFOPLIST_FILE = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -16113,7 +16113,7 @@
GCC_PREFIX_HEADER = "Target Support Files/SPPageMenu/SPPageMenu-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SPPageMenu/SPPageMenu-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -16260,7 +16260,7 @@
GCC_PREFIX_HEADER = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-prefix.pch";
INFOPLIST_FILE = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -16392,7 +16392,7 @@
GCC_PREFIX_HEADER = "Target Support Files/HandyJSON/HandyJSON-prefix.pch";
INFOPLIST_FILE = "Target Support Files/HandyJSON/HandyJSON-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -16444,7 +16444,7 @@
GCC_PREFIX_HEADER = "Target Support Files/JQTools/JQTools-prefix.pch";
INFOPLIST_FILE = "Target Support Files/JQTools/JQTools-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -17400,7 +17400,7 @@
GCC_PREFIX_HEADER = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -17610,7 +17610,7 @@
GCC_PREFIX_HEADER = "Target Support Files/JQTools/JQTools-prefix.pch";
INFOPLIST_FILE = "Target Support Files/JQTools/JQTools-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -18040,7 +18040,7 @@
GCC_PREFIX_HEADER = "Target Support Files/UserDefaultsStore/UserDefaultsStore-prefix.pch";
INFOPLIST_FILE = "Target Support Files/UserDefaultsStore/UserDefaultsStore-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -18317,7 +18317,7 @@
GCC_PREFIX_HEADER = "Target Support Files/HandyJSON/HandyJSON-prefix.pch";
INFOPLIST_FILE = "Target Support Files/HandyJSON/HandyJSON-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
diff --git a/XQMuse.xcodeproj/project.pbxproj b/XQMuse.xcodeproj/project.pbxproj
index a5bb53b..a6495d2 100644
--- a/XQMuse.xcodeproj/project.pbxproj
+++ b/XQMuse.xcodeproj/project.pbxproj
@@ -112,7 +112,6 @@
135B1D202C8863D10089A9BE /* Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D1F2C8863D10089A9BE /* Types.swift */; };
135B1D222C8868170089A9BE /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D212C8868170089A9BE /* Models.swift */; };
135B1D252C8947630089A9BE /* UserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D242C8947630089A9BE /* UserViewModel.swift */; };
- 135C2A502C7EC48D00CC2A67 /* apngb-animated_sun.png in Resources */ = {isa = PBXBuildFile; fileRef = 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */; };
135C2A652C7F033300CC2A67 /* CLAnimationTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A512C7F033300CC2A67 /* CLAnimationTransitioning.swift */; };
135C2A662C7F033300CC2A67 /* CLFullScreenController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A522C7F033300CC2A67 /* CLFullScreenController.swift */; };
135C2A672C7F033300CC2A67 /* CLFullScreenLeftController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A532C7F033300CC2A67 /* CLFullScreenLeftController.swift */; };
@@ -166,6 +165,7 @@
137ECAD32C783C2000C338BE /* bg.mov in Resources */ = {isa = PBXBuildFile; fileRef = 137ECAD22C783C2000C338BE /* bg.mov */; };
137ECAD62C783C7700C338BE /* TreeTeskVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137ECAD42C783C7700C338BE /* TreeTeskVC.swift */; };
137ECAD72C783C7700C338BE /* TreeTeskVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137ECAD52C783C7700C338BE /* TreeTeskVC.xib */; };
+ 1381BBA12DAF7D2B000717EB /* apngb-animated-flow.png in Resources */ = {isa = PBXBuildFile; fileRef = 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */; };
13846C782C9163BB0078B68F /* TreeTeskDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13846C762C9163BB0078B68F /* TreeTeskDetailVC.swift */; };
13846C792C9163BB0078B68F /* TreeTeskDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13846C772C9163BB0078B68F /* TreeTeskDetailVC.xib */; };
1385DFFA2C6C4EBC00AADB1F /* RefreshModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1385DFF92C6C4EBC00AADB1F /* RefreshModel.swift */; };
@@ -252,26 +252,15 @@
13A6594F2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */; };
13B021DB2C75DD0600414769 /* BankWithdrawVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */; };
13B021DC2C75DD0600414769 /* BankWithdrawVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B021D92C75DD0600414769 /* BankWithdrawVC.swift */; };
- 13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */ = {isa = PBXBuildFile; fileRef = 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */; };
13BA27132C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */; };
13BF65D82C80402500E20F0E /* bg_movie.mov in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65D72C80402500E20F0E /* bg_movie.mov */; };
13BF65DC2C80407600E20F0E /* PlanGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */; };
13BF65DD2C80407600E20F0E /* PlanGuideVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */; };
- 13BF65EB2C804BE100E20F0E /* apngb-animated-flow.png in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */; };
- 13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */; };
- 13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */; };
- 13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */; };
- 13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */; };
13C834ED2D12D1E100B08AE2 /* BlackListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C834EC2D12D1E100B08AE2 /* BlackListVC.swift */; };
13C834F02D12D37700B08AE2 /* BlackUserTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C834EE2D12D37700B08AE2 /* BlackUserTCell.swift */; };
13C834F12D12D37700B08AE2 /* BlackUserTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13C834EF2D12D37700B08AE2 /* BlackUserTCell.xib */; };
13C9DDCD2C8EE1F20008946B /* Home_Style_5_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDCC2C8EE1F20008946B /* Home_Style_5_TCell.xib */; };
13C9DDCE2C8EE1F20008946B /* Home_Style_5_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C9DDCB2C8EE1F20008946B /* Home_Style_5_TCell.swift */; };
- 13C9DDD42C8EE8EB0008946B /* apngb-animated-level-7.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */; };
- 13C9DDD52C8EE8EB0008946B /* apngb-animated-level-6.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */; };
- 13C9DDD62C8EE8EB0008946B /* apngb-animated-level-8.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */; };
- 13C9DDD72C8EE8EB0008946B /* apngb-animated-level-9.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */; };
- 13C9DDD82C8EE8EB0008946B /* apngb-animated-level-10.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */; };
13CBC5D92C73532B00BC66C7 /* MeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBC5D82C73532B00BC66C7 /* MeVC.xib */; };
13CBCCDF2C74793D00C67701 /* NoticeCenterSysDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */; };
13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */; };
@@ -433,7 +422,6 @@
135B1D1F2C8863D10089A9BE /* Types.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Types.swift; sourceTree = "<group>"; };
135B1D212C8868170089A9BE /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; };
135B1D242C8947630089A9BE /* UserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewModel.swift; sourceTree = "<group>"; };
- 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated_sun.png"; sourceTree = "<group>"; };
135C2A512C7F033300CC2A67 /* CLAnimationTransitioning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLAnimationTransitioning.swift; sourceTree = "<group>"; };
135C2A522C7F033300CC2A67 /* CLFullScreenController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLFullScreenController.swift; sourceTree = "<group>"; };
135C2A532C7F033300CC2A67 /* CLFullScreenLeftController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLFullScreenLeftController.swift; sourceTree = "<group>"; };
@@ -487,6 +475,7 @@
137ECAD22C783C2000C338BE /* bg.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = bg.mov; sourceTree = "<group>"; };
137ECAD42C783C7700C338BE /* TreeTeskVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskVC.swift; sourceTree = "<group>"; };
137ECAD52C783C7700C338BE /* TreeTeskVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TreeTeskVC.xib; sourceTree = "<group>"; };
+ 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-flow.png"; sourceTree = "<group>"; };
13846C762C9163BB0078B68F /* TreeTeskDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskDetailVC.swift; sourceTree = "<group>"; };
13846C772C9163BB0078B68F /* TreeTeskDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TreeTeskDetailVC.xib; sourceTree = "<group>"; };
1385DFF92C6C4EBC00AADB1F /* RefreshModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshModel.swift; sourceTree = "<group>"; };
@@ -575,26 +564,15 @@
13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_2_Inner_TCell.xib; sourceTree = "<group>"; };
13B021D92C75DD0600414769 /* BankWithdrawVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BankWithdrawVC.swift; sourceTree = "<group>"; };
13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BankWithdrawVC.xib; sourceTree = "<group>"; };
- 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-1.png"; sourceTree = "<group>"; };
13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceHanSerifCN-Light.otf"; sourceTree = "<group>"; };
13BF65D72C80402500E20F0E /* bg_movie.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = bg_movie.mov; sourceTree = "<group>"; };
13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanGuideVC.swift; sourceTree = "<group>"; };
13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlanGuideVC.xib; sourceTree = "<group>"; };
- 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-flow.png"; sourceTree = "<group>"; };
- 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-2.png"; sourceTree = "<group>"; };
- 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-3.png"; sourceTree = "<group>"; };
- 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-4.png"; sourceTree = "<group>"; };
- 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-5.png"; sourceTree = "<group>"; };
13C834EC2D12D1E100B08AE2 /* BlackListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackListVC.swift; sourceTree = "<group>"; };
13C834EE2D12D37700B08AE2 /* BlackUserTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackUserTCell.swift; sourceTree = "<group>"; };
13C834EF2D12D37700B08AE2 /* BlackUserTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BlackUserTCell.xib; sourceTree = "<group>"; };
13C9DDCB2C8EE1F20008946B /* Home_Style_5_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Home_Style_5_TCell.swift; sourceTree = "<group>"; };
13C9DDCC2C8EE1F20008946B /* Home_Style_5_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Home_Style_5_TCell.xib; sourceTree = "<group>"; };
- 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-7.png"; sourceTree = "<group>"; };
- 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-6.png"; sourceTree = "<group>"; };
- 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-8.png"; sourceTree = "<group>"; };
- 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-9.png"; sourceTree = "<group>"; };
- 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-10.png"; sourceTree = "<group>"; };
13CBC5D82C73532B00BC66C7 /* MeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeVC.xib; sourceTree = "<group>"; };
13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeCenterSysDetailVC.swift; sourceTree = "<group>"; };
13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NoticeCenterSysDetailVC.xib; sourceTree = "<group>"; };
@@ -1000,19 +978,8 @@
137ECADB2C78578A00C338BE /* Pngs */ = {
isa = PBXGroup;
children = (
+ 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */,
138995352C943A4300BC7F78 /* droop */,
- 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */,
- 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */,
- 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */,
- 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */,
- 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */,
- 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */,
- 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */,
- 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */,
- 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */,
- 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */,
- 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */,
- 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */,
);
path = Pngs;
sourceTree = "<group>";
@@ -1481,14 +1448,12 @@
13FF0B462C75C820008E26CF /* WalletVC.xib in Resources */,
130B765E2C6C4C33006371AF /* HomeItemListVC.xib in Resources */,
1304526C2CB4CB210049FB3A /* StoreKitTestCertificate.cer in Resources */,
- 13C9DDD72C8EE8EB0008946B /* apngb-animated-level-9.png in Resources */,
13F24E3D2C75866100D2BA90 /* BindPhone_3_VC.xib in Resources */,
13CBC5D92C73532B00BC66C7 /* MeVC.xib in Resources */,
13DC34F02C913E7F007E1B61 /* TreeTeskFirstRuleView.xib in Resources */,
1385E0072C6C558200AADB1F /* HomeRelaxBanner_2_CCell.xib in Resources */,
131111822C749085002877FC /* StudyListVC.xib in Resources */,
132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */,
- 13C9DDD42C8EE8EB0008946B /* apngb-animated-level-7.png in Resources */,
137ECAD32C783C2000C338BE /* bg.mov in Resources */,
13E5C9852D5D97E400671533 /* bg_water.mov in Resources */,
1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */,
@@ -1498,9 +1463,7 @@
13846C792C9163BB0078B68F /* TreeTeskDetailVC.xib in Resources */,
1333DC7E2C72E7A500D8ACAE /* CourseSendGiftView.xib in Resources */,
132C40292C816003002E3270 /* SourceHanSerifCN-Medium.otf in Resources */,
- 13C9DDD52C8EE8EB0008946B /* apngb-animated-level-6.png in Resources */,
137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */,
- 13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */,
13A0A8A52C746B5600DF08B6 /* CommonDatePickerView.xib in Resources */,
13A37A012C75C1DE0038D5C8 /* LevelVC.xib in Resources */,
1324A6452C805B4000AA5098 /* FlyFlowerSong.otf in Resources */,
@@ -1512,7 +1475,6 @@
138FE0DF2C757B2A00A964E8 /* BindPhone_1_VC.xib in Resources */,
138995402C943AA700BC7F78 /* static-level-3.png in Resources */,
13FB6D842C6EEFE900A0685D /* MenuListTCell.xib in Resources */,
- 13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */,
138F0C362C7597CA0072A16C /* HelpCenterVC.xib in Resources */,
131CE0FB2C91299400D1234A /* TreeTeskListView.xib in Resources */,
138995432C943AA700BC7F78 /* static-level-2.png in Resources */,
@@ -1521,7 +1483,6 @@
13A0EAA82D57134300ABC2F6 /* UpdateVersionView.xib in Resources */,
1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */,
134CC7E02C73283700EAEFB7 /* PavilionSearchVC.xib in Resources */,
- 13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */,
130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */,
13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */,
132C7EF32C8FE3BF00A4CA18 /* ChooseOptTitleView.xib in Resources */,
@@ -1531,7 +1492,6 @@
13391E022C73334000B9513F /* PavilionDetailVC.xib in Resources */,
13EC08902C74990B00E00128 /* EmptyCCell.xib in Resources */,
1377B4172C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib in Resources */,
- 13C9DDD62C8EE8EB0008946B /* apngb-animated-level-8.png in Resources */,
13FB6D8C2C6EFB5400A0685D /* CourseDetailHeaderView.xib in Resources */,
1324A64D2C80706700AA5098 /* PlanGuide_1_VC.xib in Resources */,
13985D9F2C69B2440046B6DC /* Assets.xcassets in Resources */,
@@ -1549,7 +1509,6 @@
13985DC32C69E0BF0046B6DC /* HomeTopMenuCCell.xib in Resources */,
13A6594A2C6F4F2D00F731FA /* CourseDetail_2_TCell.xib in Resources */,
139C165E2C6A0AC600A924D9 /* Home_Style_3_TCell.xib in Resources */,
- 135C2A502C7EC48D00CC2A67 /* apngb-animated_sun.png in Resources */,
13BF65DD2C80407600E20F0E /* PlanGuideVC.xib in Resources */,
137175C82C6C3C6D00B38EF1 /* Agenda-Light.otf in Resources */,
13CBCCE42C747C3D00C67701 /* NoticeCenterUserRepeaceDetailVC.xib in Resources */,
@@ -1562,27 +1521,23 @@
130F94672C7DAB27003A348B /* SearchHistoryCCell.xib in Resources */,
139C165A2C6A053000A924D9 /* Home_Style_2_TCell.xib in Resources */,
1306028E2C917D3E0019ECDE /* TreeTeskEnergyExchangeRecordTCell.xib in Resources */,
- 13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */,
1300BD3B2C6DFB1C000BCA5E /* VIPCenterVC.xib in Resources */,
139466482C6B8E0200F6FB15 /* UpdatePhoneVC.xib in Resources */,
134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */,
1304526A2CB4CA310049FB3A /* XQMuseStoreKit.storekit in Resources */,
13BA27132C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf in Resources */,
132C7EF72C8FE9BB00A4CA18 /* ChooseOptTitleTCell.xib in Resources */,
- 13C9DDD82C8EE8EB0008946B /* apngb-animated-level-10.png in Resources */,
13271D852C75EF8200DE1328 /* AddBankInfoVC.xib in Resources */,
1377B40D2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib in Resources */,
137175CC2C6C412A00B38EF1 /* BackgroundVoiceVC.xib in Resources */,
130602882C91790B0019ECDE /* TreeTeskExchangeSuccessView.xib in Resources */,
13ED09482C916FD30018BB10 /* TreeTeskEnergyTCell.xib in Resources */,
138995492C943AA700BC7F78 /* static-level-1.png in Resources */,
- 13BF65EB2C804BE100E20F0E /* apngb-animated-flow.png in Resources */,
13FAD54E2C901D6300566998 /* SearchContentVC.xib in Resources */,
137776932C6AFE69004FF994 /* SearchVC.xib in Resources */,
132DB8FF2C74826D00EF33A7 /* SettingVC.xib in Resources */,
13463E9F2CDE2D1E00DD0C53 /* VIPAgreementVC.xib in Resources */,
13985DBF2C69DDF90046B6DC /* HomeTopMenuView.xib in Resources */,
- 13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */,
1385E00B2C6C57A900AADB1F /* HomeItemDetailVC.xib in Resources */,
138F9E112CF422B200075C5D /* PurchaseMethodView.xib in Resources */,
138995422C943AA700BC7F78 /* static-level-9.png in Resources */,
@@ -1618,6 +1573,7 @@
13E160202C6CB8930027F781 /* CommentListVC.xib in Resources */,
139228B12C6B8374006F3CB6 /* Popup_1_View.xib in Resources */,
137ECAD02C78268B00C338BE /* LoginTreatyVC.xib in Resources */,
+ 1381BBA12DAF7D2B000717EB /* apngb-animated-flow.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1989,7 +1945,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 15;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = M9T3KVL537;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -2002,10 +1958,10 @@
INFOPLIST_FILE = XQMuse/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "泉疗愈";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
- INFOPLIST_KEY_NSCameraUsageDescription = "$(PRODUCT_NAME)需要使用相机来上传头像";
- INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆";
- INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆";
- INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "$(PRODUCT_NAME)需要使用相册来上传头像";
+ INFOPLIST_KEY_NSCameraUsageDescription = "XQMuse需要使用相机来上传头像";
+ INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆";
+ INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆";
+ INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "XQMuse需要使用相册来上传头像";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
@@ -2015,7 +1971,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.0.4;
+ MARKETING_VERSION = 1.0.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -2147,7 +2103,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 15;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = M9T3KVL537;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -2160,10 +2116,10 @@
INFOPLIST_FILE = XQMuse/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "泉疗愈";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
- INFOPLIST_KEY_NSCameraUsageDescription = "$(PRODUCT_NAME)需要使用相机来上传头像";
- INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆";
- INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆";
- INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "$(PRODUCT_NAME)需要使用相册来上传头像";
+ INFOPLIST_KEY_NSCameraUsageDescription = "XQMuse需要使用相机来上传头像";
+ INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆";
+ INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆";
+ INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "XQMuse需要使用相册来上传头像";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
@@ -2173,7 +2129,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.0.4;
+ MARKETING_VERSION = 1.0.10;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
diff --git a/XQMuse/Config/Enums/Enums.swift b/XQMuse/Config/Enums/Enums.swift
index 68597b9..a31b06e 100644
--- a/XQMuse/Config/Enums/Enums.swift
+++ b/XQMuse/Config/Enums/Enums.swift
@@ -55,6 +55,12 @@
case level_9 = 9
case level_10 = 10
+ static var sunAni:String{
+ get{
+ return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744626206206sunshine.png"
+ }
+ }
+
var aniResource:String{
switch self {
case .level_1:return "apngb-animated-level-1"
@@ -70,6 +76,22 @@
}
}
+ var aniResourceUrl:String{
+ switch self {
+ case .level_1:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_1.png"
+ case .level_2:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_2.png"
+ case .level_3:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_3.png"
+ case .level_4:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_4.png"
+ case .level_5:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_5.png"
+ case .level_6:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_6.png"
+ case .level_7:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_7.png"
+ case .level_8:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_8.png"
+ case .level_9:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_9.png"
+ case .level_10:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_10.png"
+ }
+ }
+
+
var staticDroopResource:String{
switch self {
case .level_1:return "static-level-1"
diff --git a/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit b/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
index 1fc0aa3..53ee723 100644
--- a/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
+++ b/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
@@ -32,13 +32,13 @@
"internalID" : "DDDE321B",
"localizations" : [
{
- "description" : "购买6个月会员",
- "displayName" : "半年会员",
+ "description" : "购买3个月会员",
+ "displayName" : "季度会员",
"locale" : "zh_CN"
}
],
"productID" : "com.XQMuse.VIP.semester.0",
- "referenceName" : "购买半年会员",
+ "referenceName" : "购买季度会员",
"type" : "NonRenewingSubscription"
},
{
@@ -200,9 +200,9 @@
{
"displayPrice" : "200",
"eligibility" : [
+ "new",
"existing",
- "expired",
- "new"
+ "expired"
],
"internalID" : "F62AF748",
"isStackable" : true,
diff --git a/XQMuse/Info.plist b/XQMuse/Info.plist
index b3b64e3..0d38288 100644
--- a/XQMuse/Info.plist
+++ b/XQMuse/Info.plist
@@ -23,6 +23,8 @@
</array>
</dict>
</array>
+ <key>ITSAppUsesNonExemptEncryption</key>
+ <false/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
diff --git a/XQMuse/Root/CLPlayer/CLPlayerView.swift b/XQMuse/Root/CLPlayer/CLPlayerView.swift
index 39797f5..827076e 100644
--- a/XQMuse/Root/CLPlayer/CLPlayerView.swift
+++ b/XQMuse/Root/CLPlayer/CLPlayerView.swift
@@ -8,6 +8,7 @@
import AVFoundation
import SnapKit
import UIKit
+import JQTools
extension CLPlayerView {
enum CLWaitReadyToPlayState {
@@ -235,15 +236,17 @@
if config.rotateStyle == .small, isFullScreen { return }
if config.rotateStyle == .fullScreen, !isFullScreen { return }
- switch UIDevice.current.orientation {
- case .portrait:
- dismiss()
- case .landscapeLeft:
- presentWithOrientation(.left)
- case .landscapeRight:
- presentWithOrientation(.right)
- default:
- break
+ if let vc = JQ_currentViewController() as? CourseVC,vc.pageViewController.currentPage == 1{
+ switch UIDevice.current.orientation {
+ case .portrait:
+ dismiss()
+ case .landscapeLeft:
+ presentWithOrientation(.left)
+ case .landscapeRight:
+ presentWithOrientation(.right)
+ default:
+ break
+ }
}
}
diff --git a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift b/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
index 6b4a7e6..f8cd103 100644
--- a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
+++ b/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
@@ -28,6 +28,16 @@
private var bannerModels = [CommonBannerModel]()
private var viewModel = CourseVCOfficalViewModel()
+ override func viewDidAppear(_ animated: Bool) {
+ super.viewDidAppear(animated)
+ Services.getCourseBannerList().subscribe(onNext: {data in
+ for (index,v) in (data.data ?? []).enumerated(){
+ self.bannerModels.append(CommonBannerModel(index: index, id: v.id, name: v.name, resource:v.imageUrl.jq_urlEncoded(), mediaType: .imageUrl,courseId: v.courseId))
+ }
+ self.collectionView.reloadData()
+ }).disposed(by: disposeBag)
+ }
+
override func viewDidLoad() {
super.viewDidLoad()
@@ -41,12 +51,7 @@
self.collectionView.reloadData()
}).disposed(by: disposeBag)
- Services.getCourseBannerList().subscribe(onNext: {data in
- for (index,v) in (data.data ?? []).enumerated(){
- self.bannerModels.append(CommonBannerModel(index: index, id: v.id, name: v.name, resource:v.imageUrl.jq_urlEncoded(), mediaType: .imageUrl,courseId: v.courseId))
- }
- self.collectionView.reloadData()
- }).disposed(by: disposeBag)
+
viewModel.configure(collectionView)
viewModel.beginRefresh()
diff --git a/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift b/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
index f5faa14..df8b29c 100644
--- a/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
+++ b/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
@@ -32,15 +32,13 @@
cell0!.backgroundColor = UIColor(hexString: "#f6f6f6")
cell1!.backgroundColor = UIColor(hexString: "#f6f6f6")
- Services.tutorInfo().subscribe(onNext: { data in
- if let m = data.data{
- self.model = m
- self.cell0!.setContent(title: "导师简介", content: m.tutorIntroduction)
- self.cell1!.setItems(m.list)
- self.tableView?.reloadData()
- self.headerView.updateVideoUrl(m.videoUrl,autoPlay: false,placeHoderImageUrl: m.coverUrl.jq_urlEncoded(),delegate: self)
- }
- }).disposed(by: disposeBag)
+
+ getData()
+// LoginSuccess_Noti
+
+ NotificationCenter.default.rx.notification(LoginSuccess_Noti).take(until: self.rx.deallocated).subscribe {[unowned self] _ in
+ self.getData()
+ }.disposed(by: disposeBag)
self.cell0?.webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in
@@ -53,6 +51,23 @@
if height > self.cell0?.cons_webHei.constant ?? 0{
self.cell0?.cons_webHei.constant = height
self.tableView?.reloadData()
+ }
+ }
+ }).disposed(by: disposeBag)
+ }
+
+ private func getData(){
+ Services.tutorInfo().subscribe(onNext: {[weak self] data in
+ guard let weakSelf = self else { return }
+ if let m = data.data{
+ weakSelf.model = m
+ weakSelf.cell0!.setContent(title: "导师简介", content: m.tutorIntroduction)
+ weakSelf.cell1!.setItems(m.list)
+ weakSelf.tableView?.reloadData()
+ if let videoUrl = weakSelf.model?.videoUrl.jq_urlEncoded(),videoUrl.jq_isVideo{
+ weakSelf.checkCacheAudio(from: URL(string:videoUrl)!) { state, url in
+ weakSelf.headerView.updateVideoUrl(videoUrl,autoPlay: false,placeHoderImageUrl: m.coverUrl.jq_urlEncoded(),delegate: self)
+ }
}
}
}).disposed(by: disposeBag)
@@ -93,6 +108,45 @@
override var shouldAutorotate: Bool{
return true
}
+
+ internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) {
+
+ let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("Masters")
+
+ let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension)
+
+ // 检查缓存中是否已存在文件
+ if FileManager.default.fileExists(atPath: videoCacheUrl.path) {
+ print("启用缓存")
+ completion(true,videoCacheUrl)
+ return
+ }else{
+ completion(false,url)
+ print("没有缓存:执行下载")
+ }
+
+ // 使用URLSession下载视频
+ let downloadTask = URLSession.shared.downloadTask(with: url) {
+ tempLocalUrl, response, error in
+ print("执行下载任务")
+ if let tempLocalUrl = tempLocalUrl, error == nil {
+ do {
+ let temp = videoCacheUrl
+
+ if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){
+ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true)
+ }
+
+ try FileManager.default.moveItem(at: tempLocalUrl, to: temp)
+ } catch let e {
+ print("视频缓存失败:catch:\(e)")
+ }
+ } else {
+ print("视频缓存失败:\(error?.localizedDescription ?? "")")
+ }
+ }
+ downloadTask.resume()
+ }
}
extension CourseVCTeacherSpecialVC:UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
diff --git a/XQMuse/Root/Course/View/CourseDetailHeaderView.swift b/XQMuse/Root/Course/View/CourseDetailHeaderView.swift
index 36f4835..4cb8808 100644
--- a/XQMuse/Root/Course/View/CourseDetailHeaderView.swift
+++ b/XQMuse/Root/Course/View/CourseDetailHeaderView.swift
@@ -16,7 +16,7 @@
@IBOutlet weak var image_cover: UIImageView!
@IBOutlet weak var icon: UIImageView!
- private var videoView:VideoView?
+ private(set) var videoView:VideoView?
override func awakeFromNib() {
diff --git a/XQMuse/Root/Home/HomeVC.swift b/XQMuse/Root/Home/HomeVC.swift
index c9d1add..afabaac 100644
--- a/XQMuse/Root/Home/HomeVC.swift
+++ b/XQMuse/Root/Home/HomeVC.swift
@@ -54,6 +54,7 @@
viewModel?.userFirstOpenTreeTask = true
UserDefaultSettingViewModel.saveSetting(viewModel!)
self?.navigationController?.tabBarController?.selectedIndex = 2
+ self?.toPlanGuide()
}
}).disposed(by: disposeBag)
@@ -71,7 +72,6 @@
if AudioPlayer.getSharedInstance().bgmPlayer != nil && PayMusicVC.getCurrentStatus() != .pause{
AudioPlayer.getSharedInstance().bgmPlayer?.play()
-// AudioPlayer.getSharedInstance().masterPlayer?.play()
return
}
@@ -113,30 +113,7 @@
switch state{
case .notRestricted:
- if UserDefaultSettingViewModel.getSetting()?.userFirstLaunch ?? true{
- DispatchQueue.main.async {[weak self] in
- guard let weakSelf = self else { return }
- let vc = LoginTreatyVC()
- vc.topIndex = 0
- vc.clickHandle { state in
- if !state{
- exit(0)
- }else{
- if var m = UserDefaultSettingViewModel.getSetting(){
- m.userFirstLaunch = false
- UserDefaultSettingViewModel.saveSetting(m)
- }
- //跳转计划引导
- let nav = BaseNav(rootViewController: PlanGuideVC(isFromFist: true))
- nav.modalPresentationStyle = .fullScreen
- weakSelf.present(nav, animated: true)
- }
- }
- vc.modalPresentationStyle = .custom
- weakSelf.present(vc, animated: true)
- }
- }
-
+ self?.toPlanGuide()
DispatchQueue.main.async {
self?.getBGMData()
self?.tableView.mj_header?.beginRefreshing()
@@ -389,6 +366,32 @@
}
}
+ private func toPlanGuide(){
+ if UserDefaultSettingViewModel.getSetting()?.userFirstLaunch ?? true{
+ DispatchQueue.main.async {[weak self] in
+ guard let weakSelf = self else { return }
+ let vc = LoginTreatyVC()
+ vc.topIndex = 0
+ vc.clickHandle { state in
+ if !state{
+ exit(0)
+ }else{
+ if var m = UserDefaultSettingViewModel.getSetting(){
+ m.userFirstLaunch = false
+ UserDefaultSettingViewModel.saveSetting(m)
+ }
+ //跳转计划引导
+ let nav = BaseNav(rootViewController: PlanGuideVC(isFromFist: true))
+ nav.modalPresentationStyle = .fullScreen
+ weakSelf.present(nav, animated: true)
+ }
+ }
+ vc.modalPresentationStyle = .custom
+ weakSelf.present(vc, animated: true)
+ }
+ }
+ }
+
private func updateBGMData(userDefaultSettingModel:UserDefaultSettingModel){
if AudioPlayer.getSharedInstance().bgmPlayer != nil && PayMusicVC.getCurrentStatus() != .pause{
AudioPlayer.getSharedInstance().bgmPlayer?.play()
@@ -416,10 +419,6 @@
}else{
self.titleItems[0] = TitleItem(title: "每日疗愈", subTitle: "Daily Meditation")
}
-
-
-// self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
-// self.tableView.reloadRows(at: [IndexPath(row: 1, section: 0)], with: .none)
self.tableView.reloadData()
}).disposed(by: disposeBag)
}
diff --git a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift b/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
index 7188235..3714435 100644
--- a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
+++ b/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
@@ -107,9 +107,6 @@
v1.jq_borderColor = .white
v1.jq_cornerRadius = 8.5
-// slider_voice.setThumbImage(v1.qmui_snapshotLayerImage(), for: .normal)
-// slider_voice.setThumbImage(v1.qmui_snapshotLayerImage(), for: .highlighted)
-
collectionView.collectionViewLayout = TestLeftRightCollectionViewFlowLayout(width: JQ_ScreenW, height: 213.5)
collectionView.delegate = self
collectionView.dataSource = self
@@ -182,11 +179,11 @@
collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
guard let URL = URL(string: model.audioFile.jq_urlEncoded()) else { return }
-
- tempPlayer = AVPlayer(url: URL)
-// tempPlayer?.volume = slider_voice.value
- tempPlayer!.play()
- isPlaying = true
+ checkCacheAudio(from: URL) {[unowned self] state, url in
+ self.tempPlayer = AVPlayer(url: url)
+ self.tempPlayer!.play()
+ self.isPlaying = true
+ }
collectionView.reloadData()
}
@@ -210,6 +207,45 @@
}
return cell
}
+
+ internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) {
+
+ let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("BGMs")
+
+ let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension)
+
+ // 检查缓存中是否已存在文件
+ if FileManager.default.fileExists(atPath: videoCacheUrl.path) {
+ print("启用缓存")
+ completion(true,videoCacheUrl)
+ return
+ }else{
+ completion(false,url)
+ print("没有缓存:执行下载")
+ }
+
+ // 使用URLSession下载视频
+ let downloadTask = URLSession.shared.downloadTask(with: url) {
+ tempLocalUrl, response, error in
+ print("执行下载任务")
+ if let tempLocalUrl = tempLocalUrl, error == nil {
+ do {
+ let temp = videoCacheUrl
+
+ if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){
+ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true)
+ }
+
+ try FileManager.default.moveItem(at: tempLocalUrl, to: temp)
+ } catch let e {
+ print("视频缓存失败:catch:\(e)")
+ }
+ } else {
+ print("视频缓存失败:\(error?.localizedDescription ?? "")")
+ }
+ }
+ downloadTask.resume()
+ }
}
extension BackgroundVoiceVC:UICollectionViewDelegateFlowLayout{
diff --git a/XQMuse/Root/Home/View/HomeTopMenuView.swift b/XQMuse/Root/Home/View/HomeTopMenuView.swift
index d813fe2..96250c9 100644
--- a/XQMuse/Root/Home/View/HomeTopMenuView.swift
+++ b/XQMuse/Root/Home/View/HomeTopMenuView.swift
@@ -31,7 +31,7 @@
private var disposeBag = DisposeBag()
private var defaultItems = [HomeTopMenuItem]()
private var clouse:((HomeTopMenuItem)->Void)?
-
+ private let session = URLSession.shared
private var aVPlayerLayer:AVPlayerLayer?
override func awakeFromNib() {
@@ -82,7 +82,9 @@
}
if let videoUrl = model.backUrl,videoUrl.isEmpty == false{
- setPlayer(url: URL(string: videoUrl)!)
+ checkCacheAudio(from: URL(string: videoUrl)!) {[unowned self] state, url in
+ self.setPlayer(url: url)
+ }
return
}
@@ -109,6 +111,49 @@
}
}
+ // 下载视频并缓存,如果没有缓存,原路返回并异步下载
+ internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) {
+
+ let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("bgVideos")
+
+ let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension)
+
+ // 检查缓存中是否已存在文件
+ if FileManager.default.fileExists(atPath: videoCacheUrl.path) {
+ print("启用缓存")
+ completion(true,videoCacheUrl)
+ return
+ }else{
+ completion(false,url)
+ print("没有缓存:执行下载")
+ }
+
+ // 使用URLSession下载视频
+ let downloadTask = session.downloadTask(with: url) {
+ tempLocalUrl, response, error in
+ print("执行下载任务")
+ if let tempLocalUrl = tempLocalUrl, error == nil {
+ do {
+ let temp = videoCacheUrl
+
+ if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){
+ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true)
+ }
+
+ try FileManager.default.moveItem(at: tempLocalUrl, to: temp)
+ } catch let e {
+ print("视频缓存失败:catch:\(e)")
+
+
+
+ }
+ } else {
+ print("视频缓存失败:\(error?.localizedDescription ?? "")")
+ }
+ }
+ downloadTask.resume()
+ }
+
func resetItems(_ items:[HomeTopMenuItem]){
defaultItems.removeAll()
defaultItems = items
diff --git a/XQMuse/Root/Me/MeVC.swift b/XQMuse/Root/Me/MeVC.swift
index 229b346..56c9053 100644
--- a/XQMuse/Root/Me/MeVC.swift
+++ b/XQMuse/Root/Me/MeVC.swift
@@ -68,6 +68,9 @@
let loginNav = LoginNav(rootViewController: LoginVC())
loginNav.modalPresentationStyle = .fullScreen
JQ_currentViewController().present(loginNav, animated: true)
+ }else{
+ getData()
+ queryNotice()
}
//通讯录通讯录通讯录
@@ -113,9 +116,6 @@
}
needLaunch = false
-
- getData()
- queryNotice()
}
override func setUI() {
@@ -182,7 +182,6 @@
if let model = data.data{
UserViewModel.saveAvatarInfo(model)
self?.setUserUI(model: model)
-
}
}) {[weak self] error in
let model = UserViewModel.getAvatarInfo()
diff --git a/XQMuse/Root/Me/VC/LogoutAccountVC.swift b/XQMuse/Root/Me/VC/LogoutAccountVC.swift
index 5193d74..454f68a 100644
--- a/XQMuse/Root/Me/VC/LogoutAccountVC.swift
+++ b/XQMuse/Root/Me/VC/LogoutAccountVC.swift
@@ -42,6 +42,7 @@
Services.deleteUser().subscribe(onNext: {data in
CommonAlertView.show(title: "提示", content: "注销成功", cancelStr: nil, completeStr: "确定", isSingle: true) { state in
if state{
+ UserDefaultSettingViewModel.clearSetting()
sceneDelegate?.needLogin()
self.navigationController?.popToRootViewController(animated: false)
DispatchQueue.main.asyncAfter(delay: 0.5) {
diff --git a/XQMuse/Root/Me/VC/VIPCenterVC.swift b/XQMuse/Root/Me/VC/VIPCenterVC.swift
index 12d3190..1b0410f 100644
--- a/XQMuse/Root/Me/VC/VIPCenterVC.swift
+++ b/XQMuse/Root/Me/VC/VIPCenterVC.swift
@@ -93,6 +93,22 @@
self.webView.loadHTMLString(string.jq_wrapHtml(), baseURL: nil)
}
}).disposed(by: disposeBag)
+
+ Services.getUserDetail(showProgress: false).subscribe(onNext: {[weak self]data in
+ if let model = data.data{
+ if model.isVip == .yes{
+ self?.bg_vip.image = UIImage(named: "bg_vip")
+ self?.label_vipHint.text = "您将享受所有会员专享音频,尽情畅游泉疗愈世界"
+ self?.label_expirtTime.text = model.vipExpireTime.components(separatedBy: " ").first! + "到期"
+ }else{
+ self?.bg_vip.image = UIImage(named: "bg_vip_u")
+ self?.label_vipHint.text = "升级为会员,解锁会员专属体验"
+ self?.label_expirtTime.text = "你还未开通会员服务"
+ }
+ }
+ }) { _ in
+
+ }.disposed(by: disposeBag)
}
override func setRx() {
@@ -358,7 +374,7 @@
priorDayPrice = product.price.doubleValue / 365.0
// case "com.XQmuse.Non.renewing.half.year.1":
case "com.XQmuse.non.renewable.sub.quarter.1":
- priorDayPrice = product.price.doubleValue / 180.0
+ priorDayPrice = product.price.doubleValue / 90.0
// case "com.XQmuse.Non.renewing.month.1":
case "com.XQmuse.non.renewable.sub.month.1":
priorDayPrice = product.price.doubleValue / 30.0
@@ -395,14 +411,14 @@
lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.monthlyVipIos / 30.0)
case 1:
// price = vipContentModel.quarterlyVipIos
- label_title.text = "半年会员"
+ label_title.text = "季度会员"
formartPrice = vipContentModel.quarterlyVipIos.jq_formatFloat
- lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.quarterlyVipIos / 30.0)
+ lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.quarterlyVipIos / 90)
case 2:
// price = vipContentModel.annualVipIos
label_title.text = "年度会员"
formartPrice = vipContentModel.annualVipIos.jq_formatFloat
- lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.annualVipIos / 30.0)
+ lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.annualVipIos / 365)
default:break
}
diff --git a/XQMuse/Root/Network/NetworkRequest.swift b/XQMuse/Root/Network/NetworkRequest.swift
index 700804c..a8007fb 100644
--- a/XQMuse/Root/Network/NetworkRequest.swift
+++ b/XQMuse/Root/Network/NetworkRequest.swift
@@ -239,13 +239,15 @@
if let next = BaseResponse<T>.deserialize(from: jsonString){
switch next.code{
case 200:ob.onNext(next)
- case 401:ob.onError(NetRequestError.InvaildSession)
+ case 401:
+ ob.onError(NetRequestError.InvaildSession)
+ sceneDelegate?.needLogin()
case 501:
sceneDelegate?.needLogin()
ob.onError(NetRequestError.InvaildSession)
default:
if !ignoreAlert{
- alertError(msg: "网络连接超时")
+ alertError(msg: "\(next.msg)")
}
ob.onError(NetRequestError.Other(next.code,next.msg))
}
diff --git a/XQMuse/Root/PayMusicView/PayMusicVC.swift b/XQMuse/Root/PayMusicView/PayMusicVC.swift
index da1beae..abcf9b3 100644
--- a/XQMuse/Root/PayMusicView/PayMusicVC.swift
+++ b/XQMuse/Root/PayMusicView/PayMusicVC.swift
@@ -507,27 +507,27 @@
/// 播放场景音乐
func playSceneAt(_ url:String){
- guard let URL = URL(string: url.jq_urlEncoded()) else { return }
- scenePlayer?.pause()
+ checkCacheAudio(from: URL(string: url.jq_urlEncoded())!) {[weak self] state, url in
+ guard let weakSelf = self else { return }
+ weakSelf.scenePlayer?.pause()
- if scenePlayer == nil{
- scenePlayer = AVPlayer(url: URL)
- }else{
- scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: URL))
- }
+ if weakSelf.scenePlayer == nil{
+ weakSelf.scenePlayer = AVPlayer(url: url)
+ }else{
+ weakSelf.scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: url))
+ }
- do {
- try AVAudioSession.sharedInstance().setActive(false)
- try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: [])
- } catch {
- print(error)
+ do {
+ try AVAudioSession.sharedInstance().setActive(false)
+ try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: [])
+ } catch {
+ print(error)
+ }
+
+ DispatchQueue.main.asyncAfter(delay: 0.5) {
+ weakSelf.scenePlayer?.play()
+ }
}
-
- DispatchQueue.main.asyncAfter(delay: 0.5) {
- self.scenePlayer?.play()
-// self.scenePlayer?.allowsExternalPlayback = false
-// self.scenePlayer?.usesExternalPlaybackWhileExternalScreenIsActive = false
- }
}
func dellocScene(){
@@ -651,14 +651,18 @@
// 检查缓存中是否已存在文件
if FileManager.default.fileExists(atPath: videoCacheUrl.path) {
+ print("启用缓存")
completion(true,videoCacheUrl)
return
}else{
completion(false,url)
+ print("没有缓存:执行下载")
}
// 使用URLSession下载视频
- let downloadTask = session.downloadTask(with: url) { tempLocalUrl, response, error in
+ let downloadTask = session.downloadTask(with: url) {
+ tempLocalUrl, response, error in
+ print("执行下载任务")
if let tempLocalUrl = tempLocalUrl, error == nil {
do {
let temp = videoCacheUrl
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png
deleted file mode 100644
index 58f4538..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png
deleted file mode 100644
index 11fc3df..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png
deleted file mode 100644
index 1b228ff..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png
deleted file mode 100644
index 212d4cd..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png
deleted file mode 100644
index d83606d..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png
deleted file mode 100644
index 8595004..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png
deleted file mode 100644
index 86b613a..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png
deleted file mode 100644
index c3cf531..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png
deleted file mode 100644
index e09511b..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png
deleted file mode 100644
index da6dc53..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png
deleted file mode 100644
index dd51412..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/TreeTeskVC.swift b/XQMuse/Root/TreeGroup/TreeTeskVC.swift
index a4421cc..5cd1190 100644
--- a/XQMuse/Root/TreeGroup/TreeTeskVC.swift
+++ b/XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -9,6 +9,7 @@
import AVKit
import JQTools
import APNGKit
+import SDWebImage
import UserDefaultsStore
let TreeTaskUpdate_Noti = Notification.Name.init(rawValue: "TreeTaskUpdate_Noti")
@@ -146,17 +147,21 @@
view_group_inner.jq_addCorners(corner: [.topLeft,.bottomRight], radius: 8)
+ let path = JQ_LibaryPath + "/tree_img/"
+ SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: TreeLevel.sunAni) { [unowned self] data in
+ guard let originData = data else {return}
+ if let sunApngImage = try? APNGImage(data: originData){
+ sunApngImage.numberOfPlays = 2
+ aPNGSunImageView = APNGImageView(image: sunApngImage)
+ view.addSubview(aPNGSunImageView!)
+ aPNGSunImageView?.layer.zPosition = -998
+ aPNGSunImageView!.snp.makeConstraints { make in
+ make.edges.equalToSuperview()
+ }
+ aPNGSunImageView!.startAnimating()
+ }
+ }
- if let sunApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated_sun", withExtension: "png")!){
- sunApngImage.numberOfPlays = 2
- aPNGSunImageView = APNGImageView(image: sunApngImage)
- view.addSubview(aPNGSunImageView!)
- aPNGSunImageView?.layer.zPosition = -998
- aPNGSunImageView!.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
- aPNGSunImageView!.startAnimating()
- }
updateAni()
view.addSubview(taskListView)
@@ -417,63 +422,65 @@
private func updateAni(_ needAni:Bool = true){
guard let treeLevel = currentLevel else {return}
-
- guard let animateUrl = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return}
guard let staticDroopUrl = Bundle.main.url(forResource: treeLevel.staticDroopResource, withExtension: "png") else {return}
- if let treeApngImage = try? APNGImage(fileURL: animateUrl){
+ let path = JQ_LibaryPath + "/tree_img/"
+ SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: treeLevel.aniResourceUrl) { [unowned self] data in
+ guard let dataOrigin = data else {return}
+ if let treeApngImage = try? APNGImage(data: dataOrigin){
- if treeLevel == .level_1{
- treeApngImage.numberOfPlays = 1
- }else{
- treeApngImage.numberOfPlays = 0
- }
+ if treeLevel == .level_1{
+ treeApngImage.numberOfPlays = 1
+ }else{
+ treeApngImage.numberOfPlays = 0
+ }
- if aPNGTreeImageView == nil{
- aPNGTreeImageView = APNGImageView(image: treeApngImage)
- aPNGTreeImageView?.tag = 10101
- aPNGTreeImageView!.contentMode = .redraw
- let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction))
- aPNGTreeImageView!.addGestureRecognizer(tap)
- }
+ if self.aPNGTreeImageView == nil{
+ self.aPNGTreeImageView = APNGImageView(image: treeApngImage)
+ self.aPNGTreeImageView?.tag = 10101
+ self.aPNGTreeImageView!.contentMode = .redraw
+ let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction))
+ self.aPNGTreeImageView!.addGestureRecognizer(tap)
+ }
- if view.viewWithTag(10101) == nil{
- view.addSubview(aPNGTreeImageView!)
- }
+ if view.viewWithTag(10101) == nil{
+ view.addSubview(self.aPNGTreeImageView!)
+ }
- let scale:Double = 0.55 //放大倍数
+ let scale:Double = 0.55 //放大倍数
- aPNGTreeImageView!.snp.remakeConstraints { make in
- make.centerX.equalToSuperview().offset(-10)
- make.bottom.equalToSuperview().offset(-220)
- make.width.equalTo(642 * scale)
- make.height.equalTo(731 * scale)
- }
+ self.aPNGTreeImageView!.snp.remakeConstraints { make in
+ make.centerX.equalToSuperview().offset(-10)
+ make.bottom.equalToSuperview().offset(-220)
+ make.width.equalTo(642 * scale)
+ make.height.equalTo(731 * scale)
+ }
- let duration = needAni ? 0.6:0
- UIView.animate(withDuration: duration) {
- self.aPNGTreeImageView?.alpha = 0
+ let duration = needAni ? 0.6:0
+ UIView.animate(withDuration: duration) {
+ self.aPNGTreeImageView?.alpha = 0
- }completion: { state in
- if state{
- self.aPNGTreeImageView!.image = treeApngImage
- UIView.animate(withDuration: 0.5, delay: 0.2) {
- self.aPNGTreeImageView?.alpha = 1
- }completion: { _ in
- self.aPNGTreeImageView!.startAnimating()
+ }completion: { state in
+ if state{
+ self.aPNGTreeImageView!.image = treeApngImage
+ UIView.animate(withDuration: 0.5, delay: 0.2) {
+ self.aPNGTreeImageView?.alpha = 1
+ }completion: { _ in
+ self.aPNGTreeImageView!.startAnimating()
- if self.treeInfoModel?.status == .yes{
- self.aPNGTreeImageView?.stopAnimating()
- self.aPNGTreeImageView?.image = nil
- self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString)
- }else{
- self.aPNGTreeImageView?.staticImage = nil
- self.aPNGTreeImageView?.image = treeApngImage
+ if self.treeInfoModel?.status == .yes{
+ self.aPNGTreeImageView?.stopAnimating()
+ self.aPNGTreeImageView?.image = nil
+ self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString)
+ }else{
+ self.aPNGTreeImageView?.staticImage = nil
+ self.aPNGTreeImageView?.image = treeApngImage
+ }
}
- }
- }
- }
- }
+ }
+ }
+ }
+ }
}
}
@@ -490,3 +497,32 @@
// }
}
}
+
+class SDImageCacheHealper{
+ static func cache(namespace:String,path:String,url:String,clouse:@escaping (Data?)->Void){
+ let image = SDImageCache(namespace: namespace.jq_md5String(), diskCacheDirectory: path)
+ let loader = SDImageLoadersManager.shared
+
+ let manager = SDWebImageManager(cache: image, loader: loader)
+
+ //过滤链接,去除参数,保证缓存的KEY被MD5后不变
+ manager.cacheKeyFilter = SDWebImageCacheKeyFilter(block: { url in
+ let img = url.absoluteString.components(separatedBy: "?").first
+ return img
+ })
+
+ if let localImgData = image.diskImageData(forKey: url){
+ clouse(localImgData)
+ }else{
+ let originUrl = URL(string: url)
+ manager.loadImage(with: originUrl, progress: nil) { imageData, data,error, cacheType, finished, imageUrl in
+ if error != nil{
+ clouse(nil)
+ }
+ if data != nil{
+ clouse(data)
+ }
+ }
+ }
+ }
+}
diff --git a/XQMuse/SceneDelegate.swift b/XQMuse/SceneDelegate.swift
index 0b9d815..2b9e30c 100644
--- a/XQMuse/SceneDelegate.swift
+++ b/XQMuse/SceneDelegate.swift
@@ -63,6 +63,10 @@
}
func needLogin(){
+ if JQ_currentNavigationController() is LoginNav{
+ return
+ }
+
UserViewModel.clearToken()
UserViewModel.clearLoginInfo()
UserViewModel.clearAvatarInfo()
--
Gitblit v1.7.1