Commit 1bfe11f043d72b12d560414067c58497393d8da5

Authored by niudaojian
2 parents 2fc6f675 b617f1f7

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

# Conflicts:
#	metaCode.xcodeproj/project.pbxproj
Showing 67 changed files with 2258 additions and 35 deletions
@@ -28,6 +28,8 @@ target 'metaCode' do @@ -28,6 +28,8 @@ target 'metaCode' do
28 pod 'HandyJSON' 28 pod 'HandyJSON'
29 #轻量级缓存工具 29 #轻量级缓存工具
30 pod 'SwiftyUserDefaults' 30 pod 'SwiftyUserDefaults'
  31 + #图片视频选择器
  32 + pod 'HXPHPicker'
31 #加载GIF 33 #加载GIF
32 pod 'SwiftGifOrigin', '~> 1.7.0' 34 pod 'SwiftGifOrigin', '~> 1.7.0'
33 35
metaCode.xcodeproj/project.pbxproj
@@ -16,16 +16,16 @@ @@ -16,16 +16,16 @@
16 790D019A2A2DCAE400C5978D /* CNLiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */; }; 16 790D019A2A2DCAE400C5978D /* CNLiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */; };
17 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */; }; 17 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */; };
18 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */; }; 18 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */; };
19 - 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A02A2DD69200C5978D /* CNLiveTips.swift */; };  
20 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */; }; 19 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */; };
21 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */; }; 20 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */; };
22 790D01A72A2DF84C00C5978D /* countries.plist in Resources */ = {isa = PBXBuildFile; fileRef = 790D01A62A2DF84C00C5978D /* countries.plist */; }; 21 790D01A72A2DF84C00C5978D /* countries.plist in Resources */ = {isa = PBXBuildFile; fileRef = 790D01A62A2DF84C00C5978D /* countries.plist */; };
23 79282A3C2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */; }; 22 79282A3C2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */; };
24 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */; }; 23 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */; };
25 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */; }; 24 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */; };
26 - 79282A422A2F173300B5F8CF /* CNLiveHotButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */; };  
27 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */; }; 25 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */; };
28 79282A462A2F457D00B5F8CF /* CNLiveMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */; }; 26 79282A462A2F457D00B5F8CF /* CNLiveMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */; };
  27 + 79396EED2A319F220053E1AF /* NSObject+CNLiveCurrentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79396EEC2A319F220053E1AF /* NSObject+CNLiveCurrentVC.swift */; };
  28 + 79396EF12A31C21B0053E1AF /* CNLiveInfoShowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79396EF02A31C21B0053E1AF /* CNLiveInfoShowViewController.swift */; };
29 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; }; 29 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; };
30 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; }; 30 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; };
31 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */; }; 31 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */; };
@@ -34,10 +34,20 @@ @@ -34,10 +34,20 @@
34 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */; }; 34 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */; };
35 798A44F02A305BC200815935 /* UIButton+CNLiveExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */; }; 35 798A44F02A305BC200815935 /* UIButton+CNLiveExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */; };
36 798A44F22A30674200815935 /* CNLiveMineSubBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */; }; 36 798A44F22A30674200815935 /* CNLiveMineSubBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */; };
  37 + 798A44F62A3077ED00815935 /* CNLiveTips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44F42A3077ED00815935 /* CNLiveTips.swift */; };
  38 + 798A44F72A3077ED00815935 /* CNLiveHotButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */; };
  39 + 798A44F92A30835400815935 /* CNLiveHelpFeedBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44F82A30835400815935 /* CNLiveHelpFeedBackViewController.swift */; };
  40 + 798A44FB2A30999900815935 /* CNLiveAlertTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */; };
  41 + 798A44FD2A309EBA00815935 /* CNLiveTypeFeedBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44FC2A309EBA00815935 /* CNLiveTypeFeedBackViewController.swift */; };
  42 + 798A44FF2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44FE2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift */; };
37 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; }; 43 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; };
38 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; }; 44 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; };
39 7C2703302A36CBE30061EC50 /* CNCertificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */; }; 45 7C2703302A36CBE30061EC50 /* CNCertificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */; };
40 7C2703332A36CC660061EC50 /* CNLiveGlobalBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2703322A36CC660061EC50 /* CNLiveGlobalBlock.swift */; }; 46 7C2703332A36CC660061EC50 /* CNLiveGlobalBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2703322A36CC660061EC50 /* CNLiveGlobalBlock.swift */; };
  47 + 79F4B1162A32B96B00993C03 /* CNLiveMineInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79F4B1152A32B96B00993C03 /* CNLiveMineInfoViewController.swift */; };
  48 + 79F4B1182A32C5FA00993C03 /* CNLiveBaseMoel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79F4B1172A32C5FA00993C03 /* CNLiveBaseMoel.swift */; };
  49 + 79F4B11A2A32F21400993C03 /* CNLiveMineNickViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79F4B1192A32F21400993C03 /* CNLiveMineNickViewController.swift */; };
  50 + 79F4B11C2A33036E00993C03 /* CNLiveMineInfoAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79F4B11B2A33036E00993C03 /* CNLiveMineInfoAlertView.swift */; };
41 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */; }; 51 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */; };
42 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */; }; 52 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */; };
43 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */; }; 53 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */; };
@@ -95,16 +105,16 @@ @@ -95,16 +105,16 @@
95 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveViewController.swift; sourceTree = "<group>"; }; 105 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveViewController.swift; sourceTree = "<group>"; };
96 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+CNGradient.swift"; sourceTree = "<group>"; }; 106 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+CNGradient.swift"; sourceTree = "<group>"; };
97 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewModel.swift; sourceTree = "<group>"; }; 107 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewModel.swift; sourceTree = "<group>"; };
98 - 790D01A02A2DD69200C5978D /* CNLiveTips.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTips.swift; sourceTree = "<group>"; };  
99 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigManager.swift; sourceTree = "<group>"; }; 108 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigManager.swift; sourceTree = "<group>"; };
100 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginPickerView.swift; sourceTree = "<group>"; }; 109 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginPickerView.swift; sourceTree = "<group>"; };
101 790D01A62A2DF84C00C5978D /* countries.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = countries.plist; sourceTree = "<group>"; }; 110 790D01A62A2DF84C00C5978D /* countries.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = countries.plist; sourceTree = "<group>"; };
102 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSString+CNLiveExtensions.swift"; sourceTree = "<group>"; }; 111 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSString+CNLiveExtensions.swift"; sourceTree = "<group>"; };
103 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginModel.swift; sourceTree = "<group>"; }; 112 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginModel.swift; sourceTree = "<group>"; };
104 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigUserInfo.swift; sourceTree = "<group>"; }; 113 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigUserInfo.swift; sourceTree = "<group>"; };
105 - 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHotButton.swift; sourceTree = "<group>"; };  
106 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginAuthView.swift; sourceTree = "<group>"; }; 114 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginAuthView.swift; sourceTree = "<group>"; };
107 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineViewController.swift; sourceTree = "<group>"; }; 115 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineViewController.swift; sourceTree = "<group>"; };
  116 + 79396EEC2A319F220053E1AF /* NSObject+CNLiveCurrentVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSObject+CNLiveCurrentVC.swift"; sourceTree = "<group>"; };
  117 + 79396EF02A31C21B0053E1AF /* CNLiveInfoShowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveInfoShowViewController.swift; sourceTree = "<group>"; };
108 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 118 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
109 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; }; 119 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; };
110 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineHeaderView.swift; sourceTree = "<group>"; }; 120 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineHeaderView.swift; sourceTree = "<group>"; };
@@ -113,9 +123,19 @@ @@ -113,9 +123,19 @@
113 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseNavigationController.swift; sourceTree = "<group>"; }; 123 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseNavigationController.swift; sourceTree = "<group>"; };
114 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+CNLiveExtension.swift"; sourceTree = "<group>"; }; 124 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+CNLiveExtension.swift"; sourceTree = "<group>"; };
115 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineSubBodyListView.swift; sourceTree = "<group>"; }; 125 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineSubBodyListView.swift; sourceTree = "<group>"; };
  126 + 798A44F42A3077ED00815935 /* CNLiveTips.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveTips.swift; sourceTree = "<group>"; };
  127 + 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveHotButton.swift; sourceTree = "<group>"; };
  128 + 798A44F82A30835400815935 /* CNLiveHelpFeedBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHelpFeedBackViewController.swift; sourceTree = "<group>"; };
  129 + 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAlertTool.swift; sourceTree = "<group>"; };
  130 + 798A44FC2A309EBA00815935 /* CNLiveTypeFeedBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTypeFeedBackViewController.swift; sourceTree = "<group>"; };
  131 + 798A44FE2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveInputFeedBackViewController.swift; sourceTree = "<group>"; };
116 79A68C512A26F59C00DC3B43 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = metaCode/Info.plist; sourceTree = "<group>"; }; 132 79A68C512A26F59C00DC3B43 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = metaCode/Info.plist; sourceTree = "<group>"; };
117 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNCertificationView.swift; sourceTree = "<group>"; }; 133 7C27032F2A36CBE30061EC50 /* CNCertificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNCertificationView.swift; sourceTree = "<group>"; };
118 7C2703322A36CC660061EC50 /* CNLiveGlobalBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveGlobalBlock.swift; sourceTree = "<group>"; }; 134 7C2703322A36CC660061EC50 /* CNLiveGlobalBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveGlobalBlock.swift; sourceTree = "<group>"; };
  135 + 79F4B1152A32B96B00993C03 /* CNLiveMineInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineInfoViewController.swift; sourceTree = "<group>"; };
  136 + 79F4B1172A32C5FA00993C03 /* CNLiveBaseMoel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseMoel.swift; sourceTree = "<group>"; };
  137 + 79F4B1192A32F21400993C03 /* CNLiveMineNickViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineNickViewController.swift; sourceTree = "<group>"; };
  138 + 79F4B11B2A33036E00993C03 /* CNLiveMineInfoAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineInfoAlertView.swift; sourceTree = "<group>"; };
119 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseTabBarViewController.swift; sourceTree = "<group>"; }; 139 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseTabBarViewController.swift; sourceTree = "<group>"; };
120 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBar+CNBadge.swift"; sourceTree = "<group>"; }; 140 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBar+CNBadge.swift"; sourceTree = "<group>"; };
121 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomePageBackgroupView.swift; sourceTree = "<group>"; }; 141 7C4931302A2F142F000E44B4 /* CNHomePageBackgroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomePageBackgroupView.swift; sourceTree = "<group>"; };
@@ -200,6 +220,7 @@ @@ -200,6 +220,7 @@
200 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */, 220 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */,
201 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */, 221 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */,
202 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */, 222 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */,
  223 + 79396EEC2A319F220053E1AF /* NSObject+CNLiveCurrentVC.swift */,
203 ); 224 );
204 path = Extensions; 225 path = Extensions;
205 sourceTree = "<group>"; 226 sourceTree = "<group>";
@@ -263,6 +284,12 @@ @@ -263,6 +284,12 @@
263 children = ( 284 children = (
264 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */, 285 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */,
265 798A44EB2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift */, 286 798A44EB2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift */,
  287 + 798A44F82A30835400815935 /* CNLiveHelpFeedBackViewController.swift */,
  288 + 798A44FC2A309EBA00815935 /* CNLiveTypeFeedBackViewController.swift */,
  289 + 798A44FE2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift */,
  290 + 79396EF02A31C21B0053E1AF /* CNLiveInfoShowViewController.swift */,
  291 + 79F4B1152A32B96B00993C03 /* CNLiveMineInfoViewController.swift */,
  292 + 79F4B1192A32F21400993C03 /* CNLiveMineNickViewController.swift */,
266 ); 293 );
267 path = Controller; 294 path = Controller;
268 sourceTree = "<group>"; 295 sourceTree = "<group>";
@@ -271,7 +298,7 @@ @@ -271,7 +298,7 @@
271 isa = PBXGroup; 298 isa = PBXGroup;
272 children = ( 299 children = (
273 7C2703312A36CC430061EC50 /* GlobalBlock */, 300 7C2703312A36CC430061EC50 /* GlobalBlock */,
274 - 7C4931322A3076BE000E44B4 /* CustomView */, 301 + 798A44F32A3077ED00815935 /* CustomView */,
275 790D01832A2D89E100C5978D /* Extensions */, 302 790D01832A2D89E100C5978D /* Extensions */,
276 7CD675502A29C036008354C1 /* Constant */, 303 7CD675502A29C036008354C1 /* Constant */,
277 796398912A260C0100D045EB /* Common */, 304 796398912A260C0100D045EB /* Common */,
@@ -362,6 +389,7 @@ @@ -362,6 +389,7 @@
362 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */, 389 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */,
363 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */, 390 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */,
364 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */, 391 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */,
  392 + 79F4B1172A32C5FA00993C03 /* CNLiveBaseMoel.swift */,
365 ); 393 );
366 path = Base; 394 path = Base;
367 sourceTree = "<group>"; 395 sourceTree = "<group>";
@@ -372,6 +400,7 @@ @@ -372,6 +400,7 @@
372 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */, 400 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */,
373 798A44E92A30135D00815935 /* CNLiveMineBodyListView.swift */, 401 798A44E92A30135D00815935 /* CNLiveMineBodyListView.swift */,
374 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */, 402 798A44F12A30674200815935 /* CNLiveMineSubBodyListView.swift */,
  403 + 79F4B11B2A33036E00993C03 /* CNLiveMineInfoAlertView.swift */,
