Commit a0d44c80fffd894bb0e40025742d737960312406

Authored by liushiyu
1 parent 2330cd7b

对基类添加逻辑

Showing 57 changed files with 1783 additions and 126 deletions
... ... @@ -24,6 +24,10 @@ target 'metaCode' do
24 24 pod 'SnapKit'
25 25 #加载框
26 26 pod 'MBProgressHUD'
  27 + #模型转换工具
  28 + pod 'HandyJSON'
  29 + #轻量级缓存工具
  30 + pod 'SwiftyUserDefaults'
27 31  
28 32 target 'metaCodeTests' do
29 33 inherit! :search_paths
... ...
metaCode.xcodeproj/project.pbxproj
... ... @@ -13,15 +13,26 @@
13 13 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */; };
14 14 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */; };
15 15 790D01912A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */; };
16   - 790D019A2A2DCAE400C5978D /* CNMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01992A2DCAE400C5978D /* CNMineViewController.swift */; };
  16 + 790D019A2A2DCAE400C5978D /* CNLiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */; };
17 17 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */; };
18 18 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */; };
19 19 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A02A2DD69200C5978D /* CNLiveTips.swift */; };
20 20 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */; };
21 21 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */; };
22 22 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 */; };
  24 + 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */; };
  25 + 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 */; };
  28 + 79282A462A2F457D00B5F8CF /* CNLiveMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */; };
23 29 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; };
24 30 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; };
  31 + 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */; };
  32 + 798A44EA2A30135D00815935 /* CNLiveMineBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44E92A30135D00815935 /* CNLiveMineBodyListView.swift */; };
  33 + 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798A44EB2A302DBE00815935 /* CNLiveMineAddInfoViewController.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 */; };
25 36 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; };
26 37 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; };
27 38 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */; };
... ... @@ -74,15 +85,26 @@
74 85 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+CNHexColor.swift"; sourceTree = "<group>"; };
75 86 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewController.swift; sourceTree = "<group>"; };
76 87 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigFontMacro.swift; sourceTree = "<group>"; };
77   - 790D01992A2DCAE400C5978D /* CNMineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNMineViewController.swift; sourceTree = "<group>"; };
  88 + 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveViewController.swift; sourceTree = "<group>"; };
78 89 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+CNGradient.swift"; sourceTree = "<group>"; };
79 90 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewModel.swift; sourceTree = "<group>"; };
80 91 790D01A02A2DD69200C5978D /* CNLiveTips.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTips.swift; sourceTree = "<group>"; };
81 92 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigManager.swift; sourceTree = "<group>"; };
82 93 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginPickerView.swift; sourceTree = "<group>"; };
83 94 790D01A62A2DF84C00C5978D /* countries.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = countries.plist; sourceTree = "<group>"; };
  95 + 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSString+CNLiveExtensions.swift"; sourceTree = "<group>"; };
  96 + 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginModel.swift; sourceTree = "<group>"; };
  97 + 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigUserInfo.swift; sourceTree = "<group>"; };
  98 + 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHotButton.swift; sourceTree = "<group>"; };
  99 + 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginAuthView.swift; sourceTree = "<group>"; };
  100 + 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineViewController.swift; sourceTree = "<group>"; };
84 101 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
85 102 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; };
  103 + 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineHeaderView.swift; sourceTree = "<group>"; };
  104 + 798A44E92A30135D00815935 /* CNLiveMineBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineBodyListView.swift; sourceTree = "<group>"; };
  105 + 798A44EB2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineAddInfoViewController.swift; sourceTree = "<group>"; };
  106 + 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseNavigationController.swift; sourceTree = "<group>"; };
  107 + 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+CNLiveExtension.swift"; sourceTree = "<group>"; };
86 108 79A68C512A26F59C00DC3B43 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = metaCode/Info.plist; sourceTree = "<group>"; };
87 109 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveBaseTabBarViewController.swift; sourceTree = "<group>"; };
88 110 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBar+CNBadge.swift"; sourceTree = "<group>"; };
... ... @@ -163,6 +185,8 @@
163 185 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */,
164 186 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */,
165 187 790D01A02A2DD69200C5978D /* CNLiveTips.swift */,
  188 + 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */,
  189 + 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */,
166 190 );
167 191 path = Extensions;
168 192 sourceTree = "<group>";
... ... @@ -182,6 +206,7 @@
182 206 isa = PBXGroup;
183 207 children = (
184 208 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */,
  209 + 79282A3D2A2EFDA000B5F8CF /* CNLiveLoginModel.swift */,
185 210 );
186 211 path = ViewModel;
187 212 sourceTree = "<group>";
... ... @@ -205,6 +230,7 @@
205 230 isa = PBXGroup;
206 231 children = (
207 232 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */,
  233 + 79282A432A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift */,
208 234 );
209 235 path = View;
210 236 sourceTree = "<group>";
... ... @@ -212,6 +238,8 @@
212 238 790D01972A2DCAE400C5978D /* MinePage */ = {
213 239 isa = PBXGroup;
214 240 children = (
  241 + 798A44E52A30130600815935 /* View */,
  242 + 798A44E62A30130600815935 /* ViewModel */,
215 243 790D01982A2DCAE400C5978D /* Controller */,
216 244 );
217 245 path = MinePage;
... ... @@ -220,7 +248,8 @@
220 248 790D01982A2DCAE400C5978D /* Controller */ = {
221 249 isa = PBXGroup;
222 250 children = (
223   - 790D01992A2DCAE400C5978D /* CNMineViewController.swift */,
  251 + 79282A452A2F457D00B5F8CF /* CNLiveMineViewController.swift */,
  252 + 798A44EB2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift */,
224 253 );
225 254 path = Controller;
226 255 sourceTree = "<group>";
... ... @@ -243,6 +272,7 @@
243 272 7963988B2A260C0100D045EB /* Other */ = {
244 273 isa = PBXGroup;
245 274 children = (
  275 + 790D01992A2DCAE400C5978D /* CNLiveViewController.swift */,
246 276 7963988D2A260C0100D045EB /* AppDelegate.swift */,
247 277 );
248 278 path = Other;
... ... @@ -294,6 +324,7 @@
294 324 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */,
295 325 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */,
296 326 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */,
  327 + 79282A3F2A2F055100B5F8CF /* CNLiveConfigUserInfo.swift */,
297 328 );
298 329 path = Config;
299 330 sourceTree = "<group>";
... ... @@ -313,10 +344,27 @@
313 344 children = (
314 345 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */,
315 346 7C4931282A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift */,
  347 + 798A44ED2A305AAC00815935 /* CNLiveBaseNavigationController.swift */,
316 348 );
317 349 path = Base;
318 350 sourceTree = "<group>";
319 351 };
  352 + 798A44E52A30130600815935 /* View */ = {
  353 + isa = PBXGroup;
  354 + children = (
  355 + 798A44E72A30134400815935 /* CNLiveMineHeaderView.swift */,
  356 + 798A44E92A30135D00815935 /* CNLiveMineBodyListView.swift */,
  357 + );
  358 + path = View;
  359 + sourceTree = "<group>";
  360 + };
  361 + 798A44E62A30130600815935 /* ViewModel */ = {
  362 + isa = PBXGroup;
  363 + children = (
  364 + );
  365 + path = ViewModel;
  366 + sourceTree = "<group>";
  367 + };
320 368 7CD675212A26F844008354C1 /* HomePage */ = {
321 369 isa = PBXGroup;
322 370 children = (
... ... @@ -353,6 +401,7 @@
353 401 isa = PBXGroup;
354 402 children = (
355 403 7CD675512A29C04B008354C1 /* CNLiveConstant.swift */,
  404 + 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */,
356 405 );
357 406 path = Constant;
358 407 sourceTree = "<group>";
... ... @@ -661,31 +710,42 @@
661 710 796398942A260C0100D045EB /* AppDelegate.swift in Sources */,
662 711 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */,
663 712 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */,
  713 + 79282A3C2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift in Sources */,
664 714 790D01822A2D88FC00C5978D /* CNLiveConfigMacro.swift in Sources */,
665 715 7CD675482A274167008354C1 /* PGIndexBannerSubiew.m in Sources */,
666 716 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */,
667 717 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */,
668 718 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */,
669 719 7CD675522A29C04B008354C1 /* CNLiveConstant.swift in Sources */,
  720 + 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */,
670 721 7CD6753E2A2740B0008354C1 /* CNPayMoneyCodeView.swift in Sources */,
671 722 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */,
672 723 7CD675402A2740B0008354C1 /* CNCollectMoneyCodeView.swift in Sources */,
673 724 7CD6754F2A2840B9008354C1 /* CNMetaCodeHomePageController.swift in Sources */,
674 725 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */,
  726 + 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */,
675 727 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */,
  728 + 798A44EA2A30135D00815935 /* CNLiveMineBodyListView.swift in Sources */,
676 729 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */,
  730 + 79282A3E2A2EFDA000B5F8CF /* CNLiveLoginModel.swift in Sources */,
677 731 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */,
678 732 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
  733 + 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */,
679 734 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
680 735 790D01912A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift in Sources */,
681 736 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */,
  737 + 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */,
682 738 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
683 739 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */,
684 740 7CD6753F2A2740B0008354C1 /* CNTopCollectMoneyRemindView.swift in Sources */,
  741 + 79282A422A2F173300B5F8CF /* CNLiveHotButton.swift in Sources */,
685 742 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */,
  743 + 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */,
686 744 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */,
687   - 790D019A2A2DCAE400C5978D /* CNMineViewController.swift in Sources */,
  745 + 790D019A2A2DCAE400C5978D /* CNLiveViewController.swift in Sources */,
688 746 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */,
  747 + 79282A462A2F457D00B5F8CF /* CNLiveMineViewController.swift in Sources */,
  748 + 798A44F02A305BC200815935 /* UIButton+CNLiveExtension.swift in Sources */,
689 749 );
690 750 runOnlyForDeploymentPostprocessing = 0;
691 751 };
... ...
metaCode/Classes/Common/Base/CNLiveBaseNavigationController.swift 0 → 100644
  1 +//
  2 +// CNLiveBaseNavigationController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveBaseNavigationController : UINavigationController, UIGestureRecognizerDelegate {
  11 +
  12 + override func viewDidLoad() {
  13 + super.viewDidLoad()
  14 +
  15 + guard let targets = interactivePopGestureRecognizer?.value(forKey: "_targets") as? [NSObject] else {return}
  16 + let targetObjc = targets[0]
  17 + let target = targetObjc.value(forKey: "target")
  18 + let action = Selector(("handleNavigationTransition:"))
  19 +
  20 + let panges = UIPanGestureRecognizer(target: target, action: action)
  21 + view.addGestureRecognizer(panges)
  22 +
  23 + self.interactivePopGestureRecognizer?.delegate = self //侧滑返回
  24 + }
  25 +
  26 + // MARK: - <UIGestureRecognizerDelegate>
  27 + // 什么时候调用:每次触发手势之前都会询问下代理,是否触发。
  28 + // 作用:拦截手势触发,手势识别器对象会调用这个代理方法来决定手势是否有效
  29 + func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
  30 + return viewControllers.count > 1
  31 + }
  32 +
  33 + /// 重写push方法的目的 : 拦截所有push进来的子控制器
  34 + override func pushViewController(_ viewController: UIViewController, animated: Bool) {
  35 + if (self.children.count > 0 ) {
  36 + // 隐藏底部的工具条
  37 + viewController.hidesBottomBarWhenPushed = true
  38 + }
  39 + // 所有设置搞定后, 再push控制器
  40 + super.pushViewController(viewController, animated: animated)
  41 + }
  42 +
  43 + @objc func ClickBackBtn() {
  44 + self.popViewController(animated: true)
  45 + }
  46 +}
  47 +
  48 +
