Podfile
New file @@ -0,0 +1,11 @@ # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'WanPai' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for WanPai pod 'JQTools',:path=> '/Users/yangkai/Developer/MyProject/JQTools' pod 'SwifterSwift' end WanPai.xcodeproj/project.pbxproj
@@ -7,23 +7,47 @@ objects = { /* Begin PBXBuildFile section */ 32D5FD87AB45829154125950 /* Pods_WanPai.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F12BCB644B5E0392E2BFF8C7 /* Pods_WanPai.framework */; }; 8D8400D22A2F1430003AF6A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */; }; 8D8400D42A2F1430003AF6A2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */; }; 8D8400D62A2F1430003AF6A2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400D52A2F1430003AF6A2 /* ViewController.swift */; }; 8D8400D92A2F1430003AF6A2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400D72A2F1430003AF6A2 /* Main.storyboard */; }; 8D8400DB2A2F1432003AF6A2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400DA2A2F1432003AF6A2 /* Assets.xcassets */; }; 8D8400DE2A2F1432003AF6A2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400DC2A2F1432003AF6A2 /* LaunchScreen.storyboard */; }; 8D8400E92A2F14A3003AF6A2 /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */; }; 8D8400EA2A2F14A3003AF6A2 /* LoginVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */; }; 8DA901FF2A308E9200918C98 /* AgreentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DA901FE2A308E9200918C98 /* AgreentView.swift */; }; 8DA902012A308ED100918C98 /* AgreentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DA902002A308ED100918C98 /* AgreentView.xib */; }; 8DAEB54A2A30593C00814766 /* BaseNav.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5482A30593B00814766 /* BaseNav.swift */; }; 8DAEB54B2A30593C00814766 /* BaseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5492A30593C00814766 /* BaseVC.swift */; }; 8DAEB54E2A305A0100814766 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB54D2A305A0100814766 /* Colors.swift */; }; 8DAEB5502A305AEF00814766 /* Def.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB54F2A305AEF00814766 /* Def.swift */; }; 8DAEB5522A305B2D00814766 /* Fronts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5512A305B2D00814766 /* Fronts.swift */; }; 8DAEB5562A3062B800814766 /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5552A3062B800814766 /* CommonAlertView.swift */; }; 8DAEB5582A3062D900814766 /* CommonAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DAEB5572A3062D900814766 /* CommonAlertView.xib */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 0995405518BC2BFFEF866458 /* Pods-WanPai.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WanPai.release.xcconfig"; path = "Target Support Files/Pods-WanPai/Pods-WanPai.release.xcconfig"; sourceTree = "<group>"; }; 732365E0737559969E7CB12D /* Pods-WanPai.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WanPai.debug.xcconfig"; path = "Target Support Files/Pods-WanPai/Pods-WanPai.debug.xcconfig"; sourceTree = "<group>"; }; 8D8400CE2A2F1430003AF6A2 /* WanPai.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WanPai.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; 8D8400D52A2F1430003AF6A2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; }; 8D8400D82A2F1430003AF6A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; 8D8400DA2A2F1432003AF6A2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 8D8400DD2A2F1432003AF6A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 8D8400DF2A2F1432003AF6A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; }; 8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginVC.xib; sourceTree = "<group>"; }; 8DA901FE2A308E9200918C98 /* AgreentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgreentView.swift; sourceTree = "<group>"; }; 8DA902002A308ED100918C98 /* AgreentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AgreentView.xib; sourceTree = "<group>"; }; 8DAEB5482A30593B00814766 /* BaseNav.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseNav.swift; sourceTree = "<group>"; }; 8DAEB5492A30593C00814766 /* BaseVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseVC.swift; sourceTree = "<group>"; }; 8DAEB54D2A305A0100814766 /* Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = "<group>"; }; 8DAEB54F2A305AEF00814766 /* Def.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Def.swift; sourceTree = "<group>"; }; 8DAEB5512A305B2D00814766 /* Fronts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fronts.swift; sourceTree = "<group>"; }; 8DAEB5552A3062B800814766 /* CommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; }; 8DAEB5572A3062D900814766 /* CommonAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommonAlertView.xib; sourceTree = "<group>"; }; F12BCB644B5E0392E2BFF8C7 /* Pods_WanPai.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WanPai.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -31,17 +55,37 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 32D5FD87AB45829154125950 /* Pods_WanPai.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 05E59336D5F1D4F8EB60CA26 /* Frameworks */ = { isa = PBXGroup; children = ( F12BCB644B5E0392E2BFF8C7 /* Pods_WanPai.framework */, ); name = Frameworks; sourceTree = "<group>"; }; 67BBE8279EFA21B415F5EE09 /* Pods */ = { isa = PBXGroup; children = ( 732365E0737559969E7CB12D /* Pods-WanPai.debug.xcconfig */, 0995405518BC2BFFEF866458 /* Pods-WanPai.release.xcconfig */, ); path = Pods; sourceTree = "<group>"; }; 8D8400C52A2F1430003AF6A2 = { isa = PBXGroup; children = ( 8D8400D02A2F1430003AF6A2 /* WanPai */, 8D8400CF2A2F1430003AF6A2 /* Products */, 67BBE8279EFA21B415F5EE09 /* Pods */, 05E59336D5F1D4F8EB60CA26 /* Frameworks */, ); sourceTree = "<group>"; }; @@ -56,15 +100,74 @@ 8D8400D02A2F1430003AF6A2 /* WanPai */ = { isa = PBXGroup; children = ( 8DAEB5532A30629500814766 /* Common */, 8DAEB54C2A3059F700814766 /* Config */, 8DAEB5472A30592800814766 /* Base */, 8D8400E52A2F145D003AF6A2 /* Login */, 8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */, 8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */, 8D8400D52A2F1430003AF6A2 /* ViewController.swift */, 8D8400D72A2F1430003AF6A2 /* Main.storyboard */, 8D8400DA2A2F1432003AF6A2 /* Assets.xcassets */, 8D8400DC2A2F1432003AF6A2 /* LaunchScreen.storyboard */, 8D8400DF2A2F1432003AF6A2 /* Info.plist */, ); path = WanPai; sourceTree = "<group>"; }; 8D8400E52A2F145D003AF6A2 /* Login */ = { isa = PBXGroup; children = ( 8D8400E62A2F1467003AF6A2 /* VC */, ); path = Login; sourceTree = "<group>"; }; 8D8400E62A2F1467003AF6A2 /* VC */ = { isa = PBXGroup; children = ( 8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */, 8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */, ); path = VC; sourceTree = "<group>"; }; 8DAEB5472A30592800814766 /* Base */ = { isa = PBXGroup; children = ( 8DAEB5482A30593B00814766 /* BaseNav.swift */, 8DAEB5492A30593C00814766 /* BaseVC.swift */, ); path = Base; sourceTree = "<group>"; }; 8DAEB54C2A3059F700814766 /* Config */ = { isa = PBXGroup; children = ( 8DAEB54D2A305A0100814766 /* Colors.swift */, 8DAEB54F2A305AEF00814766 /* Def.swift */, 8DAEB5512A305B2D00814766 /* Fronts.swift */, ); path = Config; sourceTree = "<group>"; }; 8DAEB5532A30629500814766 /* Common */ = { isa = PBXGroup; children = ( 8DAEB5542A30629C00814766 /* View */, ); path = Common; sourceTree = "<group>"; }; 8DAEB5542A30629C00814766 /* View */ = { isa = PBXGroup; children = ( 8DAEB5552A3062B800814766 /* CommonAlertView.swift */, 8DAEB5572A3062D900814766 /* CommonAlertView.xib */, 8DA901FE2A308E9200918C98 /* AgreentView.swift */, 8DA902002A308ED100918C98 /* AgreentView.xib */, ); name = View; path = "../New Group/View"; sourceTree = "<group>"; }; /* End PBXGroup section */ @@ -74,9 +177,11 @@ isa = PBXNativeTarget; buildConfigurationList = 8D8400E22A2F1432003AF6A2 /* Build configuration list for PBXNativeTarget "WanPai" */; buildPhases = ( ED530B56EC46073C093BBEA9 /* [CP] Check Pods Manifest.lock */, 8D8400CA2A2F1430003AF6A2 /* Sources */, 8D8400CB2A2F1430003AF6A2 /* Frameworks */, 8D8400CC2A2F1430003AF6A2 /* Resources */, FE57E4383C5D7AA7AAE198DF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -127,19 +232,71 @@ files = ( 8D8400DE2A2F1432003AF6A2 /* LaunchScreen.storyboard in Resources */, 8D8400DB2A2F1432003AF6A2 /* Assets.xcassets in Resources */, 8D8400EA2A2F14A3003AF6A2 /* LoginVC.xib in Resources */, 8D8400D92A2F1430003AF6A2 /* Main.storyboard in Resources */, 8DAEB5582A3062D900814766 /* CommonAlertView.xib in Resources */, 8DA902012A308ED100918C98 /* AgreentView.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ ED530B56EC46073C093BBEA9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-WanPai-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; FE57E4383C5D7AA7AAE198DF /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-WanPai/Pods-WanPai-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-WanPai/Pods-WanPai-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WanPai/Pods-WanPai-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D8400CA2A2F1430003AF6A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D8400D62A2F1430003AF6A2 /* ViewController.swift in Sources */, 8DAEB54B2A30593C00814766 /* BaseVC.swift in Sources */, 8DA901FF2A308E9200918C98 /* AgreentView.swift in Sources */, 8DAEB5562A3062B800814766 /* CommonAlertView.swift in Sources */, 8DAEB54E2A305A0100814766 /* Colors.swift in Sources */, 8DAEB54A2A30593C00814766 /* BaseNav.swift in Sources */, 8DAEB5522A305B2D00814766 /* Fronts.swift in Sources */, 8D8400D22A2F1430003AF6A2 /* AppDelegate.swift in Sources */, 8D8400E92A2F14A3003AF6A2 /* LoginVC.swift in Sources */, 8DAEB5502A305AEF00814766 /* Def.swift in Sources */, 8D8400D42A2F1430003AF6A2 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -282,11 +439,13 @@ }; 8D8400E32A2F1432003AF6A2 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 732365E0737559969E7CB12D /* Pods-WanPai.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = WanPai/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -294,13 +453,15 @@ INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.wanpai.WanPai; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.weparklife; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -309,11 +470,13 @@ }; 8D8400E42A2F1432003AF6A2 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0995405518BC2BFFEF866458 /* Pods-WanPai.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = WanPai/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -321,13 +484,15 @@ INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.wanpai.WanPai; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.weparklife; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; WanPai.xcworkspace/contents.xcworkspacedata
New file @@ -0,0 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <Workspace version = "1.0"> <FileRef location = "group:WanPai.xcodeproj"> </FileRef> <FileRef location = "group:Pods/Pods.xcodeproj"> </FileRef> </Workspace> WanPai/AppDelegate.swift
@@ -13,7 +13,7 @@ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } WanPai/Assets.xcassets/Btns/Contents.json
New file @@ -0,0 +1,6 @@ { "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_back.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_back@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_back@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_back.imageset/btn_back@2x.png
WanPai/Assets.xcassets/Btns/btn_back.imageset/btn_back@3x.png
WanPai/Assets.xcassets/Btns/btn_close.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_close@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_close@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_close.imageset/btn_close@2x.png
WanPai/Assets.xcassets/Btns/btn_close.imageset/btn_close@3x.png
WanPai/Assets.xcassets/Btns/btn_select.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_select@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_select@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_select.imageset/btn_select@2x.png
WanPai/Assets.xcassets/Btns/btn_select.imageset/btn_select@3x.png
WanPai/Assets.xcassets/Btns/btn_select_u.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_select_u@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_select_u@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_select_u.imageset/btn_select_u@2x.png
WanPai/Assets.xcassets/Btns/btn_select_u.imageset/btn_select_u@3x.png
WanPai/Assets.xcassets/Btns/btn_wechat.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_wechat@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_wechat@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Btns/btn_wechat.imageset/btn_wechat@2x.png
WanPai/Assets.xcassets/Btns/btn_wechat.imageset/btn_wechat@3x.png
WanPai/Assets.xcassets/Colors/515151.colorset/Contents.json
New file @@ -0,0 +1,20 @@ { "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "0.318", "green" : "0.318", "red" : "0.318" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Colors/Contents.json
New file @@ -0,0 +1,6 @@ { "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Colors/F6F6F6.colorset/Contents.json
New file @@ -0,0 +1,20 @@ { "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "0.965", "green" : "0.965", "red" : "0.965" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Colors/FE6E0D.colorset/Contents.json
New file @@ -0,0 +1,23 @@ { "colors" : [ { "color" : { "color-space" : "srgb", "components" : { "alpha" : "1.000", "blue" : "0.051", "green" : "0.431", "red" : "0.996" } }, "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 }, "properties" : { "localizable" : true } } WanPai/Assets.xcassets/Icons/Contents.json
New file @@ -0,0 +1,6 @@ { "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_login_code.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_login_code@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_login_code@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_login_code.imageset/icon_login_code@2x.png
WanPai/Assets.xcassets/Icons/icon_login_code.imageset/icon_login_code@3x.png
WanPai/Assets.xcassets/Icons/icon_login_eye.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_login_eye@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_login_eye@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_login_eye.imageset/icon_login_eye@2x.png
WanPai/Assets.xcassets/Icons/icon_login_eye.imageset/icon_login_eye@3x.png
WanPai/Assets.xcassets/Icons/icon_login_eye_c.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_login_eye_c@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_login_eye_c@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_login_eye_c.imageset/icon_login_eye_c@2x.png
WanPai/Assets.xcassets/Icons/icon_login_eye_c.imageset/icon_login_eye_c@3x.png
WanPai/Assets.xcassets/Icons/icon_login_phone.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_login_phone@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_login_phone@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_login_phone.imageset/icon_login_phone@2x.png
WanPai/Assets.xcassets/Icons/icon_login_phone.imageset/icon_login_phone@3x.png
WanPai/Assets.xcassets/icon_LOGO.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_LOGO@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_LOGO@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/icon_LOGO.imageset/icon_LOGO@2x.png
WanPai/Assets.xcassets/icon_LOGO.imageset/icon_LOGO@3x.png
WanPai/Base/BaseNav.swift
New file @@ -0,0 +1,81 @@ // // BaseNavigationController.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/24. // import UIKit import JQTools class BaseNav: UINavigationController,UINavigationControllerDelegate { private var popDelegate: UIGestureRecognizerDelegate? open override func viewDidLoad() { super.viewDidLoad() self.navigationBar.barTintColor = .white self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black] self.navigationBar.tintColor = UIColor.black self.navigationBar.shadowImage = UIImage() self.navigationBar.isTranslucent = true self.delegate = self self.popDelegate = self.interactivePopGestureRecognizer?.delegate if #available(iOS 15.0, *) { let scrollBar = UINavigationBarAppearance() scrollBar.configureWithOpaqueBackground() scrollBar.backgroundEffect = nil scrollBar.shadowColor = nil scrollBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] scrollBar.backgroundColor = UIColor.clear let img = UIImage.jq_gradient([UIColor.black.withAlphaComponent(0.4),UIColor.clear], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical) let standardBar = UINavigationBarAppearance() standardBar.configureWithOpaqueBackground() standardBar.backgroundEffect = nil standardBar.shadowColor = nil standardBar.shadowImage = nil standardBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] standardBar.backgroundColor = UIColor.clear standardBar.backgroundImage = img navigationBar.scrollEdgeAppearance = scrollBar //顶部透明 navigationBar.standardAppearance = standardBar }else { navigationBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] } } open override func pushViewController(_ viewController: UIViewController, animated: Bool) { viewController.hidesBottomBarWhenPushed = true super.pushViewController(viewController, animated: animated) } open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { } //侧滑 public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { if viewController == self.viewControllers[0] { self.interactivePopGestureRecognizer!.delegate = self.popDelegate }else{ self.interactivePopGestureRecognizer!.delegate = nil } } open override var childForStatusBarHidden: UIViewController? { return self.topViewController } open override var childForStatusBarStyle: UIViewController? { return self.topViewController } } WanPai/Base/BaseVC.swift
New file @@ -0,0 +1,90 @@ // // BaseViewController.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/24. // import UIKit import RxSwift import RxRelay import RxCocoa class BaseVC: UIViewController { var disposeBag:DisposeBag! var yy_popBlock:(() -> Void)? open var nav_back_img:UIImage = UIImage.init(named: "btn_back") ?? UIImage.init() { didSet { let btn = navigationItem.leftBarButtonItem?.customView as! UIButton btn.setImage(nav_back_img, for: .normal) } } override func viewDidLoad() { super.viewDidLoad() disposeBag = DisposeBag() setUI() setRx() setData() if navigationController?.viewControllers.count ?? 0 > 1{ navigationItem.leftBarButtonItem = UIBarButtonItem.jq_creat(image: nav_back_img, target: self, alignment:.left, action: #selector(backItemEvent)).item } } func setRx(){ NotificationCenter.default.rx.notification(UIDevice.orientationDidChangeNotification).take(until:self.rx.deallocated).subscribe {[weak self] _ in let orient = UIDevice.current.orientation var desc = "" // switch orient { // case .portrait :desc = Localized("屏幕正常竖向") // case .portraitUpsideDown:desc = Localized("屏幕倒立") // case .landscapeLeft:desc = Localized("屏幕左旋转") // case .landscapeRight:desc = Localized("屏幕右旋转") // default:break // } if !desc.isEmpty{ self?.receiverNotification(orient: orient, desc: desc) } }.disposed(by: disposeBag) } func setUI(){ view.backgroundColor = .white } func setData(){ } func refreshUI(){} func push(vc:UIViewController){ navigationController?.pushViewController(vc, animated: true) } @objc fileprivate func backItemEvent() { // 拦截pop事件 if (yy_popBlock != nil) { yy_popBlock?() return } navigationController?.popViewController(animated: true) } deinit { LogInfo(String(format: "%@ 已释放", NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!)) } /// 屏幕旋转:当设备方向改变,需要对UI进行重新布局,子类重写此方法 @objc open func receiverNotification(orient:UIDeviceOrientation,desc:String){ LogInfo(desc) refreshUI() } } WanPai/Config/Colors.swift
New file @@ -0,0 +1,12 @@ // // Colors.swift // WanPai // // Created by 杨锴 on 2023/6/7. // import UIKit import JQTools let Def_ThemeColor:UIColor = UIColor(hexStr: "#FD8802") let Def_NavFontColor = UIColor(hexStr: "#FD8802") WanPai/Config/Def.swift
New file @@ -0,0 +1,42 @@ // // Def.swift // WanPai // // Created by 杨锴 on 2023/6/7. // import Foundation import UIKit let app = UIApplication.shared.delegate as! AppDelegate var screnDelegate:SceneDelegate? = { var uiScreen:UIScene? UIApplication.shared.connectedScenes.forEach { scenes in uiScreen = scenes } return (uiScreen?.delegate as? SceneDelegate) }() func LogSuccess(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ #if DEBUG let file = (file as NSString).lastPathComponent.split(separator: ".").first!; print("✅✅✅ SUCCESS: \(file) \(function) [Line: \(line)]: \(items)",separator); #endif } func LogError(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ #if DEBUG let file = (file as NSString).lastPathComponent.split(separator: ".").first!; print("❌❌❌ ERROR: \(file) \(function) [Line: \(line)]: \(items)",separator); #endif } func LogInfo(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ #if DEBUG let file = (file as NSString).lastPathComponent.split(separator: ".").first!; print("⚠️⚠️⚠️INFO: \(file) \(function) [Line: \(line)]: \(items)",separator); #endif } WanPai/Config/Fronts.swift
New file @@ -0,0 +1,10 @@ // // Fronts.swift // WanPai // // Created by 杨锴 on 2023/6/7. // import UIKit let Def_NavFont:UIFont = UIFont.systemFont(ofSize: 16, weight: .medium) WanPai/Login/VC/LoginVC.swift
New file @@ -0,0 +1,119 @@ // // LoginVC.swift // WanPai // // Created by 杨锴 on 2023/6/6. // import UIKit import RxRelay import QMUIKit private enum LoginType{ case pwd,smsCode } class LoginVC: BaseVC { @IBOutlet weak var btn_pwdLogin: UIButton! @IBOutlet weak var btn_smsCodeLogin: UIButton! @IBOutlet weak var tf_phone: QMUITextField! @IBOutlet weak var tf_verify: QMUITextField! @IBOutlet weak var btn_getCode: UIButton! @IBOutlet weak var btn_eye: UIButton! @IBOutlet weak var btn_wechat: QMUIButton! @IBOutlet weak var textView_treaty: UITextView! private let loginType = BehaviorRelay<LoginType>(value: .pwd) override func viewDidLoad() { super.viewDidLoad() } override func setUI() { btn_wechat.imagePosition = .top btn_wechat.spacingBetweenImageAndTitle = 8 textView_treaty.isEditable = false let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineBreakMode = NSLineBreakMode.byCharWrapping let content = "我已阅读并同意《隐私协议》《用户协议》《运动安全告知书》" let attribute = NSMutableAttributedString(string: content) attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://treaty")!], range: content.jq_subRange("《隐私协议》")!) attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://user")!], range: content.jq_subRange("《用户协议》")!) attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://sportSafety")!], range: content.jq_subRange("《运动安全告知书》")!) attribute.addAttributes([.paragraphStyle:paragraphStyle], range: _NSRange(location: 0, length: content.count)) self.textView_treaty.attributedText = attribute self.textView_treaty.delegate = self } override func setRx() { loginType.subscribe(onNext: { [weak self] type in guard let weakSelf = self else {return} weakSelf.tf_verify.text = "" weakSelf.btn_getCode.isHidden = type == .pwd weakSelf.btn_eye.isHidden = type == .smsCode switch type { case .pwd: weakSelf.tf_verify.isSecureTextEntry = !weakSelf.btn_eye.isSelected weakSelf.tf_verify.keyboardType = .default weakSelf.tf_verify.maximumTextLength = 30 weakSelf.tf_verify.placeholder = "请输入密码" case .smsCode: weakSelf.tf_verify.isSecureTextEntry = false weakSelf.tf_verify.keyboardType = .numberPad weakSelf.tf_verify.maximumTextLength = 6 weakSelf.tf_verify.placeholder = "请输入验证码" } }).disposed(by: disposeBag) } @IBAction func exchangeLoginTypeAction(_ sender: UIButton) { btn_pwdLogin.isSelected = sender.tag == 10 btn_smsCodeLogin.isSelected = sender.tag == 11 let type:LoginType = sender.tag == 10 ? .pwd:.smsCode loginType.accept(type) } @IBAction func eyeAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected if loginType.value == .pwd{ tf_verify.isSecureTextEntry = !sender.isSelected } } @IBAction func readAgreentAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected } @IBAction func wechatLoginAcion(_ sender: QMUIButton) { // CommonAlertView.show(title: "提示", content: "11231231231231231") } } extension LoginVC:UITextViewDelegate{ func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { if let str = URL.host(percentEncoded: true){ switch str { case "treaty": AgreentView.show(type: .privacy) case "user": AgreentView.show(type: .user) case "sportSafety": AgreentView.show(type: .safe) default:break } return true } return false } } WanPai/Login/VC/LoginVC.xib
New file @@ -0,0 +1,362 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/> <capability name="Named colors" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginVC" customModule="WanPai" customModuleProvider="target"> <connections> <outlet property="btn_eye" destination="bft-9v-fd2" id="6lv-dX-cmp"/> <outlet property="btn_getCode" destination="Peu-H2-2Bj" id="Tos-ZB-3it"/> <outlet property="btn_pwdLogin" destination="fEr-ZJ-pMj" id="adD-fy-ix2"/> <outlet property="btn_smsCodeLogin" destination="Bgw-Aw-FZm" id="Jde-9o-6wl"/> <outlet property="btn_wechat" destination="AA4-J4-8iR" id="Rdp-vy-GdD"/> <outlet property="textView_treaty" destination="BqB-Az-Ez1" id="zWC-fQ-SsK"/> <outlet property="tf_phone" destination="dXR-3c-p7o" id="7Dm-0N-TNe"/> <outlet property="tf_verify" destination="yYG-aW-Yzi" id="v9Z-15-f29"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_LOGO" translatesAutoresizingMaskIntoConstraints="NO" id="38m-zi-L1d"> <rect key="frame" x="122.66666666666669" y="79" width="148" height="72"/> </imageView> <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cAB-q2-f9Z"> <rect key="frame" x="113.33333333333333" y="183" width="166.66666666666669" height="25"/> <subviews> <button opaque="NO" tag="10" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fEr-ZJ-pMj"> <rect key="frame" x="0.0" y="0.0" width="74" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="密码登录"> <color key="titleColor" name="515151"/> </state> <state key="selected"> <color key="titleColor" name="FE6E0D"/> </state> <connections> <action selector="exchangeLoginTypeAction:" destination="-1" eventType="touchUpInside" id="12W-6X-lBL"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QH3-h0-THD"> <rect key="frame" x="74.000000000000014" y="0.0" width="18.666666666666671" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> <color key="textColor" name="FE6E0D"/> <nil key="highlightedColor"/> </label> <button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bgw-Aw-FZm"> <rect key="frame" x="92.666666666666686" y="0.0" width="74" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="短信登录"> <color key="titleColor" name="515151"/> </state> <state key="selected"> <color key="titleColor" name="FE6E0D"/> </state> <connections> <action selector="exchangeLoginTypeAction:" destination="-1" eventType="touchUpInside" id="yXg-QX-GZ4"/> </connections> </button> </subviews> <constraints> <constraint firstAttribute="height" constant="25" id="xeG-sS-w3k"/> </constraints> </stackView> <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ej3-Zy-UxP"> <rect key="frame" x="140.33333333333334" y="351" width="112.33333333333334" height="25"/> <subviews> <button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hI1-WH-dqa"> <rect key="frame" x="0.0" y="0.0" width="50" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="修改密码"> <color key="titleColor" name="515151"/> </state> <state key="selected"> <color key="titleColor" name="FE6E0D"/> </state> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pxy-q7-vhk"> <rect key="frame" x="50" y="0.0" width="12.333333333333336" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <color key="textColor" name="FE6E0D"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="anK-cQ-sSd"> <rect key="frame" x="62.333333333333314" y="0.0" width="50" height="25"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="忘记密码"> <color key="titleColor" name="FE6E0D"/> </state> <state key="selected"> <color key="titleColor" name="FE6E0D"/> </state> </button> </subviews> <constraints> <constraint firstAttribute="height" constant="25" id="fsW-mR-FHo"/> </constraints> </stackView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ixo-tJ-9cE"> <rect key="frame" x="40" y="238" width="313" height="40"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_phone" translatesAutoresizingMaskIntoConstraints="NO" id="HXD-J5-UNt"> <rect key="frame" x="31" y="11" width="16" height="18"/> </imageView> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="dXR-3c-p7o" customClass="QMUITextField"> <rect key="frame" x="75" y="0.0" width="228" height="40"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <textInputTraits key="textInputTraits" keyboardType="numberPad"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength"> <integer key="value" value="11"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor"> <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </textField> </subviews> <color key="backgroundColor" red="0.96470588235294119" green="0.96470588235294119" blue="0.96470588235294119" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="40" id="8k3-YG-84m"/> <constraint firstItem="HXD-J5-UNt" firstAttribute="leading" secondItem="ixo-tJ-9cE" secondAttribute="leading" constant="31" id="LYf-PT-yCY"/> <constraint firstAttribute="trailing" secondItem="dXR-3c-p7o" secondAttribute="trailing" constant="10" id="crG-8x-lY4"/> <constraint firstItem="dXR-3c-p7o" firstAttribute="top" secondItem="ixo-tJ-9cE" secondAttribute="top" id="ctp-CL-yYd"/> <constraint firstItem="HXD-J5-UNt" firstAttribute="centerY" secondItem="ixo-tJ-9cE" secondAttribute="centerY" id="tAB-wj-wWR"/> <constraint firstItem="dXR-3c-p7o" firstAttribute="leading" secondItem="HXD-J5-UNt" secondAttribute="trailing" constant="28" id="wdm-3k-ttt"/> <constraint firstAttribute="bottom" secondItem="dXR-3c-p7o" secondAttribute="bottom" id="xLe-cn-XTJ"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1LE-kf-RCn"> <rect key="frame" x="40" y="298" width="313" height="40"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_code" translatesAutoresizingMaskIntoConstraints="NO" id="0Nl-D8-jVF"> <rect key="frame" x="31" y="11" width="15" height="18"/> </imageView> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入密码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="yYG-aW-Yzi" customClass="QMUITextField"> <rect key="frame" x="74" y="0.0" width="190" height="40"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <textInputTraits key="textInputTraits" spellCheckingType="no" keyboardType="alphabet" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" smartQuotesType="no"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength"> <integer key="value" value="11"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor"> <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </textField> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bft-9v-fd2"> <rect key="frame" x="274" y="9" width="22" height="22"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_login_eye_c"/> <state key="selected" image="icon_login_eye"/> <connections> <action selector="eyeAction:" destination="-1" eventType="touchUpInside" id="tAb-bY-w9Q"/> </connections> </button> <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Peu-H2-2Bj"> <rect key="frame" x="231" y="6.6666666666666856" width="62" height="27"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="获取验证码"> <color key="titleColor" red="0.38823529411764707" green="0.74117647058823533" blue="0.85882352941176465" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> </button> </subviews> <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96470588239999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="0Nl-D8-jVF" firstAttribute="leading" secondItem="1LE-kf-RCn" secondAttribute="leading" constant="31" id="0di-OZ-7cb"/> <constraint firstItem="bft-9v-fd2" firstAttribute="centerY" secondItem="0Nl-D8-jVF" secondAttribute="centerY" id="1fW-nw-j1L"/> <constraint firstItem="yYG-aW-Yzi" firstAttribute="leading" secondItem="0Nl-D8-jVF" secondAttribute="trailing" constant="28" id="DTC-n0-FXH"/> <constraint firstAttribute="trailing" secondItem="Peu-H2-2Bj" secondAttribute="trailing" constant="20" id="G0A-B4-LL9"/> <constraint firstItem="bft-9v-fd2" firstAttribute="leading" secondItem="yYG-aW-Yzi" secondAttribute="trailing" constant="10" id="M9d-MT-Vu5"/> <constraint firstItem="yYG-aW-Yzi" firstAttribute="top" secondItem="1LE-kf-RCn" secondAttribute="top" id="NlC-lV-gcr"/> <constraint firstAttribute="height" constant="40" id="Vlt-Kr-Hnl"/> <constraint firstAttribute="trailing" secondItem="bft-9v-fd2" secondAttribute="trailing" constant="17" id="ZCV-Hr-1WF"/> <constraint firstItem="Peu-H2-2Bj" firstAttribute="centerY" secondItem="1LE-kf-RCn" secondAttribute="centerY" id="nLX-2P-LLJ"/> <constraint firstItem="0Nl-D8-jVF" firstAttribute="centerY" secondItem="1LE-kf-RCn" secondAttribute="centerY" id="nru-Vh-7U0"/> <constraint firstAttribute="bottom" secondItem="yYG-aW-Yzi" secondAttribute="bottom" id="y4n-O8-i1l"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A58-cL-JDg"> <rect key="frame" x="40" y="404" width="146.66666666666666" height="40"/> <constraints> <constraint firstAttribute="height" constant="40" id="y9B-Xu-Q5i"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="注册"> <color key="titleColor" name="FE6E0D"/> </state> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> <color key="value" name="FE6E0D"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> <real key="value" value="1"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NQ0-2r-DbZ"> <rect key="frame" x="206.66666666666663" y="404" width="146.33333333333337" height="40"/> <color key="backgroundColor" name="FE6E0D"/> <constraints> <constraint firstAttribute="height" constant="40" id="jrh-JX-bIa"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="登录"> <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jpR-VA-PYM"> <rect key="frame" x="42" y="464" width="20" height="22"/> <constraints> <constraint firstAttribute="height" constant="22" id="2ZC-Li-D7d"/> <constraint firstAttribute="width" constant="20" id="rRu-Ef-yCE"/> </constraints> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_select_u"/> <state key="selected" image="btn_select"/> <connections> <action selector="readAgreentAction:" destination="-1" eventType="touchUpInside" id="c55-Qk-ocI"/> </connections> </button> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mZh-Vi-57o"> <rect key="frame" x="0.0" y="499" width="393" height="319"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ikk-sm-4Sm"> <rect key="frame" x="146.66666666666666" y="179" width="100" height="50"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AA4-J4-8iR" customClass="QMUIButton"> <rect key="frame" x="0.0" y="0.0" width="100" height="50"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="微信登录" image="btn_wechat"> <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="wechatLoginAcion:" destination="-1" eventType="touchUpInside" id="YOh-qo-ygR"/> </connections> </button> </subviews> </stackView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="其他登录方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cqp-2p-rC6"> <rect key="frame" x="159.66666666666666" y="147" width="73.666666666666657" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="DBH-wO-NS0"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <color key="textColor" red="0.70196078431372544" green="0.70196078431372544" blue="0.70196078431372544" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="ikk-sm-4Sm" firstAttribute="centerX" secondItem="cqp-2p-rC6" secondAttribute="centerX" id="0xX-m5-mrX"/> <constraint firstAttribute="bottom" secondItem="ikk-sm-4Sm" secondAttribute="bottom" constant="90" id="egz-uu-9vA"/> <constraint firstItem="ikk-sm-4Sm" firstAttribute="top" secondItem="cqp-2p-rC6" secondAttribute="bottom" constant="15" id="m32-Te-28i"/> <constraint firstItem="ikk-sm-4Sm" firstAttribute="centerX" secondItem="mZh-Vi-57o" secondAttribute="centerX" id="sxJ-Mz-EGJ"/> </constraints> </view> <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="我已阅读并同意《隐私协议》《用户协议》《运动安全告知书》" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="BqB-Az-Ez1"> <rect key="frame" x="64" y="459" width="287" height="35"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="35" id="rzR-7J-NJs"/> </constraints> <color key="textColor" systemColor="labelColor"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> </textView> </subviews> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="Ej3-Zy-UxP" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="06n-Gd-wg4"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="mZh-Vi-57o" secondAttribute="trailing" id="5PZ-du-NJ4"/> <constraint firstItem="cAB-q2-f9Z" firstAttribute="top" secondItem="38m-zi-L1d" secondAttribute="bottom" constant="32" id="BJR-4U-Mqg"/> <constraint firstItem="1LE-kf-RCn" firstAttribute="leading" secondItem="ixo-tJ-9cE" secondAttribute="leading" id="C94-6l-8Sz"/> <constraint firstItem="NQ0-2r-DbZ" firstAttribute="centerY" secondItem="A58-cL-JDg" secondAttribute="centerY" id="ELW-lb-UMU"/> <constraint firstItem="cAB-q2-f9Z" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="F8y-Ql-6Fl"/> <constraint firstItem="NQ0-2r-DbZ" firstAttribute="width" secondItem="A58-cL-JDg" secondAttribute="width" id="GKs-an-eCI"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="NQ0-2r-DbZ" secondAttribute="trailing" constant="40" id="KNO-0e-Vry"/> <constraint firstItem="1LE-kf-RCn" firstAttribute="trailing" secondItem="ixo-tJ-9cE" secondAttribute="trailing" id="LYX-CC-Ine"/> <constraint firstItem="NQ0-2r-DbZ" firstAttribute="leading" secondItem="A58-cL-JDg" secondAttribute="trailing" constant="20" id="Le9-B6-pN1"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="BqB-Az-Ez1" secondAttribute="trailing" constant="42" id="MWC-RO-gsY"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="mZh-Vi-57o" secondAttribute="bottom" id="MWu-3v-W4I"/> <constraint firstItem="mZh-Vi-57o" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="T42-Uk-S6N"/> <constraint firstItem="ixo-tJ-9cE" firstAttribute="top" secondItem="cAB-q2-f9Z" secondAttribute="bottom" constant="30" id="THc-e6-Bko"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="ixo-tJ-9cE" secondAttribute="trailing" constant="40" id="TzU-Nh-o64"/> <constraint firstItem="jpR-VA-PYM" firstAttribute="top" secondItem="A58-cL-JDg" secondAttribute="bottom" constant="20" id="Ujc-Kg-bWe"/> <constraint firstItem="mZh-Vi-57o" firstAttribute="top" secondItem="BqB-Az-Ez1" secondAttribute="bottom" constant="5" id="dMK-2O-N4o"/> <constraint firstItem="1LE-kf-RCn" firstAttribute="top" secondItem="ixo-tJ-9cE" secondAttribute="bottom" constant="20" id="h5h-2F-FmM"/> <constraint firstItem="38m-zi-L1d" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="20" id="iPe-ep-hvl"/> <constraint firstItem="A58-cL-JDg" firstAttribute="top" secondItem="Ej3-Zy-UxP" secondAttribute="bottom" constant="28" id="j1g-QM-Spl"/> <constraint firstItem="Ej3-Zy-UxP" firstAttribute="top" secondItem="1LE-kf-RCn" secondAttribute="bottom" constant="13" id="lu7-1L-Dgy"/> <constraint firstItem="A58-cL-JDg" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="mFV-rW-Mho"/> <constraint firstItem="38m-zi-L1d" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="vTc-mW-ZlI"/> <constraint firstItem="jpR-VA-PYM" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="42" id="vWq-ms-r59"/> <constraint firstItem="BqB-Az-Ez1" firstAttribute="leading" secondItem="jpR-VA-PYM" secondAttribute="trailing" constant="2" id="wEr-Lg-muD"/> <constraint firstItem="ixo-tJ-9cE" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="wT0-yN-RM8"/> <constraint firstItem="jpR-VA-PYM" firstAttribute="top" secondItem="BqB-Az-Ez1" secondAttribute="top" constant="5" id="x9D-NQ-ac9"/> </constraints> <point key="canvasLocation" x="136.64122137404578" y="20.422535211267608"/> </view> </objects> <resources> <image name="btn_select" width="20" height="20"/> <image name="btn_select_u" width="20" height="20"/> <image name="btn_wechat" width="50" height="50"/> <image name="icon_LOGO" width="148" height="72"/> <image name="icon_login_code" width="15" height="18"/> <image name="icon_login_eye" width="23" height="14"/> <image name="icon_login_eye_c" width="22" height="9"/> <image name="icon_login_phone" width="16" height="18"/> <namedColor name="515151"> <color red="0.31799998879432678" green="0.31799998879432678" blue="0.31799998879432678" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </namedColor> <namedColor name="FE6E0D"> <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </namedColor> <systemColor name="labelColor"> <color red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </systemColor> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> WanPai/New Group/View/AgreentView.swift
New file @@ -0,0 +1,58 @@ // // AgreentView.swift // WanPai // // Created by 杨锴 on 2023/6/7. // import UIKit import JQTools class AgreentView: UIView,JQNibView{ enum AgreentType { case user case safe case privacy } @IBOutlet weak var view_container: UIView! @IBOutlet weak var bottom_cons: NSLayoutConstraint! private var type:AgreentType! override func awakeFromNib() { super.awakeFromNib() bottom_cons.constant = -(JQ_ScreenH - JQ_ScreenW * 0.9) layoutIfNeeded() } static func show(type:AgreentType){ let alertView = AgreentView.jq_loadNibView() alertView.frame = screnDelegate?.window?.frame ?? .zero alertView.type = type screnDelegate?.window?.addSubview(alertView) alertView.bottom_cons.constant = 0 UIView.animate(withDuration: 0.4) { alertView.layoutIfNeeded() } } override func layoutSubviews() { super.layoutSubviews() view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20) } @IBAction func completeAction(_ sender: UIButton) { bottom_cons.constant = -(JQ_ScreenH - JQ_ScreenW * 0.9) UIView.animate(withDuration: 0.4) { self.layoutIfNeeded() self.alpha = 0 }completion: { _ in self.removeFromSuperview() } } } WanPai/New Group/View/AgreentView.xib
New file @@ -0,0 +1,77 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="AgreentView" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RL2-Pc-fjv"> <rect key="frame" x="0.0" y="498.33333333333326" width="393" height="353.66666666666674"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="60u-g2-ZcS"> <rect key="frame" x="357.66666666666669" y="18.000000000000057" width="21.333333333333314" height="22"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_close"/> <connections> <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="3yC-82-lkX"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="G2G-hL-VpJ"> <rect key="frame" x="176.33333333333334" y="16.000000000000057" width="40.666666666666657" height="19.333333333333329"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EJM-vb-bxZ"> <rect key="frame" x="0.0" y="56.333333333333314" width="393" height="297.33333333333331"/> <color key="backgroundColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <wkWebViewConfiguration key="configuration"> <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/> <wkPreferences key="preferences"/> </wkWebViewConfiguration> </wkWebView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="G2G-hL-VpJ" firstAttribute="centerX" secondItem="RL2-Pc-fjv" secondAttribute="centerX" id="7sw-Tj-tyj"/> <constraint firstAttribute="width" secondItem="RL2-Pc-fjv" secondAttribute="height" multiplier="1:0.9" id="LAf-wU-ZYv"/> <constraint firstAttribute="bottom" secondItem="EJM-vb-bxZ" secondAttribute="bottom" id="NZi-lM-Pc5"/> <constraint firstAttribute="trailing" secondItem="EJM-vb-bxZ" secondAttribute="trailing" id="TO7-ye-UUb"/> <constraint firstAttribute="trailing" secondItem="60u-g2-ZcS" secondAttribute="trailing" constant="14" id="bdC-7d-9G5"/> <constraint firstItem="EJM-vb-bxZ" firstAttribute="top" secondItem="G2G-hL-VpJ" secondAttribute="bottom" constant="21" id="dwh-F7-0vL"/> <constraint firstItem="G2G-hL-VpJ" firstAttribute="top" secondItem="RL2-Pc-fjv" secondAttribute="top" constant="16" id="ftE-Xk-5Qu"/> <constraint firstItem="60u-g2-ZcS" firstAttribute="top" secondItem="RL2-Pc-fjv" secondAttribute="top" constant="18" id="sqJ-gr-MIZ"/> <constraint firstItem="EJM-vb-bxZ" firstAttribute="leading" secondItem="RL2-Pc-fjv" secondAttribute="leading" id="xca-G8-wLv"/> </constraints> </view> </subviews> <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="RL2-Pc-fjv" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="PLV-b8-pJ0"/> <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="RL2-Pc-fjv" secondAttribute="trailing" id="YwC-BS-9e2"/> <constraint firstAttribute="bottom" secondItem="RL2-Pc-fjv" secondAttribute="bottom" id="mzT-t7-Ph5"/> </constraints> <connections> <outlet property="bottom_cons" destination="mzT-t7-Ph5" id="s3O-fR-X42"/> <outlet property="view_container" destination="RL2-Pc-fjv" id="r9b-Cn-uAS"/> </connections> <point key="canvasLocation" x="20.610687022900763" y="20.422535211267608"/> </view> </objects> <resources> <image name="btn_close" width="21.333333969116211" height="21.333333969116211"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> WanPai/New Group/View/CommonAlertView.swift
New file @@ -0,0 +1,51 @@ // // CommonAlertView.swift // WanPai // // Created by 杨锴 on 2023/6/7. // import UIKit import JQTools class CommonAlertView: UIView,JQNibView{ @IBOutlet weak var view_container: UIView! @IBOutlet weak var label_title: UILabel! @IBOutlet weak var label_content: UILabel! private var title:String! private var content:String! override func awakeFromNib() { super.awakeFromNib() view_container.transform = .init(scaleX: 0.1, y: 0.1) alpha = 0 layoutIfNeeded() } static func show(title:String,content:String){ let alertView = CommonAlertView.jq_loadNibView() alertView.label_title.text = title alertView.label_content.text = content alertView.frame = screnDelegate?.window?.frame ?? .zero screnDelegate?.window?.addSubview(alertView) UIView.animate(withDuration: 0.4) { alertView.view_container.transform = .init(scaleX: 1.0, y: 1.0) alertView.alpha = 1 } } @IBAction func completeAction(_ sender: UIButton) { UIView.animate(withDuration: 0.4) { self.view_container.transform = .init(scaleX: 0.1, y: 0.1) self.alpha = 0 }completion: { _ in self.removeFromSuperview() } } } WanPai/New Group/View/CommonAlertView.xib
New file @@ -0,0 +1,102 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/> <capability name="Named colors" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CommonAlertView" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MnH-T0-9ye"> <rect key="frame" x="45" y="334" width="303" height="209.33333333333337"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8x2-bB-pNn"> <rect key="frame" x="143.33333333333334" y="24" width="16.333333333333343" height="18"/> <constraints> <constraint firstAttribute="height" constant="18" id="l8v-Dr-xT5"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="raL-bN-qOz"> <rect key="frame" x="30" y="79" width="243" height="19.333333333333329"/> <fontDescription key="fontDescription" type="system" pointSize="16"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x3p-KY-6M2"> <rect key="frame" x="76" y="149.33333333333331" width="151" height="40"/> <color key="backgroundColor" name="FE6E0D"/> <constraints> <constraint firstAttribute="height" constant="40" id="WXa-pb-Gz6"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="确定"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> </userDefinedRuntimeAttributes> <connections> <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="zfo-LJ-AJX"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="x3p-KY-6M2" secondAttribute="trailing" constant="76" id="FvL-JW-qNi"/> <constraint firstAttribute="trailing" secondItem="raL-bN-qOz" secondAttribute="trailing" constant="30" id="T4d-qj-pFi"/> <constraint firstItem="x3p-KY-6M2" firstAttribute="centerX" secondItem="MnH-T0-9ye" secondAttribute="centerX" id="Ulq-bQ-NBx"/> <constraint firstItem="8x2-bB-pNn" firstAttribute="centerX" secondItem="MnH-T0-9ye" secondAttribute="centerX" id="cVP-So-X9I"/> <constraint firstItem="x3p-KY-6M2" firstAttribute="top" secondItem="raL-bN-qOz" secondAttribute="bottom" constant="51" id="fyT-RN-pGA"/> <constraint firstAttribute="bottom" secondItem="x3p-KY-6M2" secondAttribute="bottom" constant="20" id="kk8-CD-ZZh"/> <constraint firstItem="raL-bN-qOz" firstAttribute="leading" secondItem="MnH-T0-9ye" secondAttribute="leading" constant="30" id="lDV-JW-sCh"/> <constraint firstItem="8x2-bB-pNn" firstAttribute="top" secondItem="MnH-T0-9ye" secondAttribute="top" constant="24" id="mGE-YB-U7v"/> <constraint firstItem="raL-bN-qOz" firstAttribute="top" secondItem="8x2-bB-pNn" secondAttribute="bottom" constant="37" id="oSb-O8-R6D"/> <constraint firstItem="x3p-KY-6M2" firstAttribute="leading" secondItem="MnH-T0-9ye" secondAttribute="leading" constant="76" id="uPx-hW-PWg"/> <constraint firstItem="raL-bN-qOz" firstAttribute="centerX" secondItem="MnH-T0-9ye" secondAttribute="centerX" id="ycu-Gg-hDl"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> </subviews> <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="MnH-T0-9ye" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="45" id="ABS-et-C1Y"/> <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="MnH-T0-9ye" secondAttribute="trailing" constant="45" id="bFi-tH-mLF"/> <constraint firstItem="MnH-T0-9ye" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="nfR-kN-8UJ"/> <constraint firstItem="MnH-T0-9ye" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="yAL-tj-KsX"/> </constraints> <connections> <outlet property="label_content" destination="raL-bN-qOz" id="Q9R-w7-I7r"/> <outlet property="label_title" destination="8x2-bB-pNn" id="HQr-lE-rhB"/> <outlet property="view_container" destination="MnH-T0-9ye" id="6dr-Ul-VK3"/> </connections> <point key="canvasLocation" x="-27" y="21"/> </view> </objects> <resources> <namedColor name="FE6E0D"> <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </namedColor> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> WanPai/SceneDelegate.swift
@@ -8,45 +8,40 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). guard let _ = (scene as? UIWindowScene) else { return } guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) window?.frame = windowScene.coordinateSpace.bounds let nav = BaseNav(rootViewController: LoginVC()) window?.rootViewController = nav window?.makeKeyAndVisible() } func sceneDidDisconnect(_ scene: UIScene) { // Called as the scene is being released by the system. // This occurs shortly after the scene enters the background, or when its session is discarded. // Release any resources associated with this scene that can be re-created the next time the scene connects. // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). } func sceneDidBecomeActive(_ scene: UIScene) { // Called when the scene has moved from an inactive state to an active state. // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. } func sceneWillResignActive(_ scene: UIScene) { // Called when the scene will move from an active state to an inactive state. // This may occur due to temporary interruptions (ex. an incoming phone call). } func sceneWillEnterForeground(_ scene: UIScene) { // Called as the scene transitions from the background to the foreground. // Use this method to undo the changes made on entering the background. } func sceneDidEnterBackground(_ scene: UIScene) { // Called as the scene transitions from the foreground to the background. // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. } } WanPai/ViewController.swift
File was deleted