375 ); 404 );
376 path = View; 405 path = View;
377 sourceTree = "<group>"; 406 sourceTree = "<group>";
@@ -391,13 +420,14 @@ @@ -391,13 +420,14 @@
391 path = GlobalBlock; 420 path = GlobalBlock;
392 sourceTree = "<group>"; 421 sourceTree = "<group>";
393 }; 422 };
394 - 7C4931322A3076BE000E44B4 /* CustomView */ = { 423 + 798A44F32A3077ED00815935 /* CustomView */ = {
395 isa = PBXGroup; 424 isa = PBXGroup;
396 children = ( 425 children = (
397 - 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */,  
398 - 790D01A02A2DD69200C5978D /* CNLiveTips.swift */, 426 + 798A44F42A3077ED00815935 /* CNLiveTips.swift */,
  427 + 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */,
  428 + 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */,
399 ); 429 );
400 - name = CustomView; 430 + path = CustomView;
401 sourceTree = "<group>"; 431 sourceTree = "<group>";
402 }; 432 };
403 7CD675212A26F844008354C1 /* HomePage */ = { 433 7CD675212A26F844008354C1 /* HomePage */ = {
@@ -746,8 +776,11 @@ @@ -746,8 +776,11 @@
746 buildActionMask = 2147483647; 776 buildActionMask = 2147483647;
747 files = ( 777 files = (
748 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */, 778 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */,
  779 + 79F4B11C2A33036E00993C03 /* CNLiveMineInfoAlertView.swift in Sources */,
749 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, 780 796398942A260C0100D045EB /* AppDelegate.swift in Sources */,
  781 + 79396EF12A31C21B0053E1AF /* CNLiveInfoShowViewController.swift in Sources */,
750 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */, 782 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */,
  783 + 798A44FB2A30999900815935 /* CNLiveAlertTool.swift in Sources */,
751 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */, 784 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */,
752 79282A3C2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift in Sources */, 785 79282A3C2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift in Sources */,
753 798A44F22A30674200815935 /* CNLiveMineSubBodyListView.swift in Sources */, 786 798A44F22A30674200815935 /* CNLiveMineSubBodyListView.swift in Sources */,
@@ -755,23 +788,29 @@ @@ -755,23 +788,29 @@
755 7CD675482A274167008354C1 /* PGIndexBannerSubiew.m in Sources */, 788 7CD675482A274167008354C1 /* PGIndexBannerSubiew.m in Sources */,
756 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */, 789 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */,
757 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */, 790 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */,
  791 + 798A44F72A3077ED00815935 /* CNLiveHotButton.swift in Sources */,
758 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */, 792 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */,
759 7CD675522A29C04B008354C1 /* CNLiveConstant.swift in Sources */, 793 7CD675522A29C04B008354C1 /* CNLiveConstant.swift in Sources */,
760 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */, 794 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */,
761 7C4931382A307BDB000E44B4 /* CNHomePageGuideView.swift in Sources */, 795 7C4931382A307BDB000E44B4 /* CNHomePageGuideView.swift in Sources */,
762 7CD6753E2A2740B0008354C1 /* CNPayMoneyCodeView.swift in Sources */, 796 7CD6753E2A2740B0008354C1 /* CNPayMoneyCodeView.swift in Sources */,
763 - 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */,  
764 7CD675402A2740B0008354C1 /* CNCollectMoneyCodeView.swift in Sources */, 797 7CD675402A2740B0008354C1 /* CNCollectMoneyCodeView.swift in Sources */,
  798 + 798A44FD2A309EBA00815935 /* CNLiveTypeFeedBackViewController.swift in Sources */,
765 7CD6754F2A2840B9008354C1 /* CNMetaCodeHomePageController.swift in Sources */, 799 7CD6754F2A2840B9008354C1 /* CNMetaCodeHomePageController.swift in Sources */,
766 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */, 800 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */,
  801 + 798A44F62A3077ED00815935 /* CNLiveTips.swift in Sources */,
  802 + 79F4B11A2A32F21400993C03 /* CNLiveMineNickViewController.swift in Sources */,
  803 + 798A44FF2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift in Sources */,
767 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */, 804 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */,
768 7C2703302A36CBE30061EC50 /* CNCertificationView.swift in Sources */, 805 7C2703302A36CBE30061EC50 /* CNCertificationView.swift in Sources */,
769 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */, 806 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */,
770 7C2703332A36CC660061EC50 /* CNLiveGlobalBlock.swift in Sources */, 807 7C2703332A36CC660061EC50 /* CNLiveGlobalBlock.swift in Sources */,
771 798A44EA2A30135D00815935 /* CNLiveMineBodyListView.swift in Sources */, 808 798A44EA2A30135D00815935 /* CNLiveMineBodyListView.swift in Sources */,
  809 + 798A44F92A30835400815935 /* CNLiveHelpFeedBackViewController.swift in Sources */,
772 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */, 810 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */,
773 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */, 811 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */,
774 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */, 812 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */,
  813 + 79396EED2A319F220053E1AF /* NSObject+CNLiveCurrentVC.swift in Sources */,
775 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, 814 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */,
776 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */, 815 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
777 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, 816 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */,
@@ -781,8 +820,9 @@ @@ -781,8 +820,9 @@
781 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */, 820 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */,
782 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, 821 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
783 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */, 822 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */,
  823 + 79F4B1182A32C5FA00993C03 /* CNLiveBaseMoel.swift in Sources */,
  824 + 79F4B1162A32B96B00993C03 /* CNLiveMineInfoViewController.swift in Sources */,
784 7CD6753F2A2740B0008354C1 /* CNTopCollectMoneyRemindView.swift in Sources */, 825 7CD6753F2A2740B0008354C1 /* CNTopCollectMoneyRemindView.swift in Sources */,
785 - 79282A422A2F173300B5F8CF /* CNLiveHotButton.swift in Sources */,  
786 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */, 826 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */,
787 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */, 827 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */,
788 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */, 828 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */,
metaCode/Classes/Common/Base/CNLiveBaseMoel.swift 0 → 100644
  1 +//
  2 +// CNLiveBaseMoel.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/9.
  6 +//
  7 +
  8 +import Foundation
  9 +import HandyJSON
  10 +
  11 +class BaseModel: HandyJSON {
  12 +
  13 + required init() {}
  14 +
  15 + func mapping(mapper: HelpingMapper) {
  16 +
  17 + }
  18 +}
metaCode/Classes/CustomView/CNLiveAlertTool.swift 0 → 100644
  1 +//
  2 +// CNLiveAlertTool.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class AlertTool: NSObject {
  11 +
  12 + /// 快速创建系统AlertController:包括Alert 和 ActionSheet,带颜色
  13 + /// - Parameters:
  14 + /// - title: 标题文字
  15 + /// - message: 消息体文字
  16 + /// - actionTitles: 可选择点击的按钮文字(不包括取消)
  17 + /// - cancelTitle: 取消按钮文字
  18 + /// - style: 类型:Alert 或者 ActionSheet
  19 + /// - actionStyles: 按钮颜色类型(与actionTitles长度一致生效)
  20 + /// - completion: 完成点击按钮之后的回调(取消按钮的index 为 0 ,其他按钮的index从上往下依次为 1、2、3...)
  21 + static func showSystemAlert(title:String?, message:String?, actionTitles:Array<String>, cancelTitle:String="", style:UIAlertController.Style, actionStyles:Array<UIAlertAction.Style>=[], completion: @escaping ((_ index: Int) -> ())) {
  22 +
  23 + let vc = UIApplication.shared.keyWindow?.rootViewController
  24 + vc?.dismiss(animated: false)
  25 +
  26 + DispatchQueue.main.async {
  27 + let alertController = UIAlertController(title: title, message: message, preferredStyle: style)
  28 + for i in 0 ..< actionTitles.count {
  29 + let action = UIAlertAction(title: actionTitles[i], style: actionTitles.count == actionStyles.count ? actionStyles[i]: .default) { action in
  30 + completion(i+1)
  31 + }
  32 + alertController.addAction(action)
  33 + }
  34 + if (!cancelTitle.isEmpty) {
  35 + let cancel = UIAlertAction(title: cancelTitle, style: .cancel) { action in
  36 + completion(0)
  37 + }
  38 + alertController.addAction(cancel)
  39 + }
  40 + vc?.present(alertController, animated: true, completion: nil)
  41 + }
  42 + }
  43 +
  44 + /// 快速创建系统AlertController:包括Alert 和 ActionSheet
  45 + static func showSystemAlert(title:String="", message:String="", actionTitles:Array<String>, cancelTitle:String="", style:UIAlertController.Style, completion: @escaping ((_ index: Int) -> ())) {
  46 + AlertTool.showSystemAlert(title: title, message: message, actionTitles: actionTitles, cancelTitle: cancelTitle, style: style, actionStyles: []) { index in
  47 + completion(index)
  48 + }
  49 + }
  50 +
  51 + /// 快速创建系统Alert弹框(取消按钮的index 为 0 ,确认为1)
  52 + static func systemAlert(title:String="", message:String="", cancelTitle:String="取消", confirmTitle:String="确认", handler: @escaping ((_ index: Int) -> ())) {
  53 + AlertTool.showSystemAlert(title: title, message: message, actionTitles: [confirmTitle], cancelTitle: cancelTitle, style: .alert) { index in
  54 + handler(index)
  55 + }
  56 + }
  57 +
  58 + /// 快速创建系统ActionSheet弹框(取消按钮的index 为 0 ,其他按钮的index从上往下依次为 1、2、3...)
  59 + static func systemActionSheet(title:String?, message:String?, actionTitles:Array<String>, cancelTitle:String="取消", handler: @escaping ((_ index: Int) -> ())) {
  60 + AlertTool.showSystemAlert(title: title, message: message, actionTitles: actionTitles, cancelTitle: cancelTitle, style: .actionSheet) { index in
  61 + handler(index)
  62 + }
  63 + }
  64 +
  65 +}
metaCode/Classes/CNLiveHotButton.swift renamed to metaCode/Classes/CustomView/CNLiveHotButton.swift
metaCode/Classes/CNLiveTips.swift renamed to metaCode/Classes/CustomView/CNLiveTips.swift
metaCode/Classes/Extensions/NSObject+CNLiveCurrentVC.swift 0 → 100644
  1 +//
  2 +// NSObject+CNLiveCurrentVC.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/8.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +func currentViewController() -> (UIViewController?) {
  11 + var window = UIApplication.shared.keyWindow
  12 + if window?.windowLevel != UIWindow.Level.normal{
  13 + let windows = UIApplication.shared.windows
  14 + for windowTemp in windows{
  15 + if windowTemp.windowLevel == UIWindow.Level.normal{
  16 + window = windowTemp
  17 + break
  18 + }
  19 + }
  20 + }
  21 + let vc = window?.rootViewController
  22 + return currentVC(vc)
  23 +}
  24 +
  25 +private func currentVC(_ vc :UIViewController?) -> UIViewController? {
  26 + if vc == nil {
  27 + return nil
  28 + }
  29 + if let presentVC = vc?.presentedViewController {
  30 + return currentVC(presentVC)
  31 + }
  32 + else if let tabVC = vc as? UITabBarController {
  33 + if let selectVC = tabVC.selectedViewController {
  34 + return currentVC(selectVC)
  35 + }
  36 + return nil
  37 + }
  38 + else if let naiVC = vc as? UINavigationController {
  39 + return currentVC(naiVC.visibleViewController)
  40 + }
  41 + else {
  42 + return vc
  43 + }
  44 + }
metaCode/Classes/Main/LoginPage/Controller/CNLiveLoginViewController.swift
@@ -75,7 +75,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { @@ -75,7 +75,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
75 override func viewDidLoad() { 75 override func viewDidLoad() {
76 super.viewDidLoad() 76 super.viewDidLoad()
77 setNeedsStatusBarAppearanceUpdate() 77 setNeedsStatusBarAppearanceUpdate()
78 - 78 + view.backgroundColor = .white
79 //添加主视图 79 //添加主视图
80 self.view.addSubview(self.headerView) 80 self.view.addSubview(self.headerView)
81 self.headerView.snp.makeConstraints { make in 81 self.headerView.snp.makeConstraints { make in
@@ -224,7 +224,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { @@ -224,7 +224,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
224 let i_Range = NSRange(attributedString.string.range(of: "《个人信息保护政策》")!, in: attributedString.string) 224 let i_Range = NSRange(attributedString.string.range(of: "《个人信息保护政策》")!, in: attributedString.string)
225 attributedString.addAttribute(.link, value: "info://", range: i_Range) 225 attributedString.addAttribute(.link, value: "info://", range: i_Range)
226 let textView: UITextView = UITextView.init() 226 let textView: UITextView = UITextView.init()
227 - textView.backgroundColor = .white 227 + textView.backgroundColor = .clear
228 textView.isEditable = false 228 textView.isEditable = false
229 textView.isScrollEnabled = false 229 textView.isScrollEnabled = false
230 textView.delegate = self 230 textView.delegate = self
metaCode/Classes/Main/LoginPage/ViewModel/CNLiveLoginModel.swift
@@ -6,10 +6,10 @@ @@ -6,10 +6,10 @@
6 // 6 //
7 7
8 import Foundation 8 import Foundation
9 -import HandyJSON  
10 import SwiftyUserDefaults 9 import SwiftyUserDefaults
  10 +import HandyJSON
11 11
12 -class CNLiveLoginModel : HandyJSON, DefaultsSerializable, Codable { 12 +class CNLiveLoginModel : BaseModel, DefaultsSerializable, Codable {
13 13
14 14
15 required init() {} 15 required init() {}
@@ -38,5 +38,16 @@ class CNLiveLoginModel : HandyJSON, DefaultsSerializable, Codable { @@ -38,5 +38,16 @@ class CNLiveLoginModel : HandyJSON, DefaultsSerializable, Codable {
38 var uid:String = "" 38 var uid:String = ""
39 var wxUid:String = "" 39 var wxUid:String = ""
40 40
  41 + override func mapping(mapper: HelpingMapper) {
  42 + mapper.specify(property: &gender) { rawString -> String in
  43 + var g = "未知"
  44 + if rawString == "m" {
  45 + g = "男"
  46 + } else {
  47 + g = "女"
  48 + }
  49 + return g
  50 + }
  51 + }
41 52
42 } 53 }
metaCode/Classes/Main/MinePage/Controller/CNLiveHelpFeedBackViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveHelpFeedBackViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class CNLiveHelpFeedBackViewController : CNLiveBaseViewController, UICollectionViewDelegate, UICollectionViewDataSource {
  12 +
  13 + let kCNLiveHelpFeedBackViewCellKey = "kCNLiveHelpFeedBackViewCellKey"
  14 +
  15 + lazy var collectionView: UICollectionView = {
  16 + let layout = UICollectionViewFlowLayout.init()
  17 + layout.itemSize = CGSize(width: (KSreenWidth - 45)/2, height: 60)
  18 + layout.sectionInset = .init(top: 5, left: 15, bottom: 5, right: 15)
  19 + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
  20 + collectionView.delegate = self
  21 + collectionView.dataSource = self
  22 + collectionView.backgroundColor = .clear
  23 + collectionView.register(MineFeedBackListCollectViewCell.self, forCellWithReuseIdentifier: kCNLiveHelpFeedBackViewCellKey)
  24 + return collectionView
  25 + }()
  26 +
  27 + lazy var dataArray: NSMutableArray = {
  28 + let dataArray = NSMutableArray()
  29 + dataArray.add(["image":"mine_add_feed_back_list","name":"反馈"])
  30 + dataArray.add(["image":"mine_add_custom_service_list","name":"客服"])
  31 + return dataArray
  32 + }()
  33 +
  34 + override func viewWillAppear(_ animated: Bool) {
  35 + navigationBarHidden = false
  36 + }
  37 +
  38 + override func viewDidLoad() {
  39 + super.viewDidLoad()
  40 + titleName = "帮助与反馈"
  41 +
  42 + view.addSubview(collectionView)
  43 + collectionView.snp.makeConstraints { make in
  44 + make.top.equalToSuperview().offset(get_system_nav_height())
  45 + make.left.bottom.right.equalToSuperview()
  46 + }
  47 +
  48 + }
  49 +
  50 +}
  51 +
  52 +extension CNLiveHelpFeedBackViewController {
  53 + func numberOfSections(in collectionView: UICollectionView) -> Int {
  54 + return 1
  55 + }
  56 + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  57 + return dataArray.count
  58 + }
  59 + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  60 + let item = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveHelpFeedBackViewCellKey, for: indexPath) as! MineFeedBackListCollectViewCell
  61 + let dict = dataArray[indexPath.row] as! Dictionary<String, Any>
  62 + item.setupWithDataSource(dict: dict)
  63 + return item
  64 + }
  65 + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
  66 + return CGSize.init(width: KSreenWidth, height: 20)
  67 + }
  68 + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  69 + if indexPath.row == 0 {
  70 + self.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .feedback), animated: true)
  71 + }
  72 + if indexPath.row == 1 {
  73 + AlertTool.systemActionSheet(title: nil, message: nil, actionTitles: ["呼叫 010-65832485"]) { index in
  74 + if index == 1 {
  75 + let url: NSURL = NSURL(string: "TEL://010-65832485")!
  76 + UIApplication.shared.open(url as URL)
  77 + }
  78 + }
  79 + }
  80 + }
  81 +
  82 +}
  83 +
metaCode/Classes/Main/MinePage/Controller/CNLiveInfoShowViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveInfoShowViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/8.
  6 +//
  7 +
  8 +import Foundation
  9 +import YYCategories
  10 +
  11 +enum ListShowInfoType {
  12 + case service
  13 + case privacy
  14 +}
  15 +
  16 +class CNLiveInfoShowViewController: CNLiveBaseViewController {
  17 +
  18 + var _show_type:ListShowInfoType!
  19 + init(show_type:ListShowInfoType) {
  20 + super.init(nibName:nil, bundle:nil)
  21 + _show_type = show_type
  22 + }
  23 +
  24 + override func viewWillAppear(_ animated: Bool) {
  25 + navigationBarHidden = false
  26 + }
  27 +
  28 + required init?(coder: NSCoder) {
  29 + fatalError("init(coder:) has not been implemented")
  30 + }
  31 +
  32 + override func viewDidLoad() {
  33 + super.viewDidLoad()
  34 + var attrString = ""
  35 + switch _show_type {
  36 + case .service:
  37 + titleName = "APP用户服务协议"
  38 + attrString = "欢迎您使用元码,我们非常重视您的个人信息保护,并采取了有效措施保障您的信息安全,请您充分了解: \n为保障APP账号安全,元码APP需向您申请获取电话状态权限。 \n请您务必阅读APP《个人信息保护政策》,以充分了解我们如何处理您的个人信息。"
  39 + case .privacy:
  40 + titleName = "个人信息保护政策"
  41 + attrString = "欢迎您使用元码,我们非常重视您的个人信息保护,并采取了有效措施保障您的信息安全,请您充分了解: \n为保障APP账号安全,元码APP需向您申请获取电话状态权限 \n请您务必阅读APP《个人信息保护政策》,以充分了解我们如何处理您的个人信息。"
  42 + case .none:
  43 + break
  44 + }
  45 +
  46 + let paraph = NSMutableParagraphStyle()
  47 + paraph.lineSpacing = 10
  48 + let attributes = [NSAttributedString.Key.font:Font_16_Fit,
  49 + NSAttributedString.Key.paragraphStyle: paraph]
  50 + let h = attrString.boundingRect(with: CGSize(width: KSreenWidth - 40, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: attributes, context: nil).size.height + 40
  51 + let textView = UITextView.init()
  52 + textView.attributedText = NSAttributedString(string: attrString, attributes: attributes)
  53 + textView.textColor = HexColor("#666666")
  54 + textView.layer.cornerRadius = 10
  55 + textView.layer.masksToBounds = true
  56 + textView.textAlignment = .left
  57 + textView.contentMode = .scaleAspectFill
  58 + textView.contentInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
  59 + textView.sizeToFit()
  60 + view.addSubview(textView)
  61 + textView.snp.makeConstraints { make in
  62 + make.centerX.equalToSuperview()
  63 + make.top.equalToSuperview().offset(get_system_nav_height() + 10)
  64 + make.left.equalToSuperview().offset(10)
  65 + make.right.equalToSuperview().offset(-10)
  66 + make.height.equalTo(h)
  67 + }
  68 + }
  69 +
  70 +}
metaCode/Classes/Main/MinePage/Controller/CNLiveInputFeedBackViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveInputFeedBackViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +import HXPHPicker
  10 +
  11 +enum InputFeedBackType {
  12 + case problem
  13 + case product
  14 +}
  15 +
  16 +let textView_placeholder = "请尽可能详细地输入您遇到的问题,包括时间、问题发生的页面、进行什么样的操作、出现的具体问题和细节,以便我们更快地处理您的问题 (至少5个字)"
  17 +class CNLiveInputFeedBackViewController: CNLiveBaseViewController, UITextViewDelegate {
  18 +
  19 + var _show_type:InputFeedBackType!
  20 + init(show_type:InputFeedBackType) {
  21 + super.init(nibName:nil, bundle:nil)
  22 + _show_type = show_type
  23 + }
  24 +
  25 + lazy var iView: UIView = {
  26 + let iView = UIView.init()
  27 + iView.backgroundColor = .white
  28 + iView.layer.cornerRadius = 10
  29 + iView.layer.masksToBounds = true
  30 + return iView
  31 + }()
  32 +
  33 + lazy var p_textView : UITextView = {
  34 + let p_textView = UITextView.init()
  35 + p_textView.backgroundColor = .white
  36 + p_textView.font = BoldFont_16
  37 + p_textView.text = textView_placeholder
  38 + p_textView.textColor = HexColor("#C8C8C8")
  39 + p_textView.delegate = self
  40 + return p_textView
  41 + }()
  42 +
  43 + lazy var numberLabel : UILabel = {
  44 + let numberLabel = UILabel.init()
  45 + numberLabel.text = "0/200"
  46 + numberLabel.textColor = .black
  47 + numberLabel.font = Font_14
  48 + numberLabel.textAlignment = .right
  49 + return numberLabel
  50 + }()
  51 +
  52 + lazy var photoLabel : UILabel = {
  53 + let photoLabel = UILabel.init()
  54 + let mString = NSMutableAttributedString(string: "上传截图 (选填 0/3)")
  55 + mString.addAttributes([.foregroundColor: UIColor.black,.font: BoldFont_18], range: NSRange(location: 0, length: 4))
  56 + mString.addAttributes([.foregroundColor: HexColor("#B4B4B4")!,.font: Font_14], range: NSRange(location: 4, length: 9))
  57 + photoLabel.attributedText = mString
  58 + return photoLabel
  59 + }()
  60 +
  61 + lazy var photoView: MinePhotoUploadView = {
  62 + let pView = MinePhotoUploadView.init(frame: .zero)
  63 + pView.backgroundColor = .clear
  64 + return pView
  65 + }()
  66 +
  67 + lazy var mobileLabel : UILabel = {
  68 + let mobileLabel = UILabel.init()
  69 + let mString = NSMutableAttributedString(string: "联系电话 (选填)")
  70 + mString.addAttributes([.foregroundColor: UIColor.black,.font: BoldFont_18], range: NSRange(location: 0, length: 4))
  71 + mString.addAttributes([.foregroundColor: HexColor("#B4B4B4")!,.font: Font_14], range: NSRange(location: 4, length: 5))
  72 + mobileLabel.attributedText = mString
  73 + return mobileLabel
  74 + }()
  75 +
  76 + lazy var mobileView: UIView = {
  77 + let mobileView = UIView.init()
  78 + mobileView.backgroundColor = .white
  79 + mobileView.layer.cornerRadius = 10
  80 + mobileView.layer.masksToBounds = true
  81 + return mobileView
  82 + }()
  83 +
  84 + lazy var mobileField: UITextField = {
  85 + let mobileField = UITextField.init()
  86 + mobileField.backgroundColor = .white
  87 + mobileField.placeholder = "便于我们与您联系"
  88 + mobileField.font = BoldFont_16_Fit
  89 + mobileField.keyboardType = .numberPad
  90 + mobileField.clearButtonMode = .whileEditing
  91 + mobileField.layer.cornerRadius = 10
  92 + mobileField.layer.masksToBounds = true
  93 + return mobileField
  94 + }()
  95 +
  96 + lazy var sendButton: UIButton = {
  97 + let sendButton = UIButton(type: .custom)
  98 + sendButton.setTitle("提 交", for: .normal)
  99 + sendButton.setTitleColor(.white, for: .normal)
  100 + sendButton.titleLabel?.font = BoldFont_16_Fit
  101 + sendButton.layer.cornerRadius = 20
  102 + sendButton.layer.masksToBounds = true
  103 + sendButton.addTarget(self, action: #selector(sendInfoActionMothod), for: .touchUpInside)
  104 + return sendButton
  105 + }()
  106 +
  107 + required init?(coder aDecoder:NSCoder) {
  108 + fatalError("init(coder:) has not been implemented")
  109 + }
  110 +
  111 + override func viewWillAppear(_ animated: Bool) {
  112 + navigationBarHidden = false
  113 + }
  114 +
  115 + override func viewDidLoad() {
  116 + super.viewDidLoad()
  117 + switch _show_type {
  118 + case .problem:
  119 + titleName = "问题反馈"
  120 + case .product:
  121 + titleName = "产品建议"
  122 + case .none:
  123 + break
  124 + }
  125 +
  126 + view.addSubview(iView)
  127 + iView.snp.makeConstraints { make in
  128 + make.centerX.equalToSuperview()
  129 + make.top.equalToSuperview().offset(get_system_nav_height()+10)
  130 + make.left.equalToSuperview().offset(10)
  131 + make.right.equalToSuperview().offset(-10)
  132 + make.height.equalTo(200)
  133 + }
  134 +
  135 + iView.addSubview(p_textView)
  136 + p_textView.snp.makeConstraints { make in
  137 + make.top.left.equalToSuperview().offset(10)
  138 + make.right.equalToSuperview().offset(-10)
  139 + make.bottom.equalToSuperview().offset(-30)
  140 + }
  141 +
  142 + iView.addSubview(numberLabel)
  143 + numberLabel.snp.makeConstraints { make in
  144 + make.left.bottom.equalToSuperview()
  145 + make.right.equalToSuperview().offset(-20)
  146 + make.height.equalTo(30)
  147 + }
  148 +
  149 + view.addSubview(photoLabel)
  150 + photoLabel.snp.makeConstraints { make in
  151 + make.top.equalTo(iView.snp.bottom).offset(15)
  152 + make.left.equalToSuperview().offset(10)
  153 + }
  154 +
  155 + view.addSubview(photoView)
  156 + photoView.snp.makeConstraints { make in
  157 + make.left.right.equalToSuperview()
  158 + make.top.equalTo(photoLabel.snp.bottom).offset(10)
  159 + make.height.equalTo((KSreenWidth - 40)/3)
  160 + }
  161 +
  162 + view.addSubview(mobileLabel)
  163 + mobileLabel.snp.makeConstraints { make in
  164 + make.top.equalTo(photoView.snp.bottom).offset(15)
  165 + make.left.equalToSuperview().offset(10)
  166 + }
  167 +
  168 + view.addSubview(mobileView)
  169 + mobileView.snp.makeConstraints { make in
  170 + make.left.equalToSuperview().offset(10)
  171 + make.right.equalToSuperview().offset(-10)
  172 + make.top.equalTo(mobileLabel.snp.bottom).offset(10)
  173 + make.height.equalTo(50)
  174 + }
  175 +
  176 + mobileView.addSubview(mobileField)
  177 + mobileField.snp.makeConstraints { make in
  178 + make.top.bottom.equalToSuperview()
  179 + make.left.equalToSuperview().offset(10)
  180 + make.right.equalToSuperview().offset(-10)
  181 + }
  182 +
  183 + view.addSubview(sendButton)
  184 + sendButton.snp.makeConstraints { make in
  185 + make.bottom.equalToSuperview().offset(-get_system_tabbar_ui_offsetHeight() - 20)
  186 + make.left.equalToSuperview().offset(10)
  187 + make.right.equalToSuperview().offset(-10)
  188 + make.height.equalTo(40)
  189 + }
  190 + setupWithSendBtnStatue(statue: false)
  191 +
  192 + }
  193 +
  194 +
  195 + private func setupWithSendBtnStatue(statue: Bool) {
  196 + var alpha = 0.3
  197 + if statue {
  198 + alpha = 1
  199 + }
  200 + sendButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: alpha),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: alpha)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
  201 + sendButton.isUserInteractionEnabled = statue
  202 + }
  203 +
  204 + @objc func sendInfoActionMothod() {
  205 + let array = photoView.selectedImages
  206 + array.remove("")
  207 + print("获取的图片:\(array) 内容:\(p_textView.text ?? "") 手机号:\(mobileField.text ?? "")")
  208 + }
  209 +}
  210 +
  211 +extension CNLiveInputFeedBackViewController {
  212 + func textViewDidEndEditing(_ textView: UITextView) {
  213 + if textView.text.lengthOfBytes(using: .utf8) < 1 {
  214 + textView.text = textView_placeholder
  215 + textView.textColor = HexColor("#C8C8C8")
  216 + setupWithSendBtnStatue(statue: false)
  217 + }
  218 + }
  219 + func textViewDidBeginEditing(_ textView: UITextView) {
  220 + if textView.text == textView_placeholder {
  221 + textView.text = ""
  222 + textView.textColor = .black
  223 + setupWithSendBtnStatue(statue: true)
  224 + }
  225 + }
  226 + func textViewDidChange(_ textView: UITextView) {
  227 + if textView.text.count > 200 {
  228 + let selectRang = textView.markedTextRange
  229 +
  230 + if let selectRang = selectRang {
  231 + let position = textView.position(from: (selectRang.start), offset: 0)
  232 + if position != nil {
  233 + return
  234 + }
  235 + }
  236 +
  237 + let textContent = textView.text ?? ""
  238 + let textNum = textContent.count
  239 +
  240 + if textNum > 200 {
  241 + textView.text = string_prefix(index: 200, text: textContent)
  242 + }
  243 + }
  244 + numberLabel.text = "\(textView.text.count)/200"
  245 + }
  246 + func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
  247 + if textView.returnKeyType == .done {
  248 + if text == "\n" {
  249 + textView.resignFirstResponder()
  250 + }
  251 + return true
  252 + }
  253 + return true
  254 + }
  255 +
  256 + private func string_prefix(index: Int, text: String) -> String {
  257 + if text.count <= index {
  258 + return text
  259 + } else {
  260 + let index = text.index(text.startIndex, offsetBy: index)
  261 + let str = text.prefix(upTo: index)
  262 + return String(str)
  263 + }
  264 + }
  265 +}
metaCode/Classes/Main/MinePage/Controller/CNLiveMineAddInfoViewController.swift
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 7
8 import Foundation 8 import Foundation
9 9
10 -class CNLiveMineAddInfoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource { 10 +class CNLiveMineAddInfoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, UITableViewDragDelegate, UITableViewDropDelegate {
11 11
12 let kCNLiveMineInfoLListTableViewIdentifier = "kCNLiveMineInfoLListTableViewIdentifier" 12 let kCNLiveMineInfoLListTableViewIdentifier = "kCNLiveMineInfoLListTableViewIdentifier"
13 13
@@ -15,27 +15,45 @@ class CNLiveMineAddInfoViewController : CNLiveBaseViewController, UITableViewDel @@ -15,27 +15,45 @@ class CNLiveMineAddInfoViewController : CNLiveBaseViewController, UITableViewDel
15 let tableView = UITableView(frame: .zero, style: .plain) 15 let tableView = UITableView(frame: .zero, style: .plain)
16 tableView.delegate = self 16 tableView.delegate = self
17 tableView.dataSource = self 17 tableView.dataSource = self
  18 + tableView.dragDelegate = self
  19 + tableView.dropDelegate = self
18 tableView.backgroundColor = HexColor("#F7F8FA") 20 tableView.backgroundColor = HexColor("#F7F8FA")
19 tableView.tableFooterView = UIView.init() 21 tableView.tableFooterView = UIView.init()
20 tableView.rowHeight = 100 22 tableView.rowHeight = 100
  23 + tableView.dragInteractionEnabled = true
  24 + tableView.contentInsetAdjustmentBehavior = .scrollableAxes
21 tableView.separatorStyle = .none 25 tableView.separatorStyle = .none
22 tableView.register(MineInfoLListTableViewCell.self, forCellReuseIdentifier: kCNLiveMineInfoLListTableViewIdentifier) 26 tableView.register(MineInfoLListTableViewCell.self, forCellReuseIdentifier: kCNLiveMineInfoLListTableViewIdentifier)
23 return tableView 27 return tableView
24 }() 28 }()
25 29
  30 + lazy var dataArray: NSMutableArray = {
  31 + let dataArray = NSMutableArray()
  32 + dataArray.add(["image":"mine_header_icon_defult_ava","name":"志愿者身份"])
  33 + dataArray.add(["image":"mine_header_icon_defult_ava","name":"退伍军人身份"])
  34 + return dataArray
  35 + }()
  36 +
26 override func viewWillAppear(_ animated: Bool) { 37 override func viewWillAppear(_ animated: Bool) {
27 - self.navigationBarHidden = false 38 + navigationBarHidden = false
28 } 39 }
29 40
30 override func viewDidLoad() { 41 override func viewDidLoad() {
31 super.viewDidLoad() 42 super.viewDidLoad()
32 - self.titleName = "添加身份" 43 + titleName = "添加身份"
33 view.addSubview(tableView) 44 view.addSubview(tableView)
34 tableView.snp.makeConstraints { make in 45 tableView.snp.makeConstraints { make in
35 make.top.equalTo(get_system_nav_height()) 46 make.top.equalTo(get_system_nav_height())
36 make.left.right.bottom.equalToSuperview() 47 make.left.right.bottom.equalToSuperview()
37 } 48 }
38 } 49 }
  50 +
  51 + private func dragCell(cell:UITableViewCell?) {
  52 + if #available(iOS 11.0, *) {
  53 + /// 当cell在拖拽过程中是否允许交互
  54 + cell?.userInteractionEnabledWhileDragging = false
  55 + } else {}
  56 + }
39 } 57 }
40 58
41 extension CNLiveMineAddInfoViewController { 59 extension CNLiveMineAddInfoViewController {
@@ -44,14 +62,45 @@ extension CNLiveMineAddInfoViewController { @@ -44,14 +62,45 @@ extension CNLiveMineAddInfoViewController {
44 return 1 62 return 1
45 } 63 }
46 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 64 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
47 - return 2 65 + return dataArray.count
48 } 66 }
49 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 67 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
50 - let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineInfoLListTableViewIdentifier) as! MineInfoLListTableViewCell  
51 - cell.setupWithDataSource(icon: "mine_header_icon_defult_ava", name: "志愿者身份") 68 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineInfoLListTableViewIdentifier) as? MineInfoLListTableViewCell else{
  69 + return MineInfoLListTableViewCell()
  70 + }
  71 + let dict = dataArray[indexPath.row] as! Dictionary<String, Any>
  72 + cell.setupWithDataSource(icon: dict["image"] as! String, name: dict["name"] as! String)
  73 + dragCell(cell: cell)