... ...
metaCode/Classes/Common/Base/CNLiveBaseTabBarViewController.swift
... ... @@ -20,6 +20,8 @@ class CNLiveBaseTabBarViewController:UITabBarController
20 20 self.setUpTabBar()
21 21 self.setupBackgroup()
22 22  
  23 + self.selectedIndex = 1
  24 +
23 25 }
24 26 override func viewDidAppear(_ animated: Bool) {
25 27 super.viewDidAppear(animated)
... ... @@ -29,7 +31,7 @@ class CNLiveBaseTabBarViewController:UITabBarController
29 31 func setUpTabBar() {
30 32  
31 33 let homeVC = CNMetaCodeHomePageController()
32   - let mineVC = CNMineViewController()
  34 + let mineVC = CNLiveMineViewController()
33 35  
34 36 creatTabbarView(viewController: homeVC, image: "tabbar_hoem_icon_default", selectImage: "tabbar_hoem_icon_selected", title: "首页")
35 37  
... ... @@ -39,8 +41,8 @@ class CNLiveBaseTabBarViewController:UITabBarController
39 41 self.tabBar.isTranslucent = false
40 42  
41 43 self.viewControllers = [
42   - UINavigationController(rootViewController: homeVC),
43   - UINavigationController(rootViewController: mineVC),
  44 + CNLiveBaseNavigationController(rootViewController: homeVC),
  45 + CNLiveBaseNavigationController(rootViewController: mineVC),
44 46 ];
45 47  
46 48  
... ...
metaCode/Classes/Common/Base/CNLiveBaseViewController.swift
... ... @@ -10,24 +10,150 @@ import Foundation
10 10  
11 11 class CNLiveBaseViewController: UIViewController {
12 12  
  13 + static let kTopNavLeftRightOffset = 6.0
  14 + /// topNavView的高度 默认高度为 get_system_nav_height()
  15 + public var _topNavViewHeight: CGFloat = 0.0
  16 + public var topNavViewHeight : CGFloat {
  17 + get {
  18 + return _topNavViewHeight
  19 + }
  20 + set {
  21 + _topNavViewHeight = newValue
  22 + if (view.subviews.contains(topNavView)) {
  23 + viewWillLayoutSubviews()
  24 + }
  25 + }
  26 + }
  27 +
  28 + /// 设置标题显示
  29 + public var _titleName: String = ""
  30 + public var titleName: String {
  31 + get {
  32 + return _titleName
  33 + }
  34 + set {
  35 + _titleName = newValue
  36 + super.title = _titleName
  37 + titleLabel.text = _titleName
  38 + }
  39 + }
  40 +
  41 + /// //顶部导航内容(不带topLine)偏移量Y 初始值为0
  42 + public var _topNavViewSubUIContentOffsetY: CGFloat = 0.0
  43 + public var topNavViewSubUIContentOffsetY: CGFloat {
  44 + get {
  45 + return _topNavViewSubUIContentOffsetY
  46 + }
  47 + set {
  48 + _topNavViewSubUIContentOffsetY = newValue
  49 + viewWillLayoutSubviews()
  50 + }
  51 + }
  52 +
  53 + public var _leftNavBtns: Array<UIButton> = []
  54 + public var leftNavBtns: Array<UIButton> {
  55 + get {
  56 + return _leftNavBtns
  57 + }
  58 + set {
  59 + _leftNavBtns = newValue
  60 + var lastBtn : UIButton? = nil
  61 + _leftNavBtns.forEach { btn in
  62 + btn.removeFromSuperview()
  63 + topNavView.addSubview(btn)
  64 + btn.frame = CGRect(x: lastBtn != nil ? CGRectGetMaxX(lastBtn!.frame) : CNLiveBaseViewController.kTopNavLeftRightOffset, y: topNavViewHeight - btn.height, width: btn.width, height: btn.height)
  65 + lastBtn = btn
  66 + }
  67 + leftNavSpace = CGRectGetMaxX(lastBtn!.frame)
  68 + viewWillLayoutSubviews()
  69 + }
  70 + }
  71 +
  72 + public var _rightNavBtns: Array<UIButton> = []
  73 + public var rightNavBtns: Array<UIButton> {
  74 + get {
  75 + return _rightNavBtns
  76 + }
  77 + set {
  78 + _rightNavBtns = newValue
  79 + var lastBtn : UIButton? = nil
  80 + _rightNavBtns.forEach { btn in
  81 + btn.removeFromSuperview()
  82 + topNavView.addSubview(btn)
  83 + btn.frame = CGRect(x: lastBtn != nil ? (lastBtn!.origin.x - btn.width) : (topNavView.width - CNLiveBaseViewController.kTopNavLeftRightOffset - btn.width), y: topNavViewHeight - btn.height, width: btn.width, height: btn.height)
  84 + lastBtn = btn
  85 + }
  86 + rightNavSpace = CGRectGetMaxX(lastBtn!.frame)
  87 + viewWillLayoutSubviews()
  88 + }
  89 + }
  90 +
  91 + private var leftNavSpace: CGFloat = 0.0
  92 + private var rightNavSpace: CGFloat = 0.0
  93 +
13 94 deinit {
14 95 log("主界面已销毁")
15 96 }
16 97  
17 98 override func viewDidLoad() {
18   - self.view.backgroundColor = .white
  99 + self.view.backgroundColor = HexColor("#F7F8FA")
  100 +
  101 + if #available(iOS 13.0, *) {
  102 + self.overrideUserInterfaceStyle = .light
  103 + } else {
  104 + // Fallback on earlier versions
  105 + }
19 106  
20 107 configIOS11()
21 108 configIOS15()
22 109  
23   - self.navigationController?.isNavigationBarHidden = true
  110 + initBaseUI()
24 111  
  112 + self.navigationController?.isNavigationBarHidden = true
25 113 }
26 114  
  115 + override func viewWillLayoutSubviews() {
  116 + super.viewWillLayoutSubviews()
  117 + topNavView.frame = CGRect(x: 0, y: 0, width: view.width, height: topNavViewHeight)
  118 + let lrSpace = leftNavSpace > rightNavSpace ? leftNavSpace : rightNavSpace
  119 + titleLabel.frame = CGRect(x: CGFloat(Int(lrSpace)) , y: topNavViewHeight - get_system_nav_ui_height() - topNavViewSubUIContentOffsetY, width: topNavView.width - (lrSpace * 2), height: get_system_nav_ui_height())
  120 + leftNavBtns.forEach { currentBtn in
  121 + currentBtn.frame = CGRectMake(currentBtn.origin.x, topNavViewHeight - currentBtn.height - topNavViewSubUIContentOffsetY, currentBtn.width, currentBtn.height);
  122 + }
  123 + rightNavBtns.forEach { currentBtn in
  124 + currentBtn.frame = CGRectMake(currentBtn.origin.x, topNavViewHeight - currentBtn.height - topNavViewSubUIContentOffsetY, currentBtn.width, currentBtn.height);
  125 + }
  126 + topLine.frame = CGRect(x: 0, y: topNavViewHeight - 1, width: topNavView.width, height: 1)
  127 + }
27 128  
  129 + public lazy var topNavView: UIView = {
  130 + let topNavView = UIView.init(frame: CGRect(x: 0, y: 0, width: view.width, height: topNavViewHeight))
  131 + topNavView.backgroundColor = HexColor("#fafbfd")
  132 + topNavView.isUserInteractionEnabled = true
  133 +
  134 + let tap = UITapGestureRecognizer.init(target: self, action: #selector(topNavViewTap))
  135 + tap.cancelsTouchesInView = false
  136 + topNavView.addGestureRecognizer(tap)
  137 + topNavView.backgroundColor = HexColor("#F7F8FA")
  138 + return topNavView
  139 + }()
28 140  
29   - // MARK: - iOS 适配
  141 + public lazy var titleLabel: UILabel = {
  142 + let titleLabel = UILabel.init(frame: CGRectMake(0, topNavView.height - get_system_nav_ui_height(), topNavView.frame.size.width, get_system_nav_ui_height()))
  143 + titleLabel.textColor = HexColor("#333333")
  144 + titleLabel.font = Font_18_Fit
  145 + titleLabel.textAlignment = .center
  146 + titleLabel.text = title
  147 + return titleLabel
  148 + }()
30 149  
  150 + public lazy var topLine: UIImageView = {
  151 + let topLine = UIImageView.init(frame: CGRect(x: 0, y: topNavView.height - 1, width: view.width, height: 1))
  152 + topLine.backgroundColor = .clear
  153 + return topLine
  154 + }()
  155 +
  156 + // MARK: - iOS 适配
31 157 func configIOS11() {
32 158 /// 适配 iOS 11.0 ,iOS11以后,控制器的automaticallyAdjustsScrollViewInsets已经废弃,所以默认就会是YES
33 159 /// iOS 11新增:adjustContentInset 和 contentInsetAdjustmentBehavior 来处理滚动区域
... ... @@ -52,5 +178,25 @@ class CNLiveBaseViewController: UIViewController {
52 178 UITableView.appearance().sectionHeaderTopPadding = 0
53 179 }
54 180 }
  181 +
  182 + func initBaseUI() -> Void {
  183 + self.topNavViewHeight = get_system_nav_height()
  184 +
  185 + view.addSubview(topNavView)
  186 + topNavView.addSubview(titleLabel)
  187 + topNavView.addSubview(topLine)
  188 +
  189 + //先设置一个默认返回按钮
  190 + let leftBtn_array : Array<UIButton> = [UIButton.backItem(imageName: "main_navi_left_icon_back", target: self, action: #selector(ClickBackBtn))]
  191 + leftNavBtns = leftBtn_array
  192 + }
  193 +
  194 + @objc func ClickBackBtn() {
  195 + self.navigationController!.popViewController(animated: true)
  196 + }
  197 +
  198 + @objc func topNavViewTap() {
  199 + UIApplication.shared.keyWindow?.endEditing(true)
  200 + }
55 201 }
56 202  
... ...
metaCode/Classes/Config/CNLiveConfigUserInfo.swift 0 → 100644
  1 +//
  2 +// CNLiveConfigUserInfo.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +import SwiftyUserDefaults
  10 +
  11 +extension DefaultsKeys {
  12 +
  13 + var userInfoKey: DefaultsKey<CNLiveLoginModel?>{
  14 + DefaultsKey.init("userInfo")
  15 + }
  16 +
  17 +}
  18 +
  19 +class UserInfoManager: NSObject {
  20 +
  21 + static let shared = UserInfoManager()
  22 +
  23 + public var is_login: Bool {
  24 + get {
  25 + return userInfo.uid.lengthOfBytes(using: .utf8) > 0
  26 + }
  27 + }
  28 +
  29 + fileprivate var _userInfo : CNLiveLoginModel?
  30 + private(set) var userInfo: CNLiveLoginModel {
  31 +
  32 + set {
  33 + _userInfo = newValue
  34 + }
  35 +
  36 + get {
  37 + if (_userInfo != nil && (_userInfo?.uid.lengthOfBytes(using: .utf8))! > 0) {
  38 + return _userInfo!
  39 + }
  40 + return readUserInfo()
  41 + }
  42 + }
  43 +
  44 + private override init() {}
  45 +
  46 + /// 缓存用户数据
  47 + /// - Parameter userInfo: 用户数据
  48 + public func cacheUserInfo(userInfo: CNLiveLoginModel) {
  49 + _userInfo = userInfo
  50 + Defaults[\.userInfoKey] = userInfo
  51 + }
  52 +
  53 + /// 读取用户数据
  54 + /// - Returns: 用户数据
  55 + public func readUserInfo() -> CNLiveLoginModel {
  56 + if (Defaults.hasKey(\.userInfoKey)) {
  57 + return Defaults[\.userInfoKey]!
  58 + }else{
  59 + return CNLiveLoginModel()
  60 + }
  61 + }
  62 +
  63 + public func clearUserInfo() {
  64 + _userInfo = nil
  65 + Defaults.remove(\.userInfoKey)
  66 + }
  67 +}
... ...
metaCode/Classes/Constant/CNLiveConstant.swift
... ... @@ -23,6 +23,63 @@ let KTabBarHeight = (KStatusBarHeight == 44 ? 83 : 49)
23 23 ///控制器背景色
24 24 let KVCBackgroupColor = UIColor("#F9F9F9")
25 25  
  26 +/**
  27 + 判断是否是iPhone X系列
  28 + */
  29 +public func is_iPhoneX_series() -> Bool {
  30 + var iPhoneXSeries: Bool = false
  31 + if (UIDevice.current.userInterfaceIdiom != .phone) {
  32 + return iPhoneXSeries
  33 + }
  34 + let window = UIApplication.shared.delegate?.window!!
  35 + if (window?.safeAreaInsets.bottom ?? 0.0 > 0.0) {
  36 + iPhoneXSeries = false;
  37 + }
  38 + return iPhoneXSeries;
  39 +}
  40 +
  41 +/**
  42 + 获取系统状态栏高度
  43 + */
  44 +public func get_system_statusBar_height() -> CGFloat {
  45 + return is_iPhoneX_series() ? 44 : 20;
  46 +}
  47 +
  48 +/**
  49 + 获取系统导航高度
  50 + */
  51 +public func get_system_nav_height() -> CGFloat {
  52 + return is_iPhoneX_series() ? (44.0 + 44.0) : 64;
  53 +}
  54 +
  55 +/**
  56 + 获取系统导航UI高度
  57 + */
  58 +public func get_system_nav_ui_height() -> CGFloat {
  59 + return get_system_nav_height() - get_system_statusBar_height();
  60 +}
  61 +
  62 +/**
  63 + 获取系统tabbar高度
  64 + */
  65 +public func get_system_tabbar_height() -> CGFloat {
  66 + return is_iPhoneX_series() ? 83.0 : 49.0;
  67 +}
  68 +
  69 +/**
  70 + 获取系统tabbarUI高度
  71 + */
  72 +public func get_system_tabbar_ui_height() -> CGFloat {
  73 + return 49.0;
  74 +}
  75 +
  76 +/**
  77 + 获取系统tabbarUI增加的高度 (因iPhoneX系列底部有安全区域增加的高度)
  78 + */
  79 +public func get_system_tabbar_ui_offsetHeight() -> CGFloat {
  80 + return get_system_tabbar_height() - get_system_tabbar_ui_height();
  81 +}
  82 +
26 83  
27 84  
28 85  
... ...
metaCode/Classes/Constant/CNLiveHotButton.swift 0 → 100644
  1 +//
  2 +// CNLiveHotButton.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class HotButton : UIButton {
  11 +
  12 + override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
  13 + var bounds = self.bounds
  14 + //若原热区小于64x64,则放大热区,否则保持原大小不变
  15 + let width = max(64.0 - bounds.size.width, 0)
  16 + let height = max(64.0 - bounds.size.height, 0)
  17 + bounds = CGRectInset(bounds, -0.5*width, -0.5*height)
  18 + return CGRectContainsPoint(bounds, point)
  19 + }
  20 +}
... ...
metaCode/Classes/Extensions/NSString+CNLiveExtensions.swift 0 → 100644
  1 +//
  2 +// NSString+CNLiveExtensions.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +extension NSString {
  11 +
  12 + /// 判断是不是纯数字
  13 + /// - Parameter string: 字符串
  14 + /// - Returns: 结果
  15 + @discardableResult
  16 + func isPurnInt() -> Bool {
  17 + let scan: Scanner = Scanner(string: self as String)
  18 + var val:Int = 0
  19 + return scan.scanInt(&val) && scan.isAtEnd
  20 + }
  21 +}
... ...
metaCode/Classes/Extensions/UIButton+CNLiveExtension.swift 0 → 100644
  1 +//
  2 +// UIButton+CNLiveExtension.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +extension UIButton {
  11 +
  12 + /// 根据图片生成UIBarButtonItem
  13 + static func imageItem(imageName:String,target:AnyObject,action:Selector) -> UIButton {
  14 + return customItem(title: "", titleColor: UIColor.white, imageName: imageName, target: target, action: action,contentHorizontalAlignment: .center)
  15 + }
  16 +
  17 + /// 根据文字生成UIBarButtonItem
  18 + static func textItem(title:String,titleColor:UIColor,target:AnyObject,action:Selector) -> UIButton {
  19 + return customItem(title: title, titleColor: titleColor, imageName: "", target: target, action: action,contentHorizontalAlignment: .center)
  20 + }
  21 +
  22 + /// 返回按钮 带箭头的
  23 + static func backItem(imageName:String,target:AnyObject,action:Selector) -> UIButton {
  24 + return customItem(title: "", titleColor: UIColor.white, imageName: imageName, target: target, action: action,contentHorizontalAlignment: .left,isBack: true)
  25 + }
  26 +
  27 + /// 快速初始化一个UIBarButtonItem,内部是按钮
  28 + static func customItem(title:String,titleColor:UIColor,imageName:String,target:AnyObject,action:Selector,
  29 + contentHorizontalAlignment:UIControl.ContentHorizontalAlignment,isBack:Bool=false) -> UIButton {
  30 + let button = UIButton()
  31 + if (title.count>0) {
  32 + button.setTitle(title, for: .normal)
  33 + button.titleLabel?.font = UIFont.systemFont(ofSize: 16)
  34 + }
  35 + if (imageName.count>0) {
  36 + button.setImage(UIImage(named: imageName), for: .normal)
  37 + button.setImage(UIImage(named: imageName), for: .highlighted)
  38 + }
  39 + button.setTitleColor(titleColor, for: .normal)
  40 + button.setTitleColor(titleColor.withAlphaComponent(0.5), for: .highlighted)
  41 + button.setTitleColor(titleColor.withAlphaComponent(0.5), for: .disabled)
  42 + button.addTarget(target, action: action, for: .touchUpInside)
  43 + if (isBack) {
  44 + button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
  45 + } else {
  46 + button.sizeToFit()
  47 + }
  48 + button.contentHorizontalAlignment = contentHorizontalAlignment;
  49 + return button
  50 + }
  51 +}
