Commit 1bfe11f043d72b12d560414067c58497393d8da5
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
Podfile
| @@ -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
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