52 return cell 74 return cell
53 } 75 }
54 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 76 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
55 return 100 77 return 100
56 } 78 }
  79 + func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
  80 + let item = UIDragItem(itemProvider: NSItemProvider(object: UIImage()))
  81 + return [item]
  82 + }
  83 + // MARK: UITableViewDropDelegate
  84 + func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {}
  85 + func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal {
  86 + return UITableViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath)
  87 + }
  88 + func tableView(_ tableView: UITableView, canHandle session: UIDropSession) -> Bool {
  89 + // Only receive image data
  90 + return session.canLoadObjects(ofClass: UIImage.self)
  91 + }
  92 + //移动cell事件
  93 + func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath,
  94 + to destinationIndexPath: IndexPath) {
  95 + objc_sync_enter(self)
  96 +// let dict: Dictionary = dataArray[sourceIndexPath.row] as! Dictionary<String, Any>
  97 +// dataArray.remove(sourceIndexPath.row)
  98 +// if destinationIndexPath.row > dataArray.count {
  99 +// dataArray.append(dict)
  100 +// } else {
  101 +// dataArray.insert(dict, at: destinationIndexPath.row)
  102 +// }
  103 + objc_sync_exit(self)
  104 +// tableView.reloadData()
  105 + }
57 } 106 }
metaCode/Classes/Main/MinePage/Controller/CNLiveMineInfoViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveMineInfoViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/9.
  6 +//
  7 +
  8 +import Foundation
  9 +import HXPHPicker
  10 +import Kingfisher
  11 +
  12 +typealias ClickInfoResultBlock = (_ image: UIImage) -> Void
  13 +class CNLiveMineInfoViewController: CNLiveBaseViewController, PhotoPickerControllerDelegate {
  14 +
  15 + lazy var imageView: UIImageView = {
  16 + let imageView = UIImageView.init()
  17 + imageView.backgroundColor = .clear
  18 + imageView.contentMode = .scaleToFill
  19 + imageView.image = UIImage(named: "mine_header_icon_defult_ava")
  20 + imageView.image = _image
  21 + return imageView
  22 + }()
  23 +
  24 + lazy var changeBtn: UIButton = {
  25 + let changeBtn = UIButton.init(type: .custom)
  26 + changeBtn.setTitle("更换头像", for: .normal)
  27 + changeBtn.setTitleColor(.white, for: .normal)
  28 + changeBtn.titleLabel?.font = BoldFont_19_Fit
  29 + changeBtn.layer.cornerRadius = 20
  30 + changeBtn.layer.masksToBounds = true
  31 + changeBtn.addTarget(self, action: #selector(changeAvatarAction), for: .touchUpInside)
  32 + return changeBtn
  33 + }()
  34 +
  35 + lazy var sendBtn: UIButton = {
  36 + let sendBtn = UIButton.init(type: .custom)
  37 + sendBtn.setTitle("确认", for: .normal)
  38 + sendBtn.setTitleColor(.white, for: .normal)
  39 + sendBtn.titleLabel?.font = BoldFont_19_Fit
  40 + sendBtn.layer.cornerRadius = 20
  41 + sendBtn.layer.masksToBounds = true
  42 + sendBtn.isHidden = true
  43 + sendBtn.addTarget(self, action: #selector(changeSendAction), for: .touchUpInside)
  44 + return sendBtn
  45 + }()
  46 +
  47 + lazy var cancelBtn: UIButton = {
  48 + let cancelBtn = UIButton.init(type: .custom)
  49 + cancelBtn.setTitle("取消", for: .normal)
  50 + cancelBtn.setTitleColor(.black, for: .normal)
  51 + cancelBtn.backgroundColor = .white
  52 + cancelBtn.layer.cornerRadius = 20
  53 + cancelBtn.layer.masksToBounds = true
  54 + cancelBtn.isHidden = true
  55 + cancelBtn.addTarget(self, action: #selector(changeCancelAction), for: .touchUpInside)
  56 + return cancelBtn
  57 + }()
  58 +
  59 + var _select_image: UIImage!
  60 + var _image:UIImage!
  61 + var reslut: ClickInfoResultBlock
  62 + init(image:UIImage, result: @escaping ClickInfoResultBlock) {
  63 + self.reslut = result
  64 + super.init(nibName:nil, bundle:nil)
  65 + _image = image
  66 + }
  67 +
  68 + required init?(coder: NSCoder) {
  69 + fatalError("init(coder:) has not been implemented")
  70 + }
  71 +
  72 + override func viewDidLoad() {
  73 + super.viewDidLoad()
  74 + view.backgroundColor = .black
  75 + setNeedsStatusBarAppearanceUpdate()
  76 +
  77 + view.addSubview(imageView)
  78 + imageView.snp.makeConstraints { make in
  79 + make.center.equalToSuperview()
  80 + make.left.right.equalToSuperview()
  81 + make.height.equalTo(KSreenWidth)
  82 + }
  83 +
  84 + view.addSubview(changeBtn)
  85 + changeBtn.snp.makeConstraints { make in
  86 + make.centerX.equalToSuperview()
  87 + make.bottom.equalToSuperview().offset(-get_system_tabbar_ui_offsetHeight()-20)
  88 + make.width.equalTo(200)
  89 + make.height.equalTo(40)
  90 + }
  91 + changeBtn.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
  92 +
  93 + view.addSubview(cancelBtn)
  94 + cancelBtn.snp.makeConstraints { make in
  95 + make.bottom.equalToSuperview().offset(-get_system_tabbar_ui_offsetHeight()-20)
  96 + make.left.equalToSuperview().offset(20)
  97 + make.height.equalTo(40)
  98 + make.width.equalTo((KSreenWidth - 60) * 0.35)
  99 + }
  100 +
  101 + view.addSubview(sendBtn)
  102 + sendBtn.snp.makeConstraints { make in
  103 + make.centerY.equalTo(cancelBtn)
  104 + make.left.equalTo(cancelBtn.snp.right).offset(20)
  105 + make.height.equalTo(40)
  106 + make.width.equalTo((KSreenWidth - 60)*0.65)
  107 + }
  108 + sendBtn.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
  109 + }
  110 +
  111 + override var preferredStatusBarStyle: UIStatusBarStyle {
  112 + return .lightContent
  113 + }
  114 +
  115 + @objc func changeCancelAction() {
  116 + self.navigationController?.popViewController(animated: true)
  117 + }
  118 +
  119 + @objc func changeSendAction() {
  120 + self.reslut(_select_image)
  121 + self.navigationController?.popViewController(animated: true)
  122 + }
  123 +
  124 + @objc func changeAvatarAction() {
  125 + var crop = PhotoCroppingConfiguration.init()
  126 + crop.isRoundCrop = true
  127 + let configuration = PhotoEditorConfiguration()
  128 + configuration.state = .cropping
  129 + configuration.cropping = crop
  130 + configuration.fixedCropState = true
  131 + let config = PhotoTools.getWXPickerConfig()
  132 + config.selectMode = .single
  133 + config.selectOptions = .photo
  134 + config.photoEditor = configuration
  135 + config.maximumSelectedPhotoCount = 1
  136 + let pickerController = PhotoPickerController(picker: config)
  137 + pickerController.pickerDelegate = self
  138 + pickerController.isOriginal = false
  139 + self.navigationController?.present(pickerController, animated: true, completion: nil)
  140 + }
  141 +}
  142 +
  143 +extension CNLiveMineInfoViewController {
  144 +
  145 + func pickerController(_ pickerController: PhotoPickerController,
  146 + didFinishSelection result: PickerResult) {
  147 + result.getImage { [self] (image, photoAsset, index) in
  148 + if let image = image {
  149 + _select_image = image
  150 + }else {
  151 + print("failed")
  152 + }
  153 + } completionHandler: { [self] (images) in
  154 + imageView.image = images.first
  155 + cancelBtn.isHidden = false
  156 + sendBtn.isHidden = false
  157 + changeBtn.isHidden = true
  158 + }
  159 + }
  160 +}
metaCode/Classes/Main/MinePage/Controller/CNLiveMineNickViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveMineNickViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/9.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveMineNickViewController: CNLiveBaseViewController, UITextFieldDelegate {
  11 +
  12 +
  13 + lazy var saveButton: UIButton = {
  14 + let saveButton = UIButton.init(type: .custom)
  15 + saveButton.frame = CGRect(x: KSreenWidth - 70, y: (get_system_nav_height() - (get_system_statusBar_height() + 25))/2 + get_system_statusBar_height(), width: 60, height: 25)
  16 + saveButton.setTitle("保存", for: .normal)
  17 + saveButton.titleLabel?.font = Font_15
  18 + saveButton.setTitleColor(.white, for: .normal)
  19 + saveButton.backgroundColor = HexColor("#EBEBEB")
  20 + saveButton.layer.masksToBounds = true
  21 + saveButton.layer.cornerRadius = 5
  22 + saveButton.addTarget(self, action: #selector(clickSaveAction), for: .touchUpInside)
  23 + return saveButton
  24 + }()
  25 +
  26 + lazy var mainView: UIView = {
  27 + let mainView = UIView.init()
  28 + mainView.backgroundColor = .white
  29 + mainView.layer.cornerRadius = 8
  30 + mainView.layer.masksToBounds = true
  31 + return mainView
  32 + }()
  33 +
  34 + lazy var nickField: UITextField = {
  35 + let nickFielld = UITextField.init()
  36 + nickFielld.backgroundColor = .white
  37 + nickFielld.placeholder = "输入昵称"
  38 + nickFielld.font = BoldFont_16_Fit
  39 + nickFielld.delegate = self
  40 + nickFielld.text = UserInfoManager.shared.userInfo.nickName
  41 + nickFielld.keyboardType = .default
  42 + nickFielld.clearButtonMode = .whileEditing
  43 + return nickFielld
  44 + }()
  45 +
  46 + override func viewDidLoad() {
  47 + super.viewDidLoad()
  48 + titleName = "更改昵称"
  49 + navigationBarHidden = false
  50 + topNavView.addSubview(saveButton)
  51 +
  52 + view.addSubview(mainView)
  53 + mainView.snp.makeConstraints { make in
  54 + make.centerX.equalToSuperview()
  55 + make.left.equalToSuperview().offset(10)
  56 + make.top.equalToSuperview().offset(get_system_nav_height()+10)
  57 + make.right.equalToSuperview().offset(-10)
  58 + make.height.equalTo(50)
  59 + }
  60 +
  61 + mainView.addSubview(nickField)
  62 + nickField.snp.makeConstraints { make in
  63 + make.centerX.equalTo(mainView)
  64 + make.top.equalToSuperview().offset(5)
  65 + make.left.equalToSuperview().offset(10)
  66 + make.right.equalToSuperview().offset(-10)
  67 + make.bottom.equalToSuperview().offset(-5)
  68 + }
  69 + setupWithSendBtnStatue(statue: true)
  70 + }
  71 +
  72 +
  73 + private func setupWithSendBtnStatue(statue: Bool) {
  74 + if statue {
  75 + saveButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
  76 + } else {
  77 + saveButton.setGradient(colors: [UIColor(red: 235/255.0, green: 235/255.0, blue: 235/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 1), endPoint: CGPoint(x: 1, y: 0))
  78 + }
  79 + var color: UIColor = UIColor.white
  80 + if !statue {
  81 + color = HexColor("#999999")!
  82 + }
  83 + saveButton.isUserInteractionEnabled = statue
  84 + saveButton.setTitleColor(color, for: .normal)
  85 + }
  86 +
  87 +
  88 + @objc func clickSaveAction() {
  89 + print("保存")
  90 + }
  91 +
  92 + func textFieldDidBeginEditing(_ textField: UITextField) {
  93 + if textField == nickField {
  94 + mainView.layer.borderColor = HexColor("#0066FE")?.cgColor
  95 + mainView.layer.borderWidth = 1
  96 + setupWithSendBtnStatue(statue: true)
  97 + }
  98 + }
  99 +
  100 + func textFieldDidEndEditing(_ textField: UITextField) {
  101 + if textField == nickField && textField.text?.count == 0 {
  102 + mainView.layer.borderColor = UIColor.white.cgColor
  103 + mainView.layer.borderWidth = 1
  104 + setupWithSendBtnStatue(statue: false)
  105 + }
  106 + }
  107 +
  108 + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  109 +
  110 + if textField.returnKeyType == .done {
  111 +
  112 + if string == "\n" {
  113 +
  114 + textField.resignFirstResponder()
  115 + }
  116 + return true
  117 + }
  118 + return true
  119 + }
  120 +}
  121 +
  122 +
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift
@@ -89,7 +89,7 @@ extension CNLiveMineViewController { @@ -89,7 +89,7 @@ extension CNLiveMineViewController {
89 let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineTwoViewCellIdentifier) as! MineBodyTwoListViewCell 89 let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineTwoViewCellIdentifier) as! MineBodyTwoListViewCell
90 let array = dataArray[indexPath.section] 90 let array = dataArray[indexPath.section]
91 let sub_dict = (array as! Array<Any>)[indexPath.row] 91 let sub_dict = (array as! Array<Any>)[indexPath.row]
92 - cell.setupWithDataSource(dict: sub_dict as! Dictionary<String, Any>) 92 + cell.setupWithDataSource(show_type: .feedback,dict: sub_dict as! Dictionary<String, Any>)
93 return cell 93 return cell
94 94
95 } 95 }
@@ -103,9 +103,13 @@ extension CNLiveMineViewController { @@ -103,9 +103,13 @@ extension CNLiveMineViewController {
103 103
104 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 104 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
105 if indexPath.section == 1 { 105 if indexPath.section == 1 {
106 - let infoVC = CNLiveMineAddInfoViewController.init()  
107 - infoVC.hidesBottomBarWhenPushed = true;  
108 - self.navigationController?.pushViewController(infoVC, animated: true) 106 + self.navigationController?.pushViewController(CNLiveMineAddInfoViewController.init(), animated: true)
  107 + }
  108 + if indexPath.section == 2 && indexPath.row == 0 {
  109 + self.navigationController?.pushViewController(CNLiveHelpFeedBackViewController.init(), animated: true)
  110 + }
  111 + if indexPath.section == 2 && indexPath.row == 1 {
  112 + self.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .setting), animated: true)
109 } 113 }
110 } 114 }
111 115
metaCode/Classes/Main/MinePage/Controller/CNLiveTypeFeedBackViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveTypeFeedBackViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +enum ListShowType {
  12 + case feedback
  13 + case setting
  14 + case privacy
  15 + case manager
  16 + case about
  17 + case info
  18 +}
  19 +
  20 +class CNLiveTypeFeedBackViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource{
  21 +
  22 + let kCNLiveMineOneFeedBackViewCellIdentifier = "kCNLiveMineOneFeedBackViewCellIdentifier"
  23 + lazy var tableView : UITableView = {
  24 + let tableView = UITableView(frame: .zero, style: .grouped)
  25 + tableView.dataSource = self
  26 + tableView.delegate = self
  27 + tableView.backgroundColor = .clear
  28 + tableView.tableFooterView = UIView.init()
  29 + tableView.tableHeaderView = UIView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 1))
  30 + tableView.separatorStyle = .none
  31 + tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
  32 + tableView.register(MineBodyTwoListViewCell.self, forCellReuseIdentifier: kCNLiveMineOneFeedBackViewCellIdentifier)
  33 + return tableView
  34 + }()
  35 +
  36 + lazy var dataArray: NSMutableArray = {
  37 + let dataArray = NSMutableArray()
  38 + if _show_type == .feedback {
  39 + dataArray.add(["icon":"mine_list_sub_set_feedback","name":"问题反馈"])
  40 + dataArray.add(["icon":"mine_list_sub_set_sugges","name":"产品建议"])
  41 + }
  42 + if _show_type == .setting {
  43 + dataArray.add(["icon":"mine_list_sub_set_privacy","name":"隐私"])
  44 + dataArray.add(["icon":"mine_list_sub_set_about","name":"关于我们"])
  45 + }
  46 + if _show_type == .privacy {
  47 + dataArray.add(["icon":"","name":"系统权限管理"])
  48 + dataArray.add(["icon":"","name":"个人信息保护政策"])
  49 + }
  50 + if _show_type == .manager {
  51 + dataArray.add(["icon":"mine_list_sub_set_poistion","name":"位置","desc":"用于判断一些内容"])
  52 + dataArray.add(["icon":"mine_list_sub_set_poistion","name":"位置","desc":"用于判断一些内容"])
  53 + }
  54 + if _show_type == .about {
  55 + dataArray.add(["icon":"","name":"版本更新","more":"当前已经是最新版本"])
  56 + dataArray.add(["icon":"","name":"APP用户服务协议","more":""])
  57 + }
  58 + if _show_type == .info {
  59 + dataArray.add(["icon":"","name":"头像","more":"","avatar":UserInfoManager.shared.userInfo.bigFaceUrl])
  60 + dataArray.add(["icon":"","name":"昵称","more":(UserInfoManager.shared.userInfo.nickName.count > 0 ? UserInfoManager.shared.userInfo.nickName : "请输入昵称"),"avatar":""])
  61 + dataArray.add(["icon":"","name":"性别","more":UserInfoManager.shared.userInfo.gender,"avatar":""])
  62 + dataArray.add(["icon":"","name":"生日","more":UserInfoManager.shared.userInfo.birthday,"avatar":""])
  63 + }
  64 + return dataArray
  65 + }()
  66 +
  67 + lazy var logoutButton: UIButton = {
  68 + let logoutButton = UIButton.init(type: .custom)
  69 + logoutButton.setTitle("退出登录", for: .normal)
  70 + logoutButton.backgroundColor = .white
  71 + logoutButton.setTitleColor(HexColor("#609BFF"), for: .normal)
  72 + logoutButton.layer.cornerRadius = 10
  73 + logoutButton.layer.masksToBounds = true
  74 + logoutButton.addTarget(self, action: #selector(logoutAction), for: .touchUpInside)
  75 + return logoutButton
  76 + }()
  77 +
  78 + lazy var headerView: MineAboutHeaderView = {
  79 + let headerView = MineAboutHeaderView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 200))
  80 + headerView.backgroundColor = .clear
  81 + return headerView
  82 + }()
  83 +
  84 + lazy var tipView: UIView = {
  85 + let tipView = UIView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 90))
  86 + tipView.backgroundColor = .clear
  87 + return tipView
  88 + }()
  89 +
  90 + lazy var tipSubView: UIView = {
  91 + let tipView = UIView.init(frame: CGRect(x: 10, y: 10, width: KSreenWidth-20, height: 70))
  92 + tipView.backgroundColor = HexColor("#EFF5FF")
  93 + tipView.layer.cornerRadius = 10
  94 + tipView.layer.masksToBounds = true
  95 + return tipView
  96 + }()
  97 +
  98 + lazy var tipLabel: UILabel = {
  99 + let tipLabel = UILabel.init(frame: CGRect(x: 10, y: 5, width: KSreenWidth - 40, height: 60))
  100 + let attrString = "为保障您正常使用元码APP部分功能,我们会向您申请手机系统权限,您可对以下权限进行管理。"
  101 + let paraph = NSMutableParagraphStyle()
  102 + paraph.lineSpacing = 5
  103 + let attributes = [NSAttributedString.Key.font:Font_13_Fit,
  104 + NSAttributedString.Key.paragraphStyle: paraph]
  105 + tipLabel.attributedText = NSAttributedString(string: attrString, attributes: attributes)
  106 + tipLabel.backgroundColor = .clear
  107 + tipLabel.textColor = HexColor("#609BFF")
  108 + tipLabel.numberOfLines = 0
  109 + tipLabel.font = Font_13_Fit
  110 + tipLabel.lineBreakMode = .byCharWrapping
  111 + return tipLabel
  112 + }()
  113 +
  114 + var _show_type:ListShowType!
  115 + init(show_type:ListShowType) {
  116 + super.init(nibName:nil, bundle:nil)
  117 + _show_type = show_type
  118 + }
  119 +
  120 + required init?(coder: NSCoder) {
  121 + fatalError("init(coder:) has not been implemented")
  122 + }
  123 +
  124 +
  125 + override func viewWillAppear(_ animated: Bool) {
  126 + navigationBarHidden = false
  127 + }
  128 +
  129 + override func viewDidLoad() {
  130 + super.viewDidLoad()
  131 + switch _show_type {
  132 + case .feedback:
  133 + titleName = "反馈类型"
  134 + case .setting:
  135 + titleName = "更多设置"
  136 + case .privacy:
  137 + titleName = "隐私"
  138 + case .manager:
  139 + titleName = "系统权限管理"
  140 + case .about:
  141 + titleName = "关于我们"
  142 + case .info:
  143 + titleName = "个人信息"
  144 + case .none:
  145 + break
  146 + }
  147 +
  148 +
  149 + view.addSubview(tableView)
  150 + tableView.snp.makeConstraints { make in
  151 + make.top.equalToSuperview().offset(get_system_nav_height())
  152 + make.left.right.bottom.equalToSuperview()
  153 + }
  154 +
  155 + if _show_type == .setting {
  156 + view.addSubview(logoutButton)
  157 + logoutButton.snp.makeConstraints { make in
  158 + make.centerX.equalToSuperview()
  159 + make.left.equalToSuperview().offset(10)
  160 + make.right.equalToSuperview().offset(-10)
  161 + make.height.equalTo(45)
  162 + make.bottom.equalToSuperview().offset(-get_system_tabbar_ui_offsetHeight() - 20)
  163 + }
  164 + }
  165 + if _show_type == .about {
  166 + tableView.tableHeaderView = headerView
  167 + }
  168 + if _show_type == .manager {
  169 + tipView.addSubview(tipSubView)
  170 + tipSubView.addSubview(tipLabel)
  171 + tableView.tableHeaderView = tipView
  172 + }
  173 + }
  174 +
  175 + @objc func logoutAction() -> Void {
  176 + AlertTool.systemActionSheet(title: nil, message: nil, actionTitles: ["退出登录"]) { index in
  177 + if index == 1 {
  178 + print("退出登录")
  179 + }
  180 + }
  181 + }
  182 +
  183 + deinit {
  184 +
  185 + }
  186 +
  187 +}
  188 +
  189 +extension CNLiveTypeFeedBackViewController {
  190 +
  191 + func numberOfSections(in tableView: UITableView) -> Int {
  192 + return dataArray.count
  193 + }
  194 +
  195 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  196 + return 1
  197 + }
  198 +
  199 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  200 +
  201 + let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineOneFeedBackViewCellIdentifier) as! MineBodyTwoListViewCell
  202 + let dict = dataArray[indexPath.section] as! NSDictionary
  203 + cell.setupWithDataSource(show_type: _show_type,dict: dict as! Dictionary<String, Any>)
  204 + return cell
  205 +
  206 + }
  207 +
  208 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  209 +
  210 + if _show_type == .manager {
  211 + return 75
  212 + }
  213 + if _show_type == .info && indexPath.section == 0 {
  214 + return 95
  215 + }
  216 + return 60
  217 + }
  218 +
  219 + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  220 + return 10
  221 + }
  222 +
  223 + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  224 + return 0.01
  225 + }
  226 +
  227 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  228 + if _show_type == .feedback {
  229 + var show_type = InputFeedBackType.problem
  230 + if indexPath.section == 0 {
  231 + show_type = .problem
  232 + }
  233 + if indexPath.section == 1 {
  234 + show_type = .product
  235 + }
  236 + self.navigationController?.pushViewController(CNLiveInputFeedBackViewController.init(show_type: show_type), animated: true)
  237 + }
  238 + if _show_type == .setting {
  239 + if indexPath.section == 0 {
  240 + self.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .privacy), animated: true)
  241 + }
  242 + if indexPath.section == 1 {
  243 + self.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .about), animated: true)
  244 + }
  245 + }
  246 + if _show_type == .privacy {
  247 + if indexPath.section == 0 {
  248 + self.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .manager), animated: true)
  249 + }
  250 + if indexPath.section == 1 {
  251 + self.navigationController?.pushViewController(CNLiveInfoShowViewController.init(show_type: .privacy), animated: true)
  252 + }
  253 + }
  254 + if _show_type == .about {
  255 + if indexPath.section == 0 {
  256 + print("跳转app商店")
  257 + }
  258 + if indexPath.section == 1 {
  259 + self.navigationController?.pushViewController(CNLiveInfoShowViewController.init(show_type: .service), animated: true)
  260 + }
  261 + }
  262 + if _show_type == .info {
  263 + if indexPath.section == 0 {
  264 + let cell = tableView.cellForRow(at: indexPath) as! MineBodyTwoListViewCell
  265 + let vc = CNLiveMineInfoViewController.init(image: cell.avatarView.image!) { image in
  266 + cell.avatarView.image = image
  267 + }
  268 + self.navigationController?.pushViewController(vc, animated: true)
  269 + }
  270 + if indexPath.section == 1 {
  271 + let mineInfoVC = CNLiveMineNickViewController.init()
  272 + self.navigationController?.pushViewController(mineInfoVC, animated: true)
  273 + }
  274 + if indexPath.section == 2 {
  275 + let cell = tableView.cellForRow(at: indexPath) as! MineBodyTwoListViewCell
  276 + MineInfoAlertView.showSelectView(showType: .gender) { text in
  277 + cell.moreLabel.text = text
  278 + }
  279 + }
  280 + if indexPath.section == 3 {
  281 + let cell = tableView.cellForRow(at: indexPath) as! MineBodyTwoListViewCell
  282 + MineInfoAlertView.showSelectView(showType: .birthday) { text in
  283 + cell.moreLabel.text = text
  284 + }
  285 + }
  286 + }
  287 + }
  288 +}
  289 +