... ...
metaCode/Classes/Main/LoginPage/Controller/CNLiveLoginViewController.swift
... ... @@ -32,15 +32,49 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
32 32 return areaButton
33 33 }()
34 34  
35   -
  35 + lazy var phoneText : UITextField = {
  36 + let phoneText = UITextField.init()
  37 + phoneText.backgroundColor = .white
  38 + phoneText.placeholder = "输入手机号"
  39 + phoneText.font = BoldFont_16_Fit
  40 + phoneText.keyboardType = .numberPad
  41 + phoneText.clearButtonMode = .whileEditing
  42 + return phoneText
  43 + }()
  44 +
  45 + lazy var veriText: UITextField = {
  46 + let veriText = UITextField.init()
  47 + veriText.backgroundColor = .white
  48 + veriText.placeholder = "输入验证码"
  49 + veriText.font = BoldFont_16_Fit
  50 + veriText.keyboardType = .numberPad
  51 + veriText.clearButtonMode = .whileEditing
  52 + return veriText
  53 + }()
36 54  
37   - var phoneText = UITextField()//手机号
38   - var veriText = UITextField()//验证码
  55 + lazy var loginButton: UIButton = {
  56 + let loginButton = UIButton(type: .custom)
  57 + loginButton.setTitle("登 陆", for: .normal)
  58 + loginButton.setTitleColor(.white, for: .normal)
  59 + loginButton.titleLabel?.font = BoldFont_16_Fit
  60 + loginButton.layer.cornerRadius = 20
  61 + loginButton.layer.masksToBounds = true
  62 + loginButton.addTarget(self, action: #selector(sendLoginActionMothod), for: .touchUpInside)
  63 + return loginButton
  64 + }()
39 65  
  66 + var is_agree : Bool = false //是否同意协议
  67 + var country : String = "86"
40 68 var timeOut = 30//多少秒计时器
41 69  
  70 +
  71 + override func viewDidAppear(_ animated: Bool) {
  72 + LoginAuthInfoView.showAuthView()
  73 + }
  74 +
42 75 override func viewDidLoad() {
43 76 super.viewDidLoad()
  77 + setNeedsStatusBarAppearanceUpdate()
44 78  
45 79 //添加主视图
46 80 self.view.addSubview(self.headerView)
... ... @@ -59,14 +93,17 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
59 93 print("已经销毁了")
60 94 }
61 95  
  96 + override var preferredStatusBarStyle: UIStatusBarStyle {
  97 + return .lightContent
  98 + }
62 99  
63 100 func setupPhoneView() {
64 101  
65 102 let phoneV = UIView.init()
66 103 phoneV.backgroundColor = .white
67   - self.view.addSubview(phoneV)
  104 + view.addSubview(phoneV)
68 105 phoneV.snp.makeConstraints { make in
69   - make.left.right.equalTo(self.view)
  106 + make.left.right.equalToSuperview()
70 107 make.top.equalTo(self.headerView.snp.bottom).offset(10)
71 108 make.height.equalTo(50)
72 109 }
... ... @@ -98,14 +135,8 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
98 135 make.bottom.equalTo(phoneV.snp.bottom).offset(-1)
99 136 }
100 137  
101   - self.phoneText = UITextField.init()
102   - self.phoneText.backgroundColor = .white
103   - self.phoneText.placeholder = "输入手机号"
104   - self.phoneText.font = BoldFont_16_Fit
105   - self.phoneText.keyboardType = .numberPad
106   - self.phoneText.clearButtonMode = .whileEditing
107   - phoneV.addSubview(self.phoneText)
108   - self.phoneText.snp.makeConstraints { make in
  138 + phoneV.addSubview(phoneText)
  139 + phoneText.snp.makeConstraints { make in
109 140 make.centerY.equalTo(phoneV)
110 141 make.left.equalTo(areaButton.snp.right).offset(21)
111 142 make.height.equalTo(areaButton.snp.height)
... ... @@ -149,14 +180,8 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
149 180 make.width.lessThanOrEqualTo(100)
150 181 }
151 182  
152   - self.veriText = UITextField.init()
153   - self.veriText.backgroundColor = .white
154   - self.veriText.placeholder = "输入验证码"
155   - self.veriText.font = BoldFont_16_Fit
156   - self.veriText.keyboardType = .numberPad
157   - self.veriText.clearButtonMode = .whileEditing
158   - verView.addSubview(self.veriText)
159   - self.veriText.snp.makeConstraints { make in
  183 + verView.addSubview(veriText)
  184 + veriText.snp.makeConstraints { make in
160 185 make.centerY.equalTo(verView)
161 186 make.right.equalTo(codeButton.snp.left).offset(-20)
162 187 make.height.equalTo(codeButton.snp.height)
... ... @@ -178,7 +203,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
178 203  
179 204 func setupLoginButtonView() {
180 205  
181   - let selectButton = UIButton(type: .custom)
  206 + let selectButton = HotButton(type: .custom)
182 207 selectButton.backgroundColor = .white
183 208 selectButton.setImage(UIImage(named: "Login_body_choose_btn_nomal"), for: .normal)
184 209 selectButton.setImage(UIImage(named: "Login_body_choose_btn_nomal"), for: .highlighted)
... ... @@ -211,12 +236,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
211 236 make.right.equalTo(view.snp.right).offset(-25)
212 237 }
213 238  
214   - let loginButton = UIButton(type: .custom)
215   - loginButton.setTitle("登 陆", for: .normal)
216   - loginButton.setTitleColor(.white, for: .normal)
217   - loginButton.titleLabel?.font = BoldFont_16_Fit
218   - loginButton.layer.cornerRadius = 20
219   - loginButton.layer.masksToBounds = true
  239 +
220 240 view.addSubview(loginButton)
221 241 loginButton.snp.makeConstraints { make in
222 242 make.centerX.equalTo(view)
... ... @@ -225,9 +245,7 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
225 245 make.right.equalTo(-40)
226 246 make.height.equalTo(40)
227 247 }
228   - loginButton.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))
229   -
230   -
  248 + loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
231 249 }
232 250 }
233 251  
... ... @@ -235,12 +253,55 @@ extension CNLiveLoginViewController {
235 253  
236 254 @objc func changeCityNumberMothod(sender : UIButton) {
237 255 CNLiveLoginPickerView.showSelectView { [self] text in
  256 + country = text
238 257 areaButton.setTitle("+\(text)", for: .normal)
239 258 areaButton.setTitle("+\(text)", for: .highlighted)
240 259 }
241 260 }
242 261  
243 262 @objc func sendVerifiCodeMothod(sender : UIButton) {
  263 + view.endEditing(true)
  264 + CNLiveLoginViewModel.requestVerCodeAction(phone: phoneText.text ?? "", code: country) { [self] in
  265 + setupCountdownAction(sender: sender)
  266 + }
  267 + }
  268 +
  269 + @objc func changeSelectBtnMothod(sender : UIButton) {
  270 + sender.isSelected = !sender.isSelected
  271 + is_agree = sender.isSelected
  272 + if is_agree {
  273 + loginButton.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))
  274 + } else {
  275 + loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
  276 + }
  277 + }
  278 +
  279 + @objc func sendLoginActionMothod(sender : UIButton) {
  280 + if !is_agree {
  281 + tip.showMessage(message: "请先阅读并同意协议")
  282 + return
  283 + }
  284 + view.endEditing(true)
  285 + CNLiveLoginViewModel.requestLoginAction(userName: phoneText.text ?? "", countryCode: country, verCode: veriText.text ?? "") {
  286 + let window = UIApplication.shared.delegate?.window
  287 + window??.rootViewController = CNLiveBaseTabBarViewController.init()
  288 + }
  289 + }
  290 +
  291 + @objc func pushAgreeActionMothod() {
  292 + tip.showMessage(message: "APP用户服务协议")
  293 + }
  294 +
  295 + @objc func pushInfoActionMothod() {
  296 + tip.showMessage(message: "个人信息保护政策")
  297 + }
  298 +}
  299 +
  300 +extension CNLiveLoginViewController {
  301 +
  302 + /// 设置发送验证码按钮
  303 + /// - Parameter sender: 按钮
  304 + private func setupCountdownAction(sender : UIButton) {
244 305 var timeOut = self.timeOut
245 306 let queue: DispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default)
246 307 let _timer: DispatchSource = DispatchSource.makeTimerSource(flags: [], queue: queue) as! DispatchSource
... ... @@ -265,22 +326,6 @@ extension CNLiveLoginViewController {
265 326 })
266 327 _timer.resume()
267 328 }
268   -
269   - @objc func changeSelectBtnMothod(sender : UIButton) {
270   - sender.isSelected = !sender.isSelected
271   - }
272   -
273   - @objc func sendLoginActionMothod(sender : UIButton) {
274   -
275   - }
276   -
277   - @objc func pushAgreeActionMothod() {
278   -
279   - }
280   -
281   - @objc func pushInfoActionMothod() {
282   -
283   - }
284 329 }
285 330  
286 331 extension CNLiveLoginViewController {
... ...
metaCode/Classes/Main/LoginPage/View/CNLiveLoginAuthView.swift 0 → 100644
  1 +//
  2 +// CNLiveLoginAuthView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class LoginAuthInfoView : UIView {
  12 +
  13 + lazy var imageView : UIImageView = {
  14 + let imageView = UIImageView.init()
  15 + imageView.contentMode = .scaleToFill
  16 + imageView.backgroundColor = .clear
  17 + imageView.isUserInteractionEnabled = true
  18 + imageView.image = UIImage(named: "login_body_show_auth_back")
  19 + return imageView
  20 + }()
  21 +
  22 + lazy var appLabel : UILabel = {
  23 + let appLabel = UILabel.init()
  24 + appLabel.text = "APP"
  25 + appLabel.textColor = .white
  26 + appLabel.backgroundColor = .black
  27 + appLabel.font = BoldFont_16_Fit
  28 + appLabel.textAlignment = .center
  29 + appLabel.layer.cornerRadius = 10
  30 + appLabel.clipsToBounds = true
  31 + return appLabel
  32 + }()
  33 +
  34 + lazy var titleLabel : UILabel = {
  35 + let titleLabel = UILabel.init()
  36 + titleLabel.text = "个人信息保护政策"
  37 + titleLabel.font = BoldFont_17_Fit
  38 + titleLabel.textAlignment = .left
  39 + titleLabel.textColor = .black
  40 + titleLabel.backgroundColor = .clear
  41 + return titleLabel
  42 + }()
  43 +
  44 + lazy var contentView : UIImageView = {
  45 + let contentView = UIImageView.init()
  46 + contentView.backgroundColor = .clear
  47 + contentView.image = UIImage(named: "login_body_show_auth_content")
  48 + contentView.contentMode = .scaleToFill
  49 + return contentView
  50 + }()
  51 +
  52 + lazy var agreeBtn: UIButton = {
  53 + let agreeBtn = UIButton.init(type: .custom)
  54 + agreeBtn.setTitle("同 意", for: .normal)
  55 + agreeBtn.titleLabel?.font = BoldFont_15_Fit
  56 + agreeBtn.layer.cornerRadius = 20
  57 + agreeBtn.layer.masksToBounds = true
  58 + agreeBtn.setTitleColor(.white, for: .normal)
  59 + agreeBtn.addTarget(self, action: #selector(agreeAction), for: .touchUpInside)
  60 + return agreeBtn
  61 + }()
  62 +
  63 + lazy var agreeNotBtn: UIButton = {
  64 + let agreeNotBtn = UIButton(type: .custom)
  65 + agreeNotBtn.setTitle("不同意", for: .normal)
  66 + agreeNotBtn.titleLabel?.font = BoldFont_15_Fit
  67 + agreeNotBtn.layer.cornerRadius = 20
  68 + agreeNotBtn.layer.masksToBounds = true
  69 + agreeNotBtn.layer.borderColor = HexColor("#979797")?.cgColor
  70 + agreeNotBtn.layer.borderWidth = 1
  71 + agreeNotBtn.setTitleColor(.black, for: .normal)
  72 + agreeNotBtn.addTarget(self, action: #selector(agreeNotAction), for: .touchUpInside)
  73 + return agreeNotBtn
  74 + }()
  75 +
  76 +
  77 + static func showAuthView() {
  78 + let authView = LoginAuthInfoView()
  79 +
  80 + let window = UIApplication.shared.windows.last
  81 + window?.addSubview(authView)
  82 + authView.snp.makeConstraints { make in
  83 + make.edges.equalToSuperview()
  84 + }
  85 + window?.layoutIfNeeded()
  86 + authView.alpha = 0
  87 + UIView.animate(withDuration: 0.1) {
  88 + authView.alpha = 1
  89 + } completion: { _ in
  90 + authView.layoutIfNeeded()
  91 + }
  92 + }
  93 +
  94 +
  95 + override init(frame: CGRect) {
  96 + super.init(frame: frame)
  97 + self.backgroundColor = UIColor.black.withAlphaComponent(0.2)
  98 +
  99 + addSubview(imageView)
  100 + imageView.addSubview(appLabel)
  101 + imageView.addSubview(titleLabel)
  102 + imageView.addSubview(contentView)
  103 + imageView.addSubview(agreeBtn)
  104 + imageView.addSubview(agreeNotBtn)
  105 +
  106 + setupConstraints()
  107 + agreeBtn.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))
  108 + }
  109 +
  110 + required init?(coder: NSCoder) {
  111 + fatalError("init(coder:) has not been implemented")
  112 + }
  113 +
  114 + private func setupConstraints() {
  115 + imageView.snp.makeConstraints { make in
  116 + make.center.equalToSuperview()
  117 + make.left.equalToSuperview().offset(30)
  118 + make.right.equalToSuperview().offset(-30)
  119 + make.height.equalTo(420)
  120 + }
  121 + appLabel.snp.makeConstraints { make in
  122 + make.top.equalToSuperview().offset(20)
  123 + make.left.equalToSuperview().offset(20)
  124 + make.height.equalTo(20)
  125 + make.width.equalTo(45)
  126 + }
  127 + titleLabel.snp.makeConstraints { make in
  128 + make.top.equalTo(appLabel.snp.bottom).offset(10)
  129 + make.left.equalToSuperview().offset(20)
  130 + }
  131 + contentView.snp.makeConstraints { make in
  132 + make.centerX.equalToSuperview()
  133 + make.top.equalTo(titleLabel.snp.bottom).offset(20)
  134 + make.left.equalToSuperview().offset(20)
  135 + make.right.equalToSuperview().offset(-20)
  136 + }
  137 + agreeBtn.snp.makeConstraints { make in
  138 + make.right.equalTo(imageView.snp.right).offset(-20)
  139 + make.bottom.equalTo(imageView.snp.bottom).offset(-20)
  140 + make.width.equalTo((KSreenWidth - 140) * 0.6)
  141 + make.height.equalTo(40)
  142 + }
  143 + agreeNotBtn.snp.makeConstraints { make in
  144 + make.centerY.equalTo(agreeBtn)
  145 + make.left.equalToSuperview().offset(20)
  146 + make.width.equalTo((KSreenWidth - 140) * 0.4)
  147 + make.height.equalTo(40)
  148 + }
  149 + }
  150 +
  151 + deinit {
  152 +
  153 + }
  154 +
  155 + @objc func agreeNotAction() {
  156 + removeFromSuperview()
  157 + LoginAuthPollicyView.showAuthView()
  158 + }
  159 +
  160 + @objc func agreeAction() {
  161 + removeFromSuperview()
  162 + }
  163 +
  164 +}
  165 +
  166 +
  167 +class LoginAuthPollicyView : UIView {
  168 +
  169 + lazy var backView: UIView = {
  170 + let backView = UIView.init()
  171 + backView.backgroundColor = HexColor("#F4F7FE")
  172 + backView.layer.cornerRadius = 8
  173 + backView.isUserInteractionEnabled = true
  174 + backView.layer.masksToBounds = true
  175 + return backView
  176 + }()
  177 +
  178 + lazy var titleLabel : UILabel = {
  179 + let titleLabel = UILabel.init()
  180 + titleLabel.text = "需要同意政策才能继续使用"
  181 + titleLabel.font = BoldFont_17_Fit
  182 + titleLabel.textAlignment = .center
  183 + titleLabel.textColor = .black
  184 + titleLabel.backgroundColor = .clear
  185 + return titleLabel
  186 + }()
  187 +
  188 + lazy var contentView : UIImageView = {
  189 + let contentView = UIImageView.init()
  190 + contentView.backgroundColor = .clear
  191 + contentView.image = UIImage(named: "login_body_show_auth_policy")
  192 + contentView.contentMode = .scaleToFill
  193 + return contentView
  194 + }()
  195 +
  196 + lazy var agreeBtn: UIButton = {
  197 + let agreeBtn = UIButton.init(type: .custom)
  198 + agreeBtn.setTitle("再次查看", for: .normal)
  199 + agreeBtn.titleLabel?.font = BoldFont_15_Fit
  200 + agreeBtn.layer.cornerRadius = 20
  201 + agreeBtn.layer.masksToBounds = true
  202 + agreeBtn.setTitleColor(.white, for: .normal)
  203 + agreeBtn.addTarget(self, action: #selector(agreeAction), for: .touchUpInside)
  204 + return agreeBtn
  205 + }()
  206 +
  207 + lazy var agreeNotBtn: UIButton = {
  208 + let agreeNotBtn = UIButton(type: .custom)
  209 + agreeNotBtn.setTitle("退出应用", for: .normal)
  210 + agreeNotBtn.titleLabel?.font = BoldFont_15_Fit
  211 + agreeNotBtn.layer.cornerRadius = 20
  212 + agreeNotBtn.layer.masksToBounds = true
  213 + agreeNotBtn.layer.borderColor = HexColor("#979797")?.cgColor
  214 + agreeNotBtn.layer.borderWidth = 1
  215 + agreeNotBtn.setTitleColor(.black, for: .normal)
  216 + agreeNotBtn.addTarget(self, action: #selector(agreeNotAction), for: .touchUpInside)
  217 + return agreeNotBtn
  218 + }()
  219 +
  220 + static func showAuthView() {
  221 + let authView = LoginAuthPollicyView.init()
  222 +
  223 + let window = UIApplication.shared.windows.last
  224 + window?.addSubview(authView)
  225 + authView.snp.makeConstraints { make in
  226 + make.edges.equalToSuperview()
  227 + }
  228 + window?.layoutIfNeeded()
  229 + authView.alpha = 0
  230 + UIView.animate(withDuration: 0.1) {
  231 + authView.alpha = 1
  232 + } completion: { _ in
  233 +
  234 + }
  235 + }
  236 +
  237 + override init(frame: CGRect) {
  238 + super.init(frame: frame)
  239 + self.backgroundColor = UIColor.black.withAlphaComponent(0.2)
  240 +
  241 + addSubview(backView)
  242 + backView.addSubview(titleLabel)
  243 + backView.addSubview(contentView)
  244 + backView.addSubview(agreeBtn)
  245 + backView.addSubview(agreeNotBtn)
  246 +
  247 + setupConstraints()
  248 + agreeBtn.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))
  249 + }
  250 +
  251 + required init?(coder: NSCoder) {
  252 + fatalError("init(coder:) has not been implemented")
  253 + }
  254 +
  255 + private func setupConstraints() {
  256 + backView.snp.makeConstraints { make in
  257 + make.center.equalToSuperview()
  258 + make.left.equalToSuperview().offset(30)
  259 + make.right.equalToSuperview().offset(-30)
  260 + make.height.equalTo((KSreenWidth - 60) * 0.7)
  261 + }
  262 + titleLabel.snp.makeConstraints { make in
  263 + make.top.equalToSuperview().offset(20)
  264 + make.centerX.equalToSuperview()
  265 + }
  266 + contentView.snp.makeConstraints { make in
  267 + make.centerX.equalToSuperview()
  268 + make.top.equalTo(titleLabel.snp.bottom).offset(20)
  269 + make.left.equalToSuperview().offset(20)
  270 + make.right.equalToSuperview().offset(-20)
  271 + }
  272 + agreeBtn.snp.makeConstraints { make in
  273 + make.right.equalTo(backView.snp.right).offset(-20)
  274 + make.bottom.equalTo(backView.snp.bottom).offset(-20)
  275 + make.width.equalTo((KSreenWidth - 140) * 0.6)
  276 + make.height.equalTo(40)
  277 + }
  278 + agreeNotBtn.snp.makeConstraints { make in
  279 + make.centerY.equalTo(agreeBtn)
  280 + make.left.equalToSuperview().offset(20)
  281 + make.width.equalTo((KSreenWidth - 140) * 0.4)
  282 + make.height.equalTo(40)
  283 + }
  284 + }
  285 +
  286 + deinit {
  287 +
  288 + }
  289 +
  290 + @objc func agreeNotAction() {
  291 + //退出应用
  292 + UIControl().sendAction(#selector(NSXPCConnection.suspend), to: UIApplication.shared, for: nil)
  293 + }
  294 +
  295 + @objc func agreeAction() {
  296 + removeFromSuperview()
  297 + LoginAuthInfoView.showAuthView()
  298 + }
  299 +
  300 +}
... ...
metaCode/Classes/Main/LoginPage/ViewModel/CNLiveLoginModel.swift 0 → 100644
  1 +//
  2 +// CNLiveLoginModel.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +import HandyJSON
  10 +import SwiftyUserDefaults
  11 +
  12 +class CNLiveLoginModel : HandyJSON, DefaultsSerializable, Codable {
  13 +
  14 +
  15 + required init() {}
  16 +
  17 + var appId:String = ""
  18 + var appleUid:String = ""
  19 + var bigFaceUrl:String = ""
  20 + var birthday:String = ""
  21 + var countryCode:String = ""
  22 + var email:String = ""
  23 + var extInfo:String = ""
  24 + var faceUrl:String = ""
  25 + var frmId:String = ""
  26 + var gender:String = ""
  27 + var hUid:String = ""
  28 + var isNewUser:String = ""
  29 + var location:String = ""
  30 + var mobile:String = ""
  31 + var newAccount:String = ""
  32 + var nickName:String = ""
  33 + var platformId:String = ""
  34 + var qqUid:String = ""
  35 + var renrenUid:String = ""
  36 + var sinaUid:String = ""
  37 + var token:String = ""
  38 + var uid:String = ""
  39 + var wxUid:String = ""
  40 +
  41 +
  42 +}
... ...
metaCode/Classes/Main/LoginPage/ViewModel/CNLiveLoginViewModel.swift
... ... @@ -6,14 +6,99 @@
6 6 //
7 7  
8 8 import Foundation
  9 +import YYCategories
  10 +import HandyJSON
9 11 import CNLiveRequestBastKit
  12 +import SwiftyUserDefaults
  13 +
  14 +//验证码发送成功回调
  15 +typealias resultCodeBlock = () -> Void
  16 +//登陆成功回调
  17 +typealias resultLoginBlock = () -> Void
10 18  
11 19 class CNLiveLoginViewModel : NSObject {
12 20  
13   - static func requestVerCodeAction(phone: String) {
14   -
  21 + static func requestVerCodeAction(phone: String, code: String, resultBlock: @escaping resultCodeBlock) {
15 22  
  23 + if !phone.isNotBlank() {
  24 + tip.showMessage(message: "请输入手机号")
  25 + return
  26 + }
  27 + if phone.lengthOfBytes(using: .utf8) >= 20 {
  28 + tip.showMessage(message: "手机号格式不正确")
  29 + return
  30 + }
  31 + if !phone.isPurnInt() {
  32 + tip.showMessage(message: "手机号格式不正确")
  33 + return
  34 + }
  35 + tip.showLoading(message: "")
  36 + let param = ["mobile":phone,"countryCode":code]
  37 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  38 + CNLiveNetworking.setupShowDataResult(false)
  39 + CNLiveNetworking.requestNetwork(with: .POST, urlString: "/open/api2/user/sendVerifyCode", param: param, cacheType: .networkOnly) { task, result, error in
  40 + tip.hiddenLoading()
  41 + if (error == nil) {
  42 + let resp = result as! NSDictionary
  43 + let errorCode = resp["errorCode"]
  44 + if (errorCode as! String == "0") {
  45 + tip.showMessage(message: "验证码已发送")
  46 + resultBlock()
  47 + } else {
  48 + tip.showMessage(message: resp["errorMessage"] as! String)
  49 + }
  50 + } else{
  51 + tip.showMessage(message: "获取验证码失败")
  52 + }
  53 + }
  54 + }
  55 +
  56 + static func requestLoginAction(userName: String, countryCode: String, verCode: String, resultBlock: @escaping resultLoginBlock) {
  57 + if !userName.isNotBlank() {
  58 + tip.showMessage(message: "请输入手机号")
  59 + return
  60 + }
  61 + if userName.lengthOfBytes(using: .utf8) >= 20 {
  62 + tip.showMessage(message: "手机号格式不正确")
  63 + return
  64 + }
  65 + if !userName.isPurnInt() {
  66 + tip.showMessage(message: "手机号格式不正确")
  67 + return
  68 + }
  69 + if !verCode.isNotBlank() {
  70 + tip.showMessage(message: "请输入验证码")
  71 + return
  72 + }
  73 + if verCode.lengthOfBytes(using: .utf8) >= 20 {
  74 + tip.showMessage(message: "验证码格式不正确")
  75 + return
  76 + }
  77 + if !verCode.isPurnInt() {
  78 + tip.showMessage(message: "验证码格式不正确")
  79 + return
  80 + }
16 81  
17   -// CNLiveNetworking.requestNetwork(with: .POST, urlString: "/user/sendVerifyCode", param: <#T##[AnyHashable : Any]!#>, cacheType: <#T##CNLiveNetworkCacheType#>, completionBlock: <#T##CNLiveNetworkCompletionBlock!##CNLiveNetworkCompletionBlock!##(URLSessionTask?, Any?, Error?) -> Void#>)
  82 + tip.showLoading(message: "")
  83 + let param = ["userName":userName,"countryCode":countryCode,"verificationCode":verCode,"inviterId":""]
  84 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  85 + CNLiveNetworking.setupShowDataResult(false)
  86 + CNLiveNetworking.requestNetwork(with: .POST, urlString: "/open/api2/user/loginInMetaCode", param: param, cacheType: .networkOnly) { task, result, error in
  87 + tip.hiddenLoading()
  88 + if (error == nil) {
  89 + let resp = result as! NSDictionary
  90 + let errorCode = resp["errorCode"]
  91 + if (errorCode as! String == "0") {
  92 + if let res = JSONDeserializer<CNLiveLoginModel>.deserializeFrom(dict: resp, designatedPath: "data") {
  93 + Defaults.userInfoKey = res
  94 + resultBlock()
  95 + }
  96 + } else {
  97 + tip.showMessage(message: resp["errorMessage"] as! String)
  98 + }
  99 + } else {
  100 + tip.showMessage(message: "登陆失败")
  101 + }
  102 + }
18 103 }
19 104 }
... ...
metaCode/Classes/Main/MinePage/Controller/CNLiveMineAddInfoViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveMineAddInfoViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class CNLiveMineAddInfoViewController : CNLiveBaseViewController {
  12 +
  13 +
  14 + override func viewDidLoad() {
  15 + super.viewDidLoad()
  16 + view.backgroundColor = HexColor("#f9f9f9")
  17 +
  18 + self.titleName = "添加身份"
  19 +
  20 + }
  21 +
  22 +}
... ...
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveMineViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/6.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class CNLiveMineViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource{
  12 +
  13 + let kCNLiveMineOneViewCellIdentifier = "kCNLiveMineOneViewCellIdentifier"
  14 + let kCNLiveMineTwoViewCellIdentifier = "kCNLiveMineTwoViewCellIdentifier"
  15 + lazy var tableView : UITableView = {
  16 + let tableView = UITableView(frame: .zero, style: .grouped)
  17 + tableView.dataSource = self
  18 + tableView.delegate = self
  19 + tableView.backgroundColor = .clear
  20 + tableView.tableFooterView = UIView.init()
  21 + tableView.separatorStyle = .none
  22 + tableView.register(MineBodyOneListViewCell.self, forCellReuseIdentifier: kCNLiveMineOneViewCellIdentifier)
  23 + tableView.register(MineBodyTwoListViewCell.self, forCellReuseIdentifier: kCNLiveMineTwoViewCellIdentifier)
  24 + return tableView
  25 + }()
  26 +
  27 + lazy var mainView: UIImageView = {
  28 + let mainView = UIImageView.init()
  29 + mainView.backgroundColor = .clear
  30 + mainView.image = UIImage(named: "mine_header_icon_back")
  31 + mainView.contentMode = .scaleAspectFill
  32 + return mainView
  33 + }()
  34 +
  35 + lazy var dataArray: NSMutableArray = {
  36 + let dataArray = NSMutableArray()
  37 + let array00 : [Dictionary] = [["name":"我的身份","icon":"mine_header_icon_identity"]]
  38 + dataArray.add(array00)
  39 + let array01 : [Dictionary] = [["name":"添加身份","icon":"mine_list_icon_add_identity"]]
  40 + dataArray.add(array01)
  41 + let array02 : [Dictionary] = [["name":"帮助与反馈","icon":"mine_list_icon_help_feedback"],
  42 + ["name":"更多设置","icon":"mine_list_icon_set_more"]]
  43 + dataArray.add(array02)
  44 + return dataArray
  45 + }()
  46 +
  47 + override func viewDidLoad() {
  48 + super.viewDidLoad()
  49 + view.backgroundColor = HexColor("#f9f9f9")
  50 + setNeedsStatusBarAppearanceUpdate()
  51 +
  52 + view.addSubview(mainView)
  53 + mainView.snp.makeConstraints { make in
  54 + make.left.top.right.equalToSuperview()
  55 + make.height.equalTo(KSreenHeight * 0.4)
  56 + }
  57 +
  58 + view.addSubview(tableView)
  59 + tableView.snp.makeConstraints { make in
  60 + make.edges.equalToSuperview()
  61 + }
  62 + }
  63 +
  64 + override var preferredStatusBarStyle: UIStatusBarStyle {
  65 + return .lightContent
  66 + }
  67 +
  68 + deinit {
  69 +
  70 + }
  71 +}
  72 +
  73 +extension CNLiveMineViewController {
  74 +
  75 + func numberOfSections(in tableView: UITableView) -> Int {
  76 + return dataArray.count
  77 + }
  78 +
  79 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  80 + return (dataArray[section] as AnyObject).count
  81 + }
  82 +
  83 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  84 +
  85 + if indexPath.section == 0 {
  86 + let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineOneViewCellIdentifier) as! MineBodyOneListViewCell
  87 + return cell
  88 + }
  89 + let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveMineTwoViewCellIdentifier) as! MineBodyTwoListViewCell
  90 + let array = dataArray[indexPath.section]
  91 + let sub_dict = (array as! Array<Any>)[indexPath.row]
  92 + cell.setupWithDataSource(dict: sub_dict as! Dictionary<String, Any>)
  93 + return cell
  94 +
  95 + }
  96 +
  97 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  98 + if indexPath.section == 0 {
  99 + return 120
  100 + }
  101 + return 60
  102 + }
  103 +
  104 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  105 + if indexPath.section == 1 {
  106 + let infoVC = CNLiveMineAddInfoViewController.init()
  107 + infoVC.hidesBottomBarWhenPushed = true;
  108 + self.navigationController?.pushViewController(infoVC, animated: true)
  109 + }
  110 + }
  111 +
  112 + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  113 + if section == 0 {
  114 + return 150
  115 + }
  116 + return 0.001
  117 +
  118 + }
  119 +
  120 + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  121 + if section == 0 {
  122 + let headerView = MineHeaderView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 80))
  123 + return headerView
  124 + }
  125 + return UIView.init()
  126 +
  127 + }
  128 +
  129 + func scrollViewDidScroll(_ scrollView: UIScrollView) {
  130 + let offsetY = scrollView.contentOffset.y
  131 + mainView.height = offsetY < 0 ? (KSreenHeight * 0.4) + abs(offsetY) : KSreenHeight * 0.4;
  132 + }
  133 +
  134 +
  135 +}
  136 +
