Commit a0d44c80fffd894bb0e40025742d737960312406
1 parent
2330cd7b
对基类添加逻辑
Showing
57 changed files
with
1783 additions
and
126 deletions
Podfile
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