metaCode/Classes/Main/MinePage/View/CNLiveMineBodyListView.swift
@@ -107,7 +107,7 @@ class MineBodyTwoListViewCell : UITableViewCell { @@ -107,7 +107,7 @@ class MineBodyTwoListViewCell : UITableViewCell {
107 lazy var mainView: UIView = { 107 lazy var mainView: UIView = {
108 let mainView = UIView.init() 108 let mainView = UIView.init()
109 mainView.backgroundColor = .white 109 mainView.backgroundColor = .white
110 - mainView.layer.cornerRadius = 8 110 + mainView.layer.cornerRadius = 15
111 mainView.layer.masksToBounds = true 111 mainView.layer.masksToBounds = true
112 return mainView 112 return mainView
113 }() 113 }()
@@ -124,6 +124,15 @@ class MineBodyTwoListViewCell : UITableViewCell { @@ -124,6 +124,15 @@ class MineBodyTwoListViewCell : UITableViewCell {
124 headerView.contentMode = .scaleToFill 124 headerView.contentMode = .scaleToFill
125 return headerView 125 return headerView
126 }() 126 }()
  127 + lazy var avatarView: UIImageView = {
  128 + let avatarView = UIImageView.init()
  129 + avatarView.backgroundColor = .clear
  130 + avatarView.contentMode = .scaleToFill
  131 + avatarView.layer.cornerRadius = 30
  132 + avatarView.layer.masksToBounds = true
  133 + avatarView.isHidden = true
  134 + return avatarView
  135 + }()
127 lazy var moreBtn: UIButton = { 136 lazy var moreBtn: UIButton = {
128 let moreBtn = UIButton.init(type: .custom) 137 let moreBtn = UIButton.init(type: .custom)
129 moreBtn.setImage(UIImage(named: "mine_list_icon_right_more"), for: .normal) 138 moreBtn.setImage(UIImage(named: "mine_list_icon_right_more"), for: .normal)
@@ -131,6 +140,23 @@ class MineBodyTwoListViewCell : UITableViewCell { @@ -131,6 +140,23 @@ class MineBodyTwoListViewCell : UITableViewCell {
131 moreBtn.layer.cornerRadius = 15 140 moreBtn.layer.cornerRadius = 15
132 return moreBtn 141 return moreBtn
133 }() 142 }()
  143 + lazy var descLabel: UILabel = {
  144 + let descLabel = UILabel.init()
  145 + descLabel.textColor = HexColor("#999999")
  146 + descLabel.font = Font_11_Fit
  147 + descLabel.backgroundColor = .white
  148 + descLabel.isHidden = true
  149 + return descLabel
  150 + }()
  151 + lazy var moreLabel: UILabel = {
  152 + let moreLabel = UILabel.init()
  153 + moreLabel.textColor = HexColor("#999999")
  154 + moreLabel.font = Font_11_Fit
  155 + moreLabel.textAlignment = .right
  156 + moreLabel.backgroundColor = .white
  157 + moreLabel.isHidden = true
  158 + return moreLabel
  159 + }()
134 160
135 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { 161 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
136 super.init(style: style, reuseIdentifier: reuseIdentifier) 162 super.init(style: style, reuseIdentifier: reuseIdentifier)
@@ -141,6 +167,9 @@ class MineBodyTwoListViewCell : UITableViewCell { @@ -141,6 +167,9 @@ class MineBodyTwoListViewCell : UITableViewCell {
141 mainView.addSubview(headerView) 167 mainView.addSubview(headerView)
142 headerView.addSubview(nameLabel) 168 headerView.addSubview(nameLabel)
143 mainView.addSubview(moreBtn) 169 mainView.addSubview(moreBtn)
  170 + mainView.addSubview(descLabel)
  171 + mainView.addSubview(moreLabel)
  172 + mainView.addSubview(avatarView)
144 173
145 setupConstraints() 174 setupConstraints()
146 175
@@ -154,23 +183,68 @@ class MineBodyTwoListViewCell : UITableViewCell { @@ -154,23 +183,68 @@ class MineBodyTwoListViewCell : UITableViewCell {
154 make.top.bottom.equalToSuperview() 183 make.top.bottom.equalToSuperview()
155 } 184 }
156 headerView.snp.makeConstraints { make in 185 headerView.snp.makeConstraints { make in
157 - make.centerY.equalToSuperview() 186 + make.centerY.equalTo(mainView)
158 make.left.equalTo(15) 187 make.left.equalTo(15)
159 make.size.equalTo(20) 188 make.size.equalTo(20)
160 } 189 }
161 nameLabel.snp.makeConstraints { make in 190 nameLabel.snp.makeConstraints { make in
162 - make.centerY.equalToSuperview() 191 + make.centerY.equalTo(headerView)
163 make.left.equalTo(headerView.snp.right).offset(7) 192 make.left.equalTo(headerView.snp.right).offset(7)
164 } 193 }
165 moreBtn.snp.makeConstraints { make in 194 moreBtn.snp.makeConstraints { make in
166 - make.centerY.equalToSuperview() 195 + make.centerY.equalTo(headerView)
167 make.right.equalToSuperview().offset(-15) 196 make.right.equalToSuperview().offset(-15)
168 - make.size.equalTo(30) 197 + make.height.equalTo(30)
  198 + make.width.equalTo(15)
  199 + }
  200 + descLabel.snp.makeConstraints { make in
  201 + make.centerY.equalToSuperview().offset(15)
  202 + make.left.equalTo(headerView.snp.right).offset(7)
  203 + }
  204 + moreLabel.snp.makeConstraints { make in
  205 + make.centerY.equalTo(headerView)
  206 + make.right.equalTo(moreBtn.snp.left)
  207 + }
  208 + avatarView.snp.makeConstraints { make in
  209 + make.centerY.equalToSuperview()
  210 + make.right.equalTo(moreBtn.snp.left).offset(-10)
  211 + make.size.equalTo(60)
169 } 212 }
170 } 213 }
171 214
172 - public func setupWithDataSource(dict : Dictionary<String, Any>) {  
173 - headerView.image = UIImage(named: dict["icon"] as! String) 215 + public func setupWithDataSource(show_type: ListShowType,dict : Dictionary<String, Any>) {
  216 + let image = dict["icon"] as! String
  217 + if image == "" {
  218 + headerView.snp.updateConstraints { make in
  219 + make.centerY.equalToSuperview()
  220 + make.left.equalTo(15)
  221 + make.size.equalTo(0.01)
  222 + }
  223 + }else {
  224 + headerView.image = UIImage(named: image)
  225 + }
  226 + if dict.keys.contains("desc") {
  227 + descLabel.isHidden = false
  228 + descLabel.text = "\(dict["desc"] ?? "")"
  229 + headerView.snp.updateConstraints { make in
  230 + make.centerY.equalTo(mainView).offset(-10)
  231 + make.left.equalTo(15)
  232 + make.size.equalTo(20)
  233 + }
  234 + }
  235 + if dict.keys.contains("more") {
  236 + moreLabel.isHidden = false
  237 + if show_type == .info {
  238 + moreLabel.font = Font_15_Fit
  239 + }
  240 + moreLabel.text = "\(dict["more"] ?? "")"
  241 +
  242 +
  243 + }
  244 + if (dict.keys.contains("avatar") && (dict["avatar"] as! String).count > 0) {
  245 + avatarView.isHidden = false
  246 + avatarView.kf.setImage(with: URL(string: "\(dict["avatar"] ?? "")"), placeholder: UIImage(named: "mine_header_icon_defult_ava"))
  247 + }
174 nameLabel.text = "\(dict["name"] ?? "")" 248 nameLabel.text = "\(dict["name"] ?? "")"
175 } 249 }
176 250
metaCode/Classes/Main/MinePage/View/CNLiveMineHeaderView.swift
@@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
6 // 6 //
7 7
8 import Foundation 8 import Foundation
9 - 9 +import HXPHPicker
  10 +import Kingfisher
10 11
11 class MineHeaderView : UIView { 12 class MineHeaderView : UIView {
12 13
@@ -14,10 +15,15 @@ class MineHeaderView : UIView { @@ -14,10 +15,15 @@ class MineHeaderView : UIView {
14 15
15 let iconView = UIImageView.init() 16 let iconView = UIImageView.init()
16 iconView.image = UIImage(named: "mine_header_icon_defult_ava") 17 iconView.image = UIImage(named: "mine_header_icon_defult_ava")
  18 + iconView.kf.indicatorType = .activity
  19 + iconView.kf.setImage(with: URL(string: UserInfoManager.shared.userInfo.bigFaceUrl), placeholder: UIImage(named: "mine_header_icon_defult_ava"))
17 iconView.backgroundColor = .clear 20 iconView.backgroundColor = .clear
18 - iconView.layer.cornerRadius = 20 21 + iconView.layer.cornerRadius = 30
19 iconView.layer.masksToBounds = true 22 iconView.layer.masksToBounds = true
20 iconView.contentMode = .scaleToFill 23 iconView.contentMode = .scaleToFill
  24 + iconView.isUserInteractionEnabled = true
  25 + let tap = UITapGestureRecognizer.init(target: self, action: #selector(pushMineInfoAction))
  26 + iconView.addGestureRecognizer(tap)
21 return iconView 27 return iconView
22 }() 28 }()
23 29
@@ -59,7 +65,6 @@ class MineHeaderView : UIView { @@ -59,7 +65,6 @@ class MineHeaderView : UIView {
59 make.right.equalToSuperview().offset(-15) 65 make.right.equalToSuperview().offset(-15)
60 make.size.equalTo(30) 66 make.size.equalTo(30)
61 } 67 }
62 -  
63 } 68 }
64 69
65 required init?(coder: NSCoder) { 70 required init?(coder: NSCoder) {
@@ -70,4 +75,195 @@ class MineHeaderView : UIView { @@ -70,4 +75,195 @@ class MineHeaderView : UIView {
70 75
71 } 76 }
72 77
  78 + @objc func pushMineInfoAction() {
  79 + currentViewController()?.navigationController?.pushViewController(CNLiveTypeFeedBackViewController.init(show_type: .info), animated: true)
  80 + }
  81 +}
  82 +
  83 +class MineAboutHeaderView: UIView {
  84 +
  85 + lazy var iconView: UIImageView = {
  86 + let iconView = UIImageView.init()
  87 + iconView.image = UIImage(named: "mine_sub_about_app_logo")
  88 + iconView.contentMode = .scaleToFill
  89 + iconView.backgroundColor = .clear
  90 + return iconView
  91 + }()
  92 +
  93 + lazy var nameLabel: UILabel = {
  94 + let nameLabel = UILabel.init()
  95 + nameLabel.text = "\(kAppDisplayName)"
  96 + nameLabel.textColor = HexColor("#333333")
  97 + nameLabel.font = BoldFont_18_Fit
  98 + nameLabel.textAlignment = .center
  99 + return nameLabel
  100 + }()
  101 +
  102 + lazy var verLabel: UILabel = {
  103 + let verLabel = UILabel.init()
  104 + verLabel.text = "YUANMA\(kAppVersion)"
  105 + verLabel.textColor = HexColor("#333333")
  106 + verLabel.font = Font_16_Fit
  107 + verLabel.textAlignment = .center
  108 + return verLabel
  109 + }()
  110 +
  111 + override init(frame: CGRect) {
  112 + super.init(frame: frame)
  113 + addSubview(iconView)
  114 + addSubview(nameLabel)
  115 + addSubview(verLabel)
  116 +
  117 + iconView.snp.makeConstraints { make in
  118 + make.centerX.equalToSuperview()
  119 + make.top.equalToSuperview().offset(60)
  120 + make.size.equalTo(80)
  121 + }
  122 + nameLabel.snp.makeConstraints { make in
  123 + make.centerX.equalToSuperview()
  124 + make.top.equalTo(iconView.snp.bottom).offset(8)
  125 + }
  126 + verLabel.snp.makeConstraints { make in
  127 + make.centerX.equalToSuperview()
  128 + make.top.equalTo(nameLabel.snp.bottom).offset(8)
  129 + }
  130 + }
  131 +
  132 + required init?(coder: NSCoder) {
  133 + fatalError("init(coder:) has not been implemented")
  134 + }
  135 +}
  136 +
  137 +
  138 +typealias ClickResultBlock = (_ array: NSMutableArray) ->Void
  139 +class MinePhotoUploadView: UIView, PhotoPickerControllerDelegate {
  140 +
  141 + lazy var imageView01: UIImageView = {
  142 + let imageView = UIImageView.init()
  143 + imageView.backgroundColor = .white
  144 + imageView.image = UIImage(named: "mine_sub_quest_addd_image")
  145 + imageView.contentMode = .scaleAspectFit
  146 + imageView.isUserInteractionEnabled = true
  147 + imageView.tag = 1000
  148 + imageView.layer.cornerRadius = 7
  149 + imageView.layer.masksToBounds = true
  150 + let tapGes = UITapGestureRecognizer.init(target: self, action: #selector(touchImageAction))
  151 + imageView.addGestureRecognizer(tapGes)
  152 + return imageView
  153 + }()
  154 +
  155 + lazy var imageView02: UIImageView = {
  156 + let imageView = UIImageView.init()
  157 + imageView.backgroundColor = .white
  158 + imageView.image = UIImage(named: "mine_sub_quest_addd_image")
  159 + imageView.contentMode = .scaleAspectFit
  160 + imageView.isUserInteractionEnabled = true
  161 + imageView.tag = 1001
  162 + imageView.isHidden = true
  163 + imageView.layer.cornerRadius = 7
  164 + imageView.layer.masksToBounds = true
  165 + let tapGes = UITapGestureRecognizer.init(target: self, action: #selector(touchImageAction))
  166 + imageView.addGestureRecognizer(tapGes)
  167 + return imageView
  168 + }()
  169 +
  170 + lazy var imageView03: UIImageView = {
  171 + let imageView = UIImageView.init()
  172 + imageView.backgroundColor = .white
  173 + imageView.image = UIImage(named: "mine_sub_quest_addd_image")
  174 + imageView.contentMode = .scaleAspectFit
  175 + imageView.isUserInteractionEnabled = true
  176 + imageView.tag = 1002
  177 + imageView.isHidden = true
  178 + imageView.layer.cornerRadius = 7
  179 + imageView.layer.masksToBounds = true
  180 + let tapGes = UITapGestureRecognizer.init(target: self, action: #selector(touchImageAction))
  181 + imageView.addGestureRecognizer(tapGes)
  182 + return imageView
  183 + }()
  184 +
  185 + lazy var temp_imageView : UIImageView = {
  186 + return UIImageView.init()
  187 + }()
  188 +
  189 + lazy var selectedImages: NSMutableArray = {
  190 + let tempArrray = NSMutableArray.init()
  191 + tempArrray.addObjects(from: ["","",""])
  192 + return tempArrray
  193 + }()
  194 +
  195 + var resutBlock : ClickResultBlock?
  196 +
  197 + override init(frame: CGRect) {
  198 + super.init(frame: frame)
  199 + backgroundColor = .white
  200 +
  201 + addSubview(imageView01)
  202 + imageView01.snp.makeConstraints { make in
  203 + make.size.height.equalTo((KSreenWidth - 40)/3)
  204 + make.top.equalToSuperview()
  205 + make.left.equalToSuperview().offset(10)
  206 + }
  207 + addSubview(imageView02)
  208 + imageView02.snp.makeConstraints { make in
  209 + make.top.equalToSuperview()
  210 + make.size.height.equalTo((KSreenWidth - 40)/3)
  211 + make.size.width.equalTo(imageView02)
  212 + make.left.equalTo(imageView01.snp.right).offset(10)
  213 + }
  214 + addSubview(imageView03)
  215 + imageView03.snp.makeConstraints { make in
  216 + make.size.height.equalTo((KSreenWidth - 40)/3)
  217 + make.size.width.equalTo(imageView02)
  218 + make.top.equalToSuperview()
  219 + make.right.equalToSuperview().offset(-10)
  220 + make.left.equalTo(imageView02.snp.right).offset(10)
  221 + }
  222 + }
  223 +
  224 + required init?(coder: NSCoder) {
  225 + fatalError("init(coder:) has not been implemented")
  226 + }
  227 +
  228 + @objc private func touchImageAction(ges: UITapGestureRecognizer) {
  229 + temp_imageView = ges.view as! UIImageView
  230 + if selectedImages.object(at: temp_imageView.tag - 1000) is String {
  231 + let config = PhotoTools.getWXPickerConfig()
  232 + config.selectMode = .single
  233 + config.selectOptions = .photo
  234 + config.maximumSelectedPhotoCount = 3
  235 + let pickerController = PhotoPickerController(picker: config)
  236 + pickerController.pickerDelegate = self
  237 + pickerController.isOriginal = false
  238 + currentViewController()!.present(pickerController, animated: true, completion: nil)
  239 + }
  240 + }
  241 +}
  242 +
  243 +extension MinePhotoUploadView {
  244 +
  245 + func pickerController(_ pickerController: PhotoPickerController,
  246 + didFinishSelection result: PickerResult) {
  247 + result.getImage { [self] (image, photoAsset, index) in
  248 + if let image = image {
  249 + temp_imageView.image = image
  250 + if temp_imageView == imageView01 {
  251 + imageView02.isHidden = false
  252 + selectedImages.replaceObject(at: 0, with: image)
  253 + }
  254 + if temp_imageView == imageView02 {
  255 + imageView03.isHidden = false
  256 + selectedImages.replaceObject(at: 1, with: image)
  257 + }
  258 + if temp_imageView == imageView03 {
  259 + selectedImages.replaceObject(at: 2, with: image)
  260 + }
  261 + }else {
  262 + print("failed")
  263 + }
  264 + } completionHandler: { (images) in
  265 +
  266 + }
  267 + }
73 } 268 }
  269 +
metaCode/Classes/Main/MinePage/View/CNLiveMineInfoAlertView.swift 0 → 100644
  1 +//
  2 +// CNLiveMineInfoAlertView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/9.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +enum CNLiveMineInfoShowType {
  11 + case gender
  12 + case birthday
  13 +}
  14 +
  15 +typealias CloseGenderResultBlock = (_ text: String) ->Void
  16 +class MineInfoAlertView: UIView {
  17 +
  18 + lazy var tapGesture = UITapGestureRecognizer()
  19 + lazy var grayMaskView: UIView = {
  20 + let grayMaskView = UIView()
  21 + tapGesture.addTarget(self, action: #selector(setupCloseButtonAction))
  22 + grayMaskView.backgroundColor = UIColor.black.withAlphaComponent(0.2)
  23 + grayMaskView.addGestureRecognizer(tapGesture)
  24 + return grayMaskView
  25 + }()
  26 +
  27 + lazy var backView: UIView = {
  28 + let backView = UIView()
  29 + backView.backgroundColor = UIColor.white
  30 + backView.layer.cornerRadius = 12
  31 + return backView
  32 + }()
  33 +
  34 + lazy var contentView : UIView = {
  35 + let contentView = UIView.init()
  36 + contentView.backgroundColor = .white
  37 + contentView.isHidden = true
  38 + return contentView
  39 + }()
  40 +
  41 + lazy var wBtn: UIButton = {
  42 + let wBtn = UIButton.init(type: .custom)
  43 + wBtn.backgroundColor = .white
  44 + wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_nomal"), for: .normal)
  45 + wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_nomal"), for: .highlighted)
  46 + wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_select"), for: .selected)
  47 + wBtn.imageView?.contentMode = .scaleToFill
  48 + wBtn.layer.cornerRadius = 40
  49 + wBtn.layer.masksToBounds = true
  50 + wBtn.addTarget(self, action: #selector(wClickAction), for: .touchUpInside)
  51 + return wBtn
  52 + }()
  53 +
  54 + lazy var mBtn: UIButton = {
  55 + let mBtn = UIButton.init(type: .custom)
  56 + mBtn.backgroundColor = .white
  57 + mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_nomal"), for: .normal)
  58 + mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_nomal"), for: .highlighted)
  59 + mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_select"), for: .selected)
  60 + mBtn.imageView?.contentMode = .scaleToFill
  61 + mBtn.layer.cornerRadius = 40
  62 + mBtn.layer.masksToBounds = true
  63 + mBtn.addTarget(self, action: #selector(mClickAction), for: .touchUpInside)
  64 + return mBtn
  65 + }()
  66 +
  67 + lazy var wLabel: UILabel = {
  68 + let wLabel = UILabel.init()
  69 + wLabel.text = "女"
  70 + wLabel.textAlignment = .center
  71 + wLabel.textColor = .black
  72 + wLabel.font = BoldFont_17_Fit
  73 + return wLabel
  74 + }()
  75 +
  76 + lazy var mLabel: UILabel = {
  77 + let mLabel = UILabel.init()
  78 + mLabel.text = "男"
  79 + mLabel.textAlignment = .center
  80 + mLabel.textColor = .black
  81 + mLabel.font = BoldFont_17_Fit
  82 + return mLabel
  83 + }()
  84 +
  85 + lazy var wView: UIImageView = {
  86 + let wView = UIImageView.init()
  87 + wView.image = UIImage(named: "mine_info_alert_icon_g_select")
  88 + wView.layer.cornerRadius = 8
  89 + wView.layer.masksToBounds = true
  90 + wView.backgroundColor = .clear
  91 + wView.isHidden = true
  92 + return wView
  93 + }()
  94 +
  95 + lazy var mView: UIImageView = {
  96 + let mView = UIImageView.init()
  97 + mView.image = UIImage(named: "mine_info_alert_icon_g_select")
  98 + mView.layer.cornerRadius = 8
  99 + mView.layer.masksToBounds = true
  100 + mView.backgroundColor = .clear
  101 + mView.isHidden = true
  102 + return mView
  103 + }()
  104 +
  105 + lazy var datePicker: UIDatePicker = {
  106 + let datePicker = UIDatePicker.init()
  107 + datePicker.locale = Locale(identifier: "zh_CN")
  108 + datePicker.timeZone = TimeZone.init(identifier: "UTC")
  109 + datePicker.setValue(HexColor("#3C3C3C"), forKey: "textColor")
  110 + datePicker.datePickerMode = .date
  111 + datePicker.isHidden = true
  112 + datePicker.minimumDate = Date.init(timeIntervalSince1970: -60*60*24*365*60)
  113 + datePicker.maximumDate = Date.init(timeInterval: 0, since: Date.init())
  114 + datePicker.addTarget(self, action: #selector(dateChangeAction), for: .valueChanged)
  115 + return datePicker
  116 + }()
  117 +
  118 + lazy var nameLable : UILabel = {
  119 + let nameLable = UILabel.init()
  120 + nameLable.backgroundColor = .white
  121 + nameLable.font = BoldFont_16_Fit
  122 + nameLable.textAlignment = .center
  123 + nameLable.textColor = .black
  124 + return nameLable
  125 + }()
  126 +
  127 + lazy var lineLable : UILabel = {
  128 + let lineLable = UILabel.init()
  129 + lineLable.backgroundColor = HexColor("#E6E6E6")
  130 + return lineLable
  131 + }()
  132 +
  133 + lazy var doneButton : UIButton = {
  134 + let doneButton = UIButton(type: .custom)
  135 + doneButton.setTitle("确定", for: .normal)
  136 + doneButton.setTitleColor(HexColor("#0066FE"), for: .normal)
  137 + doneButton.titleLabel?.font = Font_16
  138 + doneButton.addTarget(self, action: #selector(setupDoneButtonAction), for: .touchUpInside)
  139 + return doneButton
  140 + }()
  141 +
  142 + lazy var closeButton : UIButton = {
  143 + let closeButton = UIButton(type: .custom)
  144 + closeButton.setImage(UIImage(named: "login_alert_country_close"), for: .normal)
  145 + closeButton.backgroundColor = .clear
  146 + closeButton.addTarget(self, action: #selector(setupCloseButtonAction), for: .touchUpInside)
  147 + return closeButton
  148 + }()
  149 +
  150 + var gender: String?
  151 + var show_type: CNLiveMineInfoShowType?
  152 + var result: CloseGenderResultBlock?
  153 + override init(frame: CGRect) {
  154 + super.init(frame: frame)
  155 +
  156 + addSubview(grayMaskView)
  157 + addSubview(backView)
  158 + backView.addSubview(datePicker)
  159 + backView.addSubview(contentView)
  160 + contentView.addSubview(wBtn)
  161 + contentView.addSubview(mBtn)
  162 + contentView.addSubview(wLabel)
  163 + contentView.addSubview(mLabel)
  164 + contentView.addSubview(wView)
  165 + contentView.addSubview(mView)
  166 + backView.addSubview(nameLable)
  167 + backView.addSubview(lineLable)
  168 + backView.addSubview(closeButton)
  169 + backView.addSubview(doneButton)
  170 + switch show_type {
  171 + case .gender:
  172 + nameLable.text = "设置性别"
  173 + contentView.isHidden = false
  174 + datePicker.isHidden = true
  175 + default:
  176 + nameLable.text = "选择生日"
  177 + contentView.isHidden = true
  178 + datePicker.isHidden = false
  179 + }
  180 + wBtn.isSelected = UserInfoManager.shared.userInfo.gender == "男"
  181 + mBtn.isSelected = UserInfoManager.shared.userInfo.gender == "女"
  182 + wView.isHidden = UserInfoManager.shared.userInfo.gender == "男"
  183 + wView.isHidden = UserInfoManager.shared.userInfo.gender == "女"
  184 +
  185 + setConstraints()
  186 + }
  187 +
  188 + func setConstraints() {
  189 + grayMaskView.snp.makeConstraints { make in
  190 + make.edges.equalToSuperview()
  191 + }
  192 + backView.snp.makeConstraints { make in
  193 + make.top.equalTo(self.snp.bottom).offset(0)
  194 + make.left.right.equalToSuperview()
  195 + make.height.equalTo(250)
  196 + }
  197 + doneButton.snp.makeConstraints { make in
  198 + make.right.equalToSuperview()
  199 + make.top.equalTo(10)
  200 + make.height.equalTo(30)
  201 + make.width.equalTo(60)
  202 + }
  203 + closeButton.snp.makeConstraints { make in
  204 + make.centerY.equalTo(doneButton)
  205 + make.left.equalTo(8)
  206 + make.size.equalTo(30)
  207 + }
  208 + nameLable.snp.makeConstraints { make in
  209 + make.centerY.equalTo(doneButton)
  210 + make.centerX.equalToSuperview()
  211 + }
  212 + lineLable.snp.makeConstraints { make in
  213 + make.left.right.equalToSuperview()
  214 + make.height.equalTo(1)
  215 + make.top.equalTo(nameLable.snp.bottom).offset(10)
  216 + }
  217 + datePicker.snp.makeConstraints { make in
  218 + make.bottom.equalToSuperview()
  219 + make.left.right.equalToSuperview()
  220 + make.top.equalTo(lineLable.snp.bottom)
  221 + }
  222 + contentView.snp.makeConstraints { make in
  223 + make.bottom.equalToSuperview()
  224 + make.left.right.equalToSuperview()
  225 + make.top.equalTo(lineLable.snp.bottom)
  226 + }
  227 + mBtn.snp.makeConstraints { make in
  228 + make.centerY.equalToSuperview()
  229 + make.right.equalToSuperview().offset(-(KSreenWidth - 160)/3)
  230 + make.size.equalTo(80)
  231 + }
  232 + wBtn.snp.makeConstraints { make in
  233 + make.centerY.equalToSuperview()
  234 + make.left.equalToSuperview().offset((KSreenWidth - 160)/3)
  235 + make.size.equalTo(80)
  236 + }
  237 + mLabel.snp.makeConstraints { make in
  238 + make.centerX.equalTo(wBtn)
  239 + make.top.equalTo(wBtn.snp.bottom).offset(10)
  240 + }
  241 + wLabel.snp.makeConstraints { make in
  242 + make.centerX.equalTo(mBtn)
  243 + make.top.equalTo(mBtn.snp.bottom).offset(10)
  244 + }
  245 + mView.snp.makeConstraints { make in
  246 + make.centerX.equalTo(mBtn)
  247 + make.bottom.equalTo(mBtn.snp.bottom).offset(8)
  248 + make.size.equalTo(16)
  249 + }
  250 + wView.snp.makeConstraints { make in
  251 + make.centerX.equalTo(wBtn)
  252 + make.bottom.equalTo(wBtn.snp.bottom).offset(8)
  253 + make.size.equalTo(16)
  254 + }
  255 +
  256 + }
  257 +
  258 + static public func showSelectView(showType: CNLiveMineInfoShowType, result: @escaping CloseGenderResultBlock){
  259 + let pickerView = MineInfoAlertView()
  260 + pickerView.show_type = showType
  261 + pickerView.result = result
  262 +
  263 + let window = UIApplication.shared.windows.last
  264 + window?.addSubview(pickerView)
  265 + pickerView.snp.makeConstraints { make in
  266 + make.edges.equalToSuperview()
  267 + }
  268 + window?.layoutIfNeeded()
  269 + pickerView.alpha = 0
  270 + UIView.animate(withDuration: 0.1) {
  271 + pickerView.alpha = 1
  272 + } completion: { _ in
  273 + UIView.animate(withDuration: 0.1) {
  274 + pickerView.backView.snp.updateConstraints { make in
  275 + make.top.equalTo(pickerView.snp.bottom).offset(-pickerView.backView.frame.height)
  276 + }
  277 + pickerView.layoutIfNeeded()
  278 + }
  279 + }
  280 + }
  281 +
  282 + required init?(coder: NSCoder) {
  283 + fatalError("init(coder:) has not been implemented")
  284 + }
  285 +
  286 + @objc func dateChangeAction(sender: UIDatePicker) {
  287 + let formatter = DateFormatter()
  288 + formatter.dateFormat = "yyyy-MM-dd"
  289 + print("\(formatter.string(from: datePicker.date))")
  290 + result!(formatter.string(from: datePicker.date))
  291 + }
  292 +
  293 + @objc func setupDoneButtonAction() {
  294 + print("进行更改\(gender ?? "")")
  295 + removeFromSuperview()
  296 + }
  297 +
  298 + @objc func setupCloseButtonAction() -> Void {
  299 + removeFromSuperview()
  300 + }
  301 +
  302 + @objc func mClickAction(sender: UIButton) {
  303 + sender.isSelected = !sender.isSelected
  304 + wBtn.isSelected = !sender.isSelected
  305 + mView.isHidden = !sender.isSelected
  306 + wView.isHidden = sender.isSelected
  307 + gender = "m"
  308 + result!("女")
  309 + }
  310 +
  311 + @objc func wClickAction(sender: UIButton) {
  312 + sender.isSelected = !sender.isSelected
  313 + mBtn.isSelected = !sender.isSelected
  314 + wView.isHidden = !sender.isSelected
  315 + mView.isHidden = sender.isSelected
  316 + gender = "w"
  317 + result!("男")
  318 + }
  319 +}
metaCode/Classes/Main/MinePage/View/CNLiveMineSubBodyListView.swift
@@ -92,3 +92,62 @@ class MineInfoLListTableViewCell : UITableViewCell { @@ -92,3 +92,62 @@ class MineInfoLListTableViewCell : UITableViewCell {
92 fatalError("init(coder:) has not been implemented") 92 fatalError("init(coder:) has not been implemented")
93 } 93 }
94 } 94 }
  95 +
  96 +class MineFeedBackListCollectViewCell : UICollectionViewCell {
  97 +
  98 + lazy var iconView: UIImageView = {
  99 + let iconView = UIImageView.init()
  100 + iconView.backgroundColor = .white
  101 + iconView.contentMode = .scaleToFill
  102 + return iconView
  103 + }()
  104 +
  105 + lazy var titleLabel: UILabel = {
  106 + let titleLabel = UILabel.init()
  107 + titleLabel.font = BoldFont_16_Fit
  108 + titleLabel.textColor = .black
  109 + return titleLabel
  110 + }()
  111 +
  112 + lazy var moreView: UIImageView = {
  113 + let moreView = UIImageView.init()
  114 + moreView.contentMode = .scaleToFill
  115 + moreView.backgroundColor = .white
  116 + moreView.image = UIImage(named: "mine_add_content_more_list")
  117 + return moreView
  118 + }()
  119 +
  120 + override init(frame: CGRect) {
  121 + super.init(frame: frame)
  122 + self.backgroundColor = .white
  123 + self.layer.masksToBounds = true
  124 + self.layer.cornerRadius = 8
  125 +
  126 + addSubview(titleLabel)
  127 + titleLabel.snp.makeConstraints { make in
  128 + make.centerY.equalToSuperview()
  129 + make.centerX.equalToSuperview().offset(10)
  130 + }
  131 + addSubview(iconView)
  132 + iconView.snp.makeConstraints { make in
  133 + make.centerY.equalToSuperview()
  134 + make.right.equalTo(titleLabel.snp.left).offset(-10)
  135 + make.size.equalTo(40)
  136 + }
  137 + addSubview(moreView)
  138 + moreView.snp.makeConstraints { make in
  139 + make.centerY.equalToSuperview()
  140 + make.left.equalTo(titleLabel.snp.right).offset(5)
  141 + make.size.equalTo(10)
  142 + }
  143 + }
  144 +
  145 + public func setupWithDataSource(dict: Dictionary<String, Any>) {
  146 + iconView.image = UIImage(named: (dict["image"] as? String)!)
  147 + titleLabel.text = dict["name"] as? String
  148 + }
  149 +
  150 + required init?(coder: NSCoder) {
  151 + fatalError("init(coder:) has not been implemented")
  152 + }
  153 +}
metaCode/Info.plist
@@ -2,10 +2,33 @@ @@ -2,10 +2,33 @@
2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 <plist version="1.0"> 3 <plist version="1.0">
4 <dict> 4 <dict>
  5 + <key>CFBundleAllowMixedLocalizations</key>
  6 + <true/>
5 <key>UIApplicationSceneManifest</key> 7 <key>UIApplicationSceneManifest</key>
6 <dict> 8 <dict>
7 <key>UIApplicationSupportsMultipleScenes</key> 9 <key>UIApplicationSupportsMultipleScenes</key>
8 <false/> 10 <false/>
9 </dict> 11 </dict>
  12 + <key>NSPhotoLibraryAddUsageDescription</key>
  13 + <string>需要允许打开相册才能访问相册照片和保存照片</string>
  14 + <key>NSPhotoLibraryUsageDescription</key>
  15 + <string>需要允许打开相册才能访问相册照片和保存照片</string>
  16 + <key>NSCameraUsageDescription</key>
  17 + <string>需要允许开启相机才能使用录制视频和拍照功能</string>
  18 + <key>NSMicrophoneUsageDescription</key>
  19 + <string>需要允许开启麦克风才能使用录制视频和语音等服务</string>
  20 + <key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
  21 + <true/>
  22 + <key>NSAppTransportSecurity</key>
  23 + <dict>
  24 + <key>NSAllowsArbitraryLoads</key>
  25 + <true/>
  26 + </dict>
  27 + <key>CFBundleDevelopmentRegion</key>
  28 + <string>zh_CN</string>
  29 + <key>CFBundleLocalizations</key>
  30 + <array>
  31 + <string>zh</string>
  32 + </array>
10 </dict> 33 </dict>
11 </plist> 34 </plist>
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_content_more_list.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_add_content_more_list@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_add_content_more_list@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_content_more_list.imageset/mine_add_content_more_list@2x.png 0 → 100644

244 Bytes

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_content_more_list.imageset/mine_add_content_more_list@3x.png 0 → 100644

409 Bytes

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_custom_service_list.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_add_customer _service_list@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_add_customer _service_list@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_custom_service_list.imageset/mine_add_customer _service_list@2x.png 0 → 100644

7.79 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_custom_service_list.imageset/mine_add_customer _service_list@3x.png 0 → 100644

16.2 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_feed_back_list.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_add_feed_back_list@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_add_feed_back_list@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_feed_back_list.imageset/mine_add_feed_back_list@2x.png 0 → 100644

7.78 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_add_feed_back_list.imageset/mine_add_feed_back_list@3x.png 0 → 100644

16.6 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_g_select.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_info_alert_icon_g_select@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_info_alert_icon_g_select@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_g_select.imageset/mine_info_alert_icon_g_select@2x.png 0 → 100644

1.02 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_g_select.imageset/mine_info_alert_icon_g_select@3x.png 0 → 100644

1.77 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_nomal.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_info_alert_icon_m_nomal@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_info_alert_icon_m_nomal@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_nomal.imageset/mine_info_alert_icon_m_nomal@2x.png 0 → 100644

9.72 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_nomal.imageset/mine_info_alert_icon_m_nomal@3x.png 0 → 100644

19.8 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_select.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_info_alert_icon_m_select@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_info_alert_icon_m_select@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_select.imageset/mine_info_alert_icon_m_select@2x.png 0 → 100644

13 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_m_select.imageset/mine_info_alert_icon_m_select@3x.png 0 → 100644

28.1 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_nomal.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_info_alert_icon_w_nomal@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_info_alert_icon_w_nomal@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_nomal.imageset/mine_info_alert_icon_w_nomal@2x.png 0 → 100644

8.47 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_nomal.imageset/mine_info_alert_icon_w_nomal@3x.png 0 → 100644

17.4 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_select.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_info_alert_icon_w_select@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_info_alert_icon_w_select@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_select.imageset/mine_info_alert_icon_w_select@2x.png 0 → 100644

10.8 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_info_alert_icon_w_select.imageset/mine_info_alert_icon_w_select@3x.png 0 → 100644

23.8 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_about.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_sub_set_about@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_sub_set_about@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_about.imageset/mine_list_sub_set_about@2x.png 0 → 100644

1.74 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_about.imageset/mine_list_sub_set_about@3x.png 0 → 100644

3.22 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_feedback.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_sub_set_feedback@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_sub_set_feedback@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_feedback.imageset/mine_list_sub_set_feedback@2x.png 0 → 100644

885 Bytes

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_feedback.imageset/mine_list_sub_set_feedback@3x.png 0 → 100644

1.59 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_poistion.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_sub_set_poistion@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_sub_set_poistion@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_poistion.imageset/mine_list_sub_set_poistion@2x.png 0 → 100644

1.78 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_poistion.imageset/mine_list_sub_set_poistion@3x.png 0 → 100644

3.25 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_privacy.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_sub_set_privacy@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_sub_set_privacy@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_privacy.imageset/mine_list_sub_set_privacy@2x.png 0 → 100644

1.34 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_privacy.imageset/mine_list_sub_set_privacy@3x.png 0 → 100644

2.39 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_sugges.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_sub_set_sugges@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_sub_set_sugges@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_sugges.imageset/mine_list_sub_set_sugges@2x.png 0 → 100644

1.68 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_sub_set_sugges.imageset/mine_list_sub_set_sugges@3x.png 0 → 100644

3.18 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_about_app_logo.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_sub_about_app_logo@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_sub_about_app_logo@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_about_app_logo.imageset/mine_sub_about_app_logo@2x.png 0 → 100644

13.4 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_about_app_logo.imageset/mine_sub_about_app_logo@3x.png 0 → 100644

25.4 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_quest_addd_image.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_sub_quest_addd_image@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_sub_quest_addd_image@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_quest_addd_image.imageset/mine_sub_quest_addd_image@2x.png 0 → 100644

2.65 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_sub_quest_addd_image.imageset/mine_sub_quest_addd_image@3x.png 0 → 100644

6.09 KB