... ...
metaCode/Classes/Main/MinePage/Controller/CNMineViewController.swift deleted 100644 → 0
1   -//
2   -// CNMineViewController.swift
3   -// metaCode
4   -//
5   -// Created by iOS on 2023/5/30.
6   -//
7   -
8   -import UIKit
9   -import CNLiveRequestBastKit
10   -
11   -class CNMineViewController: CNLiveBaseViewController {
12   -
13   - override func viewDidLoad() {
14   - super.viewDidLoad()
15   - // Do any additional setup after loading the view.
16   -
17   - self.view.backgroundColor = KVCBackgroupColor
18   -
19   -
20   - let button = UIButton()
21   - button.frame = CGRect(x: 100, y: 100, width: 100, height: 40)
22   - button.setTitle("请求吧", for: .normal)
23   - button.setTitle("请求吧", for: .highlighted)
24   - button.backgroundColor = UIColor.red
25   - button.setTitleColor(UIColor.gray, for: .normal)
26   - button.addTarget(self, action: #selector(touchButton), for: .touchUpInside)
27   - button.sizeToFit()
28   - self.view.addSubview(button)
29   -
30   - let button_sha = UIButton()
31   - button_sha.frame = CGRect(x: 100, y: 200, width: 100, height: 40)
32   - button_sha.setTitle("验证码", for: .normal)
33   - button_sha.setTitle("验证码", for: .highlighted)
34   - button_sha.backgroundColor = UIColor.red
35   - button_sha.setTitleColor(UIColor.gray, for: .normal)
36   - button_sha.addTarget(self, action: #selector(shaButton), for: .touchUpInside)
37   - button_sha.sizeToFit()
38   - self.view.addSubview(button_sha)
39   - }
40   -
41   - @objc func shaButton() -> Void {
42   - let param = ["mobile":"18519714533","countryCode":"86"]
43   - CNLiveNetworking.setAllowRequestDefaultArgument(true)
44   - CNLiveNetworking.setupShowDataResult(true)
45   - CNLiveNetworking.requestNetwork(with: .POST, urlString: "https://api.cnlive.com/open/api2/user/sendVerifyCode4server", param: param, cacheType: .networkOnly) { task, result, error in
46   - print("\(String(describing: result))")
47   - }
48   - }
49   -
50   - @objc func touchButton() {
51   - let param = ["userName":"18519714533","countryCode":"86","verificationCode":"599011","inviterId":"","ver":"1"]
52   - CNLiveNetworking.setAllowRequestDefaultArgument(true)
53   - CNLiveNetworking.setupShowDataResult(true)
54   - CNLiveNetworking.requestNetwork(with: .POST, urlString: "https://api.cnlive.com/open/api2/user/loginInMetaCode", param: param, cacheType: .networkOnly) { task, result, error in
55   - print("\(String(describing: result))")
56   - }
57   -
58   -
59   -
60   - }
61   -
62   -
63   -}
64   -
metaCode/Classes/Main/MinePage/View/CNLiveMineBodyListView.swift 0 → 100644
  1 +//
  2 +// CNLiveMineBodyListView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class MineBodyOneListViewCell : UITableViewCell {
  12 +
  13 + lazy var nameLabel: UILabel = {
  14 + let nameLabel = UILabel.init()
  15 + nameLabel.textColor = .black
  16 + nameLabel.font = BoldFont_16_Fit
  17 + nameLabel.backgroundColor = .clear
  18 + nameLabel.text = "我的身份"
  19 + return nameLabel
  20 + }()
  21 +
  22 + lazy var headerView: UIImageView = {
  23 + let headerView = UIImageView.init()
  24 + headerView.image = UIImage(named: "mine_header_icon_identity")
  25 + headerView.backgroundColor = .clear
  26 + headerView.contentMode = .scaleToFill
  27 + return headerView
  28 + }()
  29 +
  30 + lazy var mainView: UIView = {
  31 + let mainView = UIView.init()
  32 + mainView.backgroundColor = .white
  33 + mainView.layer.cornerRadius = 8
  34 + mainView.layer.masksToBounds = true
  35 + return mainView
  36 + }()
  37 +
  38 + lazy var lookBtn: UIButton = {
  39 + let lookBtn = UIButton.init(type: .custom)
  40 + lookBtn.setTitle(" 去看看 ", for: .normal)
  41 + lookBtn.setTitleColor(.white, for: .normal)
  42 + lookBtn.titleLabel?.font = BoldFont_14
  43 + lookBtn.layer.masksToBounds = true
  44 + lookBtn.layer.cornerRadius = 15
  45 + return lookBtn
  46 + }()
  47 +
  48 + lazy var tipLabel: UILabel = {
  49 + let tipLabel = UILabel.init()
  50 + tipLabel.textColor = HexColor("#999999")
  51 + tipLabel.text = "您暂未进行身份认证"
  52 + tipLabel.font = Font_13
  53 + return tipLabel
  54 + }()
  55 +
  56 +
  57 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  58 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  59 + self.selectionStyle = .none
  60 + self.backgroundColor = .clear
  61 +
  62 + addSubview(mainView)
  63 + mainView.addSubview(headerView)
  64 + headerView.addSubview(nameLabel)
  65 + mainView.addSubview(tipLabel)
  66 + mainView.addSubview(lookBtn)
  67 +
  68 + setupConstraints()
  69 + }
  70 +
  71 + required init?(coder: NSCoder) {
  72 + fatalError("init(coder:) has not been implemented")
  73 + }
  74 +
  75 + private func setupConstraints() {
  76 + mainView.snp.makeConstraints { make in
  77 + make.centerX.equalToSuperview()
  78 + make.left.equalToSuperview().offset(15)
  79 + make.right.equalToSuperview().offset(-15)
  80 + make.top.bottom.equalToSuperview()
  81 + }
  82 + headerView.snp.makeConstraints { make in
  83 + make.centerX.equalToSuperview()
  84 + make.top.left.right.equalToSuperview()
  85 + make.height.equalTo(40)
  86 + }
  87 + nameLabel.snp.makeConstraints { make in
  88 + make.centerY.equalToSuperview()
  89 + make.left.equalToSuperview().offset(15)
  90 + }
  91 + tipLabel.snp.makeConstraints { make in
  92 + make.centerY.equalToSuperview().offset(20)
  93 + make.left.equalToSuperview().offset(15)
  94 + }
  95 + lookBtn.snp.makeConstraints { make in
  96 + make.centerY.equalToSuperview().offset(20)
  97 + make.right.equalToSuperview().offset(-15)
  98 + make.width.equalTo(80)
  99 + make.height.equalTo(30)
  100 + }
  101 + lookBtn.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))
  102 + }
  103 +}
  104 +
  105 +class MineBodyTwoListViewCell : UITableViewCell {
  106 +
  107 + lazy var mainView: UIView = {
  108 + let mainView = UIView.init()
  109 + mainView.backgroundColor = .white
  110 + mainView.layer.cornerRadius = 8
  111 + mainView.layer.masksToBounds = true
  112 + return mainView
  113 + }()
  114 + lazy var nameLabel: UILabel = {
  115 + let nameLabel = UILabel.init()
  116 + nameLabel.textColor = .black
  117 + nameLabel.font = BoldFont_16_Fit
  118 + nameLabel.backgroundColor = .clear
  119 + return nameLabel
  120 + }()
  121 + lazy var headerView: UIImageView = {
  122 + let headerView = UIImageView.init()
  123 + headerView.backgroundColor = .clear
  124 + headerView.contentMode = .scaleToFill
  125 + return headerView
  126 + }()
  127 + lazy var moreBtn: UIButton = {
  128 + let moreBtn = UIButton.init(type: .custom)
  129 + moreBtn.setImage(UIImage(named: "mine_list_icon_right_more"), for: .normal)
  130 + moreBtn.layer.masksToBounds = true
  131 + moreBtn.layer.cornerRadius = 15
  132 + return moreBtn
  133 + }()
  134 +
  135 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  136 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  137 + self.selectionStyle = .none
  138 + self.backgroundColor = .clear
  139 +
  140 + addSubview(mainView)
  141 + mainView.addSubview(headerView)
  142 + headerView.addSubview(nameLabel)
  143 + mainView.addSubview(moreBtn)
  144 +
  145 + setupConstraints()
  146 +
  147 + }
  148 +
  149 + private func setupConstraints() {
  150 + mainView.snp.makeConstraints { make in
  151 + make.centerX.equalToSuperview()
  152 + make.left.equalToSuperview().offset(15)
  153 + make.right.equalToSuperview().offset(-15)
  154 + make.top.bottom.equalToSuperview()
  155 + }
  156 + headerView.snp.makeConstraints { make in
  157 + make.centerY.equalToSuperview()
  158 + make.left.equalTo(15)
  159 + make.size.equalTo(20)
  160 + }
  161 + nameLabel.snp.makeConstraints { make in
  162 + make.centerY.equalToSuperview()
  163 + make.left.equalTo(headerView.snp.right).offset(7)
  164 + }
  165 + moreBtn.snp.makeConstraints { make in
  166 + make.centerY.equalToSuperview()
  167 + make.right.equalToSuperview().offset(-15)
  168 + make.size.equalTo(30)
  169 + }
  170 + }
  171 +
  172 + public func setupWithDataSource(dict : Dictionary<String, Any>) {
  173 + headerView.image = UIImage(named: dict["icon"] as! String)
  174 + nameLabel.text = "\(dict["name"] ?? "")"
  175 + }
  176 +
  177 + required init?(coder: NSCoder) {
  178 + fatalError("init(coder:) has not been implemented")
  179 + }
  180 +}
... ...
metaCode/Classes/Main/MinePage/View/CNLiveMineHeaderView.swift 0 → 100644
  1 +//
  2 +// CNLiveMineHeaderView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/7.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +class MineHeaderView : UIView {
  12 +
  13 + lazy var iconView : UIImageView = {
  14 +
  15 + let iconView = UIImageView.init()
  16 + iconView.image = UIImage(named: "mine_header_icon_defult_ava")
  17 + iconView.backgroundColor = .clear
  18 + iconView.layer.cornerRadius = 20
  19 + iconView.layer.masksToBounds = true
  20 + iconView.contentMode = .scaleToFill
  21 + return iconView
  22 + }()
  23 +
  24 + lazy var nameLabel: UILabel = {
  25 + let nameLabel = UILabel.init()
  26 + nameLabel.text = UserInfoManager.shared.userInfo.nickName
  27 + nameLabel.textColor = .white
  28 + nameLabel.font = Font_16
  29 + return nameLabel
  30 + }()
  31 +
  32 + lazy var tipBtn: UIButton = {
  33 + let tipBtn = UIButton(type: .custom)
  34 + tipBtn.backgroundColor = .clear
  35 + tipBtn.setImage(UIImage(named: "mine_header_icon_notice"), for: .normal)
  36 + tipBtn.imageView?.contentMode = .scaleToFill
  37 + tipBtn.addTarget(self, action: #selector(tipBtnAction), for: .touchUpInside)
  38 + return tipBtn
  39 + }()
  40 +
  41 + override init(frame: CGRect) {
  42 + super.init(frame: frame)
  43 + self.backgroundColor = .clear
  44 +
  45 + addSubview(iconView)
  46 + iconView.snp.makeConstraints { make in
  47 + make.centerY.equalToSuperview().offset(10)
  48 + make.left.equalToSuperview().offset(20)
  49 + make.size.equalTo(60)
  50 + }
  51 + addSubview(nameLabel)
  52 + nameLabel.snp.makeConstraints { make in
  53 + make.centerY.equalToSuperview().offset(10)
  54 + make.left.equalTo(iconView.snp.right).offset(15)
  55 + }
  56 + addSubview(tipBtn)
  57 + tipBtn.snp.makeConstraints { make in
  58 + make.centerY.equalToSuperview().offset(10)
  59 + make.right.equalToSuperview().offset(-15)
  60 + make.size.equalTo(30)
  61 + }
  62 +
  63 + }
  64 +
  65 + required init?(coder: NSCoder) {
  66 + fatalError("init(coder:) has not been implemented")
  67 + }
  68 +
  69 + @objc func tipBtnAction() {
  70 +
  71 + }
  72 +
  73 +}
... ...
metaCode/Classes/Other/AppDelegate.swift
... ... @@ -8,6 +8,7 @@
8 8 import UIKit
9 9 import CNLiveRequestBastKit
10 10 import IQKeyboardManagerSwift
  11 +import SwiftyUserDefaults
11 12  
12 13 @main
13 14 class AppDelegate: UIResponder, UIApplicationDelegate {
... ... @@ -17,9 +18,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
17 18 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
18 19  
19 20 // Override point for customization after application launch.
  21 +
20 22 window = UIWindow.init(frame: UIScreen.main.bounds)
21 23 window?.backgroundColor = KVCBackgroupColor
22   - window?.rootViewController = CNLiveLoginViewController.init()
  24 + window?.rootViewController = UserInfoManager.shared.is_login ? CNLiveBaseTabBarViewController.init() : CNLiveLoginViewController.init()
23 25 window?.makeKeyAndVisible()
24 26  
25 27  
... ... @@ -52,7 +54,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
52 54 CNLiveNetworking.setupSignKey("ae3a7ad3e4b9beb7cfe2078db648ebb89aa249ca2e82ac")
53 55 CNLiveNetworking.setAllowRequestDefaultArgument(true)
54 56 CNLiveNetworking.setResponseSerializerType(.JSON)
55   - CNLiveNetworking.setupBaseURL("https://api.cnlive.com/open/api2")
  57 + CNLiveNetworking.setupBaseURL("https://api.cnlive.com")
56 58 }
57 59  
58 60  
... ...
metaCode/Classes/Other/CNLiveViewController.swift 0 → 100644
  1 +//
  2 +// CNLiveViewController.swift
  3 +// metaCode
  4 +//
  5 +// Created by iOS on 2023/5/30.
  6 +// 此为测试界面
  7 +
  8 +import UIKit
  9 +import CNLiveRequestBastKit
  10 +
  11 +class CNLiveViewController: CNLiveBaseViewController {
  12 +
  13 + override func viewDidLoad() {
  14 + super.viewDidLoad()
  15 + // Do any additional setup after loading the view.
  16 +
  17 + self.view.backgroundColor = KVCBackgroupColor
  18 +
  19 +
  20 + let button = UIButton()
  21 + button.frame = CGRect(x: 0, y: 100, width: KSreenWidth, height: 40)
  22 + button.setTitle("请求吧", for: .normal)
  23 + button.setTitle("请求吧", for: .highlighted)
  24 + button.backgroundColor = UIColor.red
  25 + button.setTitleColor(UIColor.gray, for: .normal)
  26 + button.addTarget(self, action: #selector(touchButton), for: .touchUpInside)
  27 + self.view.addSubview(button)
  28 +
  29 + let button_sha = UIButton()
  30 + button_sha.frame = CGRect(x: 0, y: 150, width: KSreenWidth, height: 40)
  31 + button_sha.setTitle("验证码", for: .normal)
  32 + button_sha.setTitle("验证码", for: .highlighted)
  33 + button_sha.backgroundColor = UIColor.red
  34 + button_sha.setTitleColor(UIColor.gray, for: .normal)
  35 + button_sha.addTarget(self, action: #selector(shaButton), for: .touchUpInside)
  36 + self.view.addSubview(button_sha)
  37 +
  38 + let button_q = UIButton()
  39 + button_q.frame = CGRect(x: 0, y: 200, width: KSreenWidth, height: 40)
  40 + button_q.setTitle("显示弹框", for: .normal)
  41 + button_q.setTitle("显示弹框", for: .highlighted)
  42 + button_q.backgroundColor = UIColor.red
  43 + button_q.setTitleColor(UIColor.gray, for: .normal)
  44 + button_q.addTarget(self, action: #selector(qButton), for: .touchUpInside)
  45 + self.view.addSubview(button_q)
  46 +
  47 + let button_i = UIButton()
  48 + button_i.frame = CGRect(x: 0, y: 250, width: KSreenWidth, height: 40)
  49 + button_i.setTitle("获取用户信息", for: .normal)
  50 + button_i.setTitle("获取用户信息", for: .highlighted)
  51 + button_i.backgroundColor = UIColor.red
  52 + button_i.setTitleColor(UIColor.gray, for: .normal)
  53 + button_i.addTarget(self, action: #selector(infoButton), for: .touchUpInside)
  54 + self.view.addSubview(button_i)
  55 + }
  56 +
  57 +
  58 +// override func viewDidAppear(_ animated: Bool) {
  59 +// LoginAuthInfoView.showAuthView()
  60 +// }
  61 +
  62 +
  63 + @objc func qButton() -> Void {
  64 +
  65 + LoginAuthInfoView.showAuthView()
  66 +
  67 + }
  68 + @objc func infoButton() -> Void {
  69 +// let user = UserInfoManager.shared.userInfo
  70 +// print("\(user)")
  71 + }
  72 +
  73 + @objc func shaButton() -> Void {
  74 +// let param = ["mobile":"18519714533","countryCode":"86"]
  75 +// CNLiveNetworking.setAllowRequestDefaultArgument(true)
  76 +// CNLiveNetworking.setupShowDataResult(true)
  77 +// CNLiveNetworking.requestNetwork(with: .POST, urlString: "https://api.cnlive.com/open/api2/user/sendVerifyCode4server", param: param, cacheType: .networkOnly) { task, result, error in
  78 +// print("\(String(describing: result))")
  79 +// }
  80 + }
  81 +
  82 + @objc func touchButton() {
  83 +// let param = ["userName":"18519714533","countryCode":"86","verificationCode":"599011","inviterId":"","ver":"1"]
  84 +// CNLiveNetworking.setAllowRequestDefaultArgument(true)
  85 +// CNLiveNetworking.setupShowDataResult(true)
  86 +// CNLiveNetworking.requestNetwork(with: .POST, urlString: "https://api.cnlive.com/open/api2/user/loginInMetaCode", param: param, cacheType: .networkOnly) { task, result, error in
  87 +// print("\(String(describing: result))")
  88 +// }
  89 +
  90 +
  91 +
  92 + }
  93 +
  94 +
  95 +}
  96 +
... ...
metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_back.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "login_body_show_auth_back@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "login_body_show_auth_back@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/LoginPage/login_body_show_auth_back.imageset/login_body_show_auth_back@2x.png 0 → 100644

48.5 KB

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_back.imageset/login_body_show_auth_back@3x.png 0 → 100644

133 KB

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_content.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "login_body_show_auth_content@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "login_body_show_auth_content@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/LoginPage/login_body_show_auth_content.imageset/login_body_show_auth_content@2x.png 0 → 100644

96.7 KB

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_content.imageset/login_body_show_auth_content@3x.png 0 → 100644

203 KB

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_policy.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "login_body_show_auth_policy@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "login_body_show_auth_policy@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/LoginPage/login_body_show_auth_policy.imageset/login_body_show_auth_policy@2x.png 0 → 100644

17.1 KB

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_body_show_auth_policy.imageset/login_body_show_auth_policy@3x.png 0 → 100644

31.5 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_header_icon_back.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_header_icon_back@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_header_icon_back@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_header_icon_back.imageset/mine_header_icon_back@2x.png 0 → 100644

77.8 KB

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

179 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_header_icon_defult_ava.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_header_icon_defult_ava@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_header_icon_defult_ava@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_header_icon_defult_ava.imageset/mine_header_icon_defult_ava@2x.png 0 → 100644

6.23 KB

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

12 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_header_icon_identity.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_header_icon_identity@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_header_icon_identity@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_header_icon_identity.imageset/mine_header_icon_identity@2x.png 0 → 100644

8.54 KB

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

20.4 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_header_icon_notice.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_header_icon_notice@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_header_icon_notice@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_header_icon_notice.imageset/mine_header_icon_notice@2x.png 0 → 100644

1.09 KB

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

1.92 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_icon_add_identity.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_icon_add_identity@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_icon_add_identity@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_icon_add_identity.imageset/mine_list_icon_add_identity@2x.png 0 → 100644

1.02 KB

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

1.9 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_icon_help_feedback.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_icon_help_feedback@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_icon_help_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_icon_help_feedback.imageset/mine_list_icon_help_feedback@2x.png 0 → 100644

1.34 KB

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

2.39 KB

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_icon_right_more.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_icon_right_more@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_icon_right_more@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_icon_right_more.imageset/mine_list_icon_right_more@2x.png 0 → 100644

409 Bytes

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

777 Bytes

metaCode/Supporting Files/Assets.xcassets/MinePage/mine_list_icon_set_more.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "mine_list_icon_set_more@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "mine_list_icon_set_more@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_icon_set_more.imageset/mine_list_icon_set_more@2x.png 0 → 100644

1.57 KB

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

3 KB

metaCode/Supporting Files/Assets.xcassets/TabBar/main_navi_left_icon_back.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "main_navi_left_icon_back@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "main_navi_left_icon_back@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/TabBar/main_navi_left_icon_back.imageset/main_navi_left_icon_back@2x.png 0 → 100644

413 Bytes

metaCode/Supporting Files/Assets.xcassets/TabBar/main_navi_left_icon_back.imageset/main_navi_left_icon_back@3x.png 0 → 100644

768 Bytes