代码重构
|
@ -20,6 +20,34 @@
|
|||
ReferencedContainer = "container:">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "PHAlert"
|
||||
BuildableName = "PHAlert"
|
||||
BlueprintName = "PHAlert"
|
||||
ReferencedContainer = "container:">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "PHCore"
|
||||
BuildableName = "PHCore"
|
||||
BlueprintName = "PHCore"
|
||||
ReferencedContainer = "container:">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
|
|
|
@ -1,445 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 51;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
33E2B6CF0D9BD11D8C027DE6 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB925B38880FB296AF5D219F /* Pods_Example.framework */; };
|
||||
CD4B40AA23017C09005111B9 /* RootVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4B40A923017C09005111B9 /* RootVC.swift */; };
|
||||
CD8BFF1823014850001E08DD /* TestToastVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8BFF1723014850001E08DD /* TestToastVC.swift */; };
|
||||
CD8BFF1A2301485E001E08DD /* TestAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8BFF192301485E001E08DD /* TestAlertVC.swift */; };
|
||||
CD8BFF1C23014867001E08DD /* TestGuardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8BFF1B23014867001E08DD /* TestGuardVC.swift */; };
|
||||
CD8BFF1E230148DD001E08DD /* BaseListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8BFF1D230148DD001E08DD /* BaseListVC.swift */; };
|
||||
CD8BFF2023014CB5001E08DD /* EmptyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8BFF1F23014CB5001E08DD /* EmptyVC.swift */; };
|
||||
CDA4E03C20D3935B00CD2A0C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA4E03B20D3935B00CD2A0C /* AppDelegate.swift */; };
|
||||
CDA4E03E20D3935B00CD2A0C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA4E03D20D3935B00CD2A0C /* ViewController.swift */; };
|
||||
CDA4E04120D3935B00CD2A0C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDA4E03F20D3935B00CD2A0C /* Main.storyboard */; };
|
||||
CDA4E04320D3935C00CD2A0C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CDA4E04220D3935C00CD2A0C /* Assets.xcassets */; };
|
||||
CDA4E04620D3935C00CD2A0C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDA4E04420D3935C00CD2A0C /* LaunchScreen.storyboard */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
AB925B38880FB296AF5D219F /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
BA1A6035F1B9A658B3BB225C /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
|
||||
CA1298266BE89D7950DE99F2 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
CD4B40A923017C09005111B9 /* RootVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootVC.swift; sourceTree = "<group>"; };
|
||||
CD59584620E36DA8000F6427 /* Example-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Example-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
CD8BFF1723014850001E08DD /* TestToastVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestToastVC.swift; sourceTree = "<group>"; };
|
||||
CD8BFF192301485E001E08DD /* TestAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestAlertVC.swift; sourceTree = "<group>"; };
|
||||
CD8BFF1B23014867001E08DD /* TestGuardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestGuardVC.swift; sourceTree = "<group>"; };
|
||||
CD8BFF1D230148DD001E08DD /* BaseListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseListVC.swift; sourceTree = "<group>"; };
|
||||
CD8BFF1F23014CB5001E08DD /* EmptyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyVC.swift; sourceTree = "<group>"; };
|
||||
CDA4E03820D3935B00CD2A0C /* ProHUD 老项目.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ProHUD 老项目.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CDA4E03B20D3935B00CD2A0C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
CDA4E03D20D3935B00CD2A0C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||
CDA4E04020D3935B00CD2A0C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
CDA4E04220D3935C00CD2A0C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
CDA4E04520D3935C00CD2A0C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
CDA4E04720D3935C00CD2A0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
CDA4E03520D3935B00CD2A0C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
33E2B6CF0D9BD11D8C027DE6 /* Pods_Example.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
139E7589A813C8747459CA4F /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB925B38880FB296AF5D219F /* Pods_Example.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
6C5AB15780B2383CC5603A95 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CA1298266BE89D7950DE99F2 /* Pods-Example.debug.xcconfig */,
|
||||
BA1A6035F1B9A658B3BB225C /* Pods-Example.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDA4E02F20D3935B00CD2A0C = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDA4E03A20D3935B00CD2A0C /* Example */,
|
||||
CDA4E03920D3935B00CD2A0C /* Products */,
|
||||
6C5AB15780B2383CC5603A95 /* Pods */,
|
||||
139E7589A813C8747459CA4F /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDA4E03920D3935B00CD2A0C /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDA4E03820D3935B00CD2A0C /* ProHUD 老项目.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDA4E03A20D3935B00CD2A0C /* Example */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDA4E03B20D3935B00CD2A0C /* AppDelegate.swift */,
|
||||
CD4B40A923017C09005111B9 /* RootVC.swift */,
|
||||
CD8BFF1D230148DD001E08DD /* BaseListVC.swift */,
|
||||
CD8BFF1F23014CB5001E08DD /* EmptyVC.swift */,
|
||||
CDA4E03D20D3935B00CD2A0C /* ViewController.swift */,
|
||||
CD8BFF1723014850001E08DD /* TestToastVC.swift */,
|
||||
CD8BFF192301485E001E08DD /* TestAlertVC.swift */,
|
||||
CD8BFF1B23014867001E08DD /* TestGuardVC.swift */,
|
||||
CDA4E03F20D3935B00CD2A0C /* Main.storyboard */,
|
||||
CDA4E04220D3935C00CD2A0C /* Assets.xcassets */,
|
||||
CDA4E04420D3935C00CD2A0C /* LaunchScreen.storyboard */,
|
||||
CDA4E04720D3935C00CD2A0C /* Info.plist */,
|
||||
CD59584620E36DA8000F6427 /* Example-Bridging-Header.h */,
|
||||
);
|
||||
path = Example;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CDA4E03720D3935B00CD2A0C /* Example */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CDA4E04A20D3935C00CD2A0C /* Build configuration list for PBXNativeTarget "Example" */;
|
||||
buildPhases = (
|
||||
0FD6F25B57F7283E6523E731 /* [CP] Check Pods Manifest.lock */,
|
||||
CDA4E03420D3935B00CD2A0C /* Sources */,
|
||||
CDA4E03520D3935B00CD2A0C /* Frameworks */,
|
||||
CDA4E03620D3935B00CD2A0C /* Resources */,
|
||||
FE957B34A041E54F84E4F88C /* [CP] Embed Pods Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Example;
|
||||
productName = Example;
|
||||
productReference = CDA4E03820D3935B00CD2A0C /* ProHUD 老项目.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CDA4E03020D3935B00CD2A0C /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0930;
|
||||
LastUpgradeCheck = 0930;
|
||||
ORGANIZATIONNAME = "Titan Studio";
|
||||
TargetAttributes = {
|
||||
CDA4E03720D3935B00CD2A0C = {
|
||||
CreatedOnToolsVersion = 9.3;
|
||||
LastSwiftMigration = 1010;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CDA4E03320D3935B00CD2A0C /* Build configuration list for PBXProject "Example" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CDA4E02F20D3935B00CD2A0C;
|
||||
productRefGroup = CDA4E03920D3935B00CD2A0C /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CDA4E03720D3935B00CD2A0C /* Example */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
CDA4E03620D3935B00CD2A0C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDA4E04620D3935C00CD2A0C /* LaunchScreen.storyboard in Resources */,
|
||||
CDA4E04320D3935C00CD2A0C /* Assets.xcassets in Resources */,
|
||||
CDA4E04120D3935B00CD2A0C /* Main.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
0FD6F25B57F7283E6523E731 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Example-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;
|
||||
};
|
||||
FE957B34A041E54F84E4F88C /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CDA4E03420D3935B00CD2A0C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CD8BFF1823014850001E08DD /* TestToastVC.swift in Sources */,
|
||||
CDA4E03E20D3935B00CD2A0C /* ViewController.swift in Sources */,
|
||||
CD8BFF2023014CB5001E08DD /* EmptyVC.swift in Sources */,
|
||||
CD8BFF1A2301485E001E08DD /* TestAlertVC.swift in Sources */,
|
||||
CD4B40AA23017C09005111B9 /* RootVC.swift in Sources */,
|
||||
CDA4E03C20D3935B00CD2A0C /* AppDelegate.swift in Sources */,
|
||||
CD8BFF1C23014867001E08DD /* TestGuardVC.swift in Sources */,
|
||||
CD8BFF1E230148DD001E08DD /* BaseListVC.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
CDA4E03F20D3935B00CD2A0C /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CDA4E04020D3935B00CD2A0C /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDA4E04420D3935C00CD2A0C /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CDA4E04520D3935C00CD2A0C /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CDA4E04820D3935C00CD2A0C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDA4E04920D3935C00CD2A0C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CDA4E04B20D3935C00CD2A0C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = CA1298266BE89D7950DE99F2 /* Pods-Example.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = Example/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xaoxuu.ProHUDExample;
|
||||
PRODUCT_NAME = "ProHUD 老项目";
|
||||
PROVISIONING_PROFILE = "b32d51a3-c20b-408f-aebf-11d2ea3811cd";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Example/Example-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDA4E04C20D3935C00CD2A0C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = BA1A6035F1B9A658B3BB225C /* Pods-Example.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = Example/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xaoxuu.ProHUDExample;
|
||||
PRODUCT_NAME = "ProHUD 老项目";
|
||||
PROVISIONING_PROFILE = "b32d51a3-c20b-408f-aebf-11d2ea3811cd";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Example/Example-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CDA4E03320D3935B00CD2A0C /* Build configuration list for PBXProject "Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDA4E04820D3935C00CD2A0C /* Debug */,
|
||||
CDA4E04920D3935C00CD2A0C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CDA4E04A20D3935C00CD2A0C /* Build configuration list for PBXNativeTarget "Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDA4E04B20D3935C00CD2A0C /* Debug */,
|
||||
CDA4E04C20D3935C00CD2A0C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = CDA4E03020D3935B00CD2A0C /* Project object */;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Example.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,78 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1100"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "CDA4E03720D3935B00CD2A0C"
|
||||
BuildableName = "ProHUD 老项目.app"
|
||||
BlueprintName = "Example"
|
||||
ReferencedContainer = "container:Example.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "CDA4E03720D3935B00CD2A0C"
|
||||
BuildableName = "ProHUD 老项目.app"
|
||||
BlueprintName = "Example"
|
||||
ReferencedContainer = "container:Example.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "CDA4E03720D3935B00CD2A0C"
|
||||
BuildableName = "ProHUD 老项目.app"
|
||||
BlueprintName = "Example"
|
||||
ReferencedContainer = "container:Example.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Example.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,76 +0,0 @@
|
|||
//
|
||||
// AppDelegate.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2018/6/15.
|
||||
// Copyright © 2018 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
@UIApplicationMain
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
// Override point for customization after application launch.
|
||||
|
||||
let vc = RootVC()
|
||||
window = UIWindow.init(frame: UIScreen.main.bounds)
|
||||
window?.rootViewController = vc
|
||||
window?.makeKeyAndVisible()
|
||||
ProHUD.config { (cfg) in
|
||||
// 可自动获取根控制器,如果获取失败请主动设置此值
|
||||
// cfg.rootViewController = vc
|
||||
cfg.alert { (a) in
|
||||
// a.titleFont = .bold(22)
|
||||
// a.bodyFont = .regular(17)
|
||||
// a.boldTextFont = .bold(18)
|
||||
// a.buttonFont = .bold(18)
|
||||
a.forceQuitTimer = 5 // 多少秒后可以强制关闭弹窗(为了方便测试,一般不要设置这么小)
|
||||
}
|
||||
// cfg.toast { (t) in
|
||||
// t.titleFont = .bold(18)
|
||||
// t.bodyFont = .regular(16)
|
||||
// t.iconSize = .init(width: 42, height: 42)
|
||||
// }
|
||||
// cfg.guard { (g) in
|
||||
// g.titleFont = .bold(22)
|
||||
// g.subTitleFont = .bold(20)
|
||||
// g.bodyFont = .regular(17)
|
||||
// g.buttonFont = .bold(18)
|
||||
// }
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func applicationWillResignActive(_ application: UIApplication) {
|
||||
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
|
||||
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
|
||||
}
|
||||
|
||||
func applicationDidEnterBackground(_ application: UIApplication) {
|
||||
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
|
||||
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
|
||||
NotificationCenter.default.post(name: NSNotification.Name.init("applicationDidEnterBackground"), object: nil)
|
||||
|
||||
}
|
||||
|
||||
func applicationWillEnterForeground(_ application: UIApplication) {
|
||||
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
|
||||
}
|
||||
|
||||
func applicationDidBecomeActive(_ application: UIApplication) {
|
||||
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
|
||||
}
|
||||
|
||||
func applicationWillTerminate(_ application: UIApplication) {
|
||||
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" systemVersion="17A277" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -1,46 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ttk-4w-IeX">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--ProHUD-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="ProHUD_老项目" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="ProHUD" id="Yzl-Q6-9v7"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1050.7246376811595" y="133.92857142857142"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="HjC-hd-4PZ">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="ttk-4w-IeX" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="juX-kz-8Ti">
|
||||
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="gyV-fc-5FK"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Lg9-xW-IRh" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="140.57971014492756" y="133.92857142857142"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -1,106 +0,0 @@
|
|||
//
|
||||
// BaseListVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
typealias Callback = () -> Void
|
||||
|
||||
struct Table {
|
||||
var sections = [Section]()
|
||||
mutating func addSection(title: String, callback: @escaping (inout Section) -> Void) {
|
||||
var sec = Section()
|
||||
sec.header = title
|
||||
callback(&sec)
|
||||
sections.append(sec)
|
||||
}
|
||||
}
|
||||
struct Section {
|
||||
var header = ""
|
||||
var footer = ""
|
||||
var rows = [Row]()
|
||||
mutating func addRow(title: String, subtitle: String? = nil, callback: @escaping Callback) {
|
||||
rows.append(Row(title: title, subtitle: subtitle, callback: callback))
|
||||
}
|
||||
}
|
||||
struct Row {
|
||||
var title: String
|
||||
var subtitle: String?
|
||||
var callback: Callback
|
||||
}
|
||||
|
||||
class BaseListVC: UIViewController {
|
||||
|
||||
|
||||
var ts = [[String]]()
|
||||
var cs = [[Callback]]()
|
||||
|
||||
var vm = Table()
|
||||
var secs = [Section]()
|
||||
|
||||
lazy var tableView: UITableView = {
|
||||
let tv: UITableView
|
||||
if #available(iOS 13.0, *) {
|
||||
tv = UITableView(frame: .zero, style: .insetGrouped)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
tv = UITableView(frame: .zero, style: .grouped)
|
||||
}
|
||||
return tv
|
||||
}()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
|
||||
view.addSubview(tableView)
|
||||
tableView.dataSource = self
|
||||
tableView.delegate = self
|
||||
tableView.snp.makeConstraints { (mk) in
|
||||
mk.edges.equalToSuperview()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
extension BaseListVC: UITableViewDataSource, UITableViewDelegate {
|
||||
func numberOfSections(in tableView: UITableView) -> Int {
|
||||
return vm.sections.count
|
||||
}
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return vm.sections[section].rows.count
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell: UITableViewCell
|
||||
if let c = tableView.dequeueReusableCell(withIdentifier: "cell") {
|
||||
cell = c
|
||||
} else {
|
||||
cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
|
||||
cell.textLabel?.numberOfLines = 0
|
||||
cell.detailTextLabel?.textColor = .gray
|
||||
cell.detailTextLabel?.numberOfLines = 0
|
||||
cell.accessoryType = .disclosureIndicator
|
||||
}
|
||||
cell.textLabel?.text = vm.sections[indexPath.section].rows[indexPath.row].title
|
||||
cell.detailTextLabel?.text = vm.sections[indexPath.section].rows[indexPath.row].subtitle
|
||||
return cell
|
||||
}
|
||||
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||
return vm.sections[section].header
|
||||
}
|
||||
func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
|
||||
return vm.sections[section].footer
|
||||
}
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
vm.sections[indexPath.section].rows[indexPath.row].callback()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
//
|
||||
// EmptyVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import SnapKit
|
||||
import Inspire
|
||||
|
||||
class EmptyVC: UIViewController {
|
||||
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
view.backgroundColor = UIColor(white: 0.95, alpha: 1)
|
||||
// Do any additional setup after loading the view.
|
||||
|
||||
let lb = UILabel()
|
||||
lb.numberOfLines = 0
|
||||
lb.text = title
|
||||
lb.font = .regular(40)
|
||||
view.addSubview(lb)
|
||||
lb.snp.makeConstraints { (mk) in
|
||||
mk.center.equalToSuperview()
|
||||
mk.leading.greaterThanOrEqualToSuperview().offset(16)
|
||||
mk.trailing.lessThanOrEqualToSuperview().offset(-16)
|
||||
}
|
||||
|
||||
let btn = UIButton(type: .system)
|
||||
btn.titleLabel?.font = .bold(20)
|
||||
btn.setTitle("Dismiss", for: .normal)
|
||||
btn.addTarget(self, action: #selector(didTappedDismiss(_:)), for: .touchUpInside)
|
||||
view.addSubview(btn)
|
||||
btn.snp.makeConstraints { (mk) in
|
||||
mk.top.equalToSuperview().offset(Inspire.current.layout.safeAreaInsets(for: self).top)
|
||||
mk.trailing.equalToSuperview().offset(-16)
|
||||
mk.height.equalTo(44)
|
||||
}
|
||||
}
|
||||
|
||||
@objc func didTappedDismiss(_ sender: UIButton) {
|
||||
dismiss(animated: true, completion: nil)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension UIViewController {
|
||||
func presentEmptyVC(title: String?) {
|
||||
let vc = EmptyVC()
|
||||
vc.title = title
|
||||
present(vc, animated: true, completion: nil)
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
//
|
||||
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||
//
|
||||
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDefault</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,88 +0,0 @@
|
|||
//
|
||||
// RootVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
class RootVC: UIViewController {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
let vc = ViewController()
|
||||
let nav = UINavigationController(rootViewController: vc)
|
||||
addChild(nav)
|
||||
view.addSubview(nav.view)
|
||||
nav.view.frame = view.bounds
|
||||
if #available(iOS 11.0, *) {
|
||||
nav.navigationBar.prefersLargeTitles = true
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// MARK: - Navigation
|
||||
|
||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
// Get the new view controller using segue.destination.
|
||||
// Pass the selected object to the new view controller.
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
extension ProHUD.Scene {
|
||||
|
||||
static var delete: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene(identifier: "prohud.delete")
|
||||
scene.image = UIImage(named: "prohud.trash")
|
||||
scene.title = "确认删除"
|
||||
scene.message = "此操作不可撤销"
|
||||
return scene
|
||||
}
|
||||
|
||||
static var buy: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene(identifier: "buy")
|
||||
scene.image = UIImage(named: "alert.buy")
|
||||
scene.title = "确认付款"
|
||||
scene.message = "一旦购买拒不退款"
|
||||
return scene
|
||||
}
|
||||
|
||||
/// 重写的loading场景
|
||||
static var loading: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "prohud.loading.rotate")
|
||||
scene.image = UIImage(named: "prohud.rainbow.circle")
|
||||
scene.title = "坐和放宽"
|
||||
scene.message = "正在处理一些事情"
|
||||
scene.alertDuration = 0
|
||||
scene.toastDuration = 0
|
||||
return scene
|
||||
}
|
||||
|
||||
static var sync: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "sync.rotate")
|
||||
scene.image = UIImage(named: "prohud.rainbow.circle")
|
||||
scene.title = "正在同步"
|
||||
scene.alertDuration = 0
|
||||
scene.toastDuration = 0
|
||||
return scene
|
||||
}
|
||||
static var sync2: ProHUD.Scene {
|
||||
var scene = ProHUD.Scene.init(identifier: "sync.rotate")
|
||||
scene.image = UIImage(named: "prohud.rainbow.circle")
|
||||
scene.alertDuration = 0
|
||||
scene.toastDuration = 0
|
||||
return scene
|
||||
}
|
||||
|
||||
}
|
|
@ -1,332 +0,0 @@
|
|||
//
|
||||
// TestAlertVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
// 模拟2秒后同步成功
|
||||
func loadingSuccessAfter2Seconds() {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+2) {
|
||||
Alert.find("loading") { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "同步成功"
|
||||
vm.message = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateProgress(callback: @escaping (CGFloat) -> Void) {
|
||||
let s = DispatchSemaphore(value: 1)
|
||||
DispatchQueue.global().async {
|
||||
for i in 0 ... 100 {
|
||||
s.wait()
|
||||
DispatchQueue.main.async {
|
||||
callback(CGFloat(i)/100)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.03) {
|
||||
s.signal()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TestAlertVC: BaseListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
vm.addSection(title: "最简单的写法") { (sec) in
|
||||
sec.addRow(title: "Alert.push(scene: .loading)") {
|
||||
Alert.push(scene: .loading)
|
||||
}
|
||||
sec.addRow(title: "Alert.push(scene: .success)") {
|
||||
Alert.push(scene: .success)
|
||||
}
|
||||
sec.addRow(title: "Alert.push(scene: .warning)") {
|
||||
Alert.push(scene: .warning)
|
||||
}
|
||||
sec.addRow(title: "Alert.push(scene: .error)") {
|
||||
Alert.push(scene: .error)
|
||||
}
|
||||
sec.addRow(title: "Alert.push(scene: .failure)") {
|
||||
Alert.push(scene: .failure)
|
||||
}
|
||||
sec.footer = "这些是自带的场景,可以重写已有场景,或者扩展新的场景。"
|
||||
}
|
||||
|
||||
vm.addSection(title: "常用示例") { (sec) in
|
||||
// MARK: 同步成功(写法1)
|
||||
sec.addRow(title: "正在同步(写法1)", subtitle: "创建的时候就布局好了。") {
|
||||
Alert.push("loading", scene: .sync2) { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.title = "正在同步"
|
||||
}
|
||||
}
|
||||
loadingSuccessAfter2Seconds()
|
||||
}
|
||||
// MARK: 同步成功(写法2)
|
||||
sec.addRow(title: "正在同步(写法2)", subtitle: "创建的时候没有布局完,发出去之后再更新布局。") {
|
||||
Alert.push("loading", scene: .sync2)
|
||||
loadingSuccessAfter2Seconds()
|
||||
// 先发出去再更新(添加文字)
|
||||
Alert.find("loading") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.title = "正在同步"
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 正在同步(更新进度)
|
||||
sec.addRow(title: "正在同步(有进度显示)") {
|
||||
Alert.push("progress", scene: .sync) { (a) in
|
||||
a.update(progress: 0)
|
||||
updateProgress { (pct) in
|
||||
a.update(progress: pct)
|
||||
if pct >= 1 {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
|
||||
a.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "同步成功"
|
||||
vm.message = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 同步失败和重试
|
||||
sec.addRow(title: "同步失败和重试(布局变化)", subtitle: "添加、删除按钮使得窗口大小发生了变化。") {
|
||||
Alert.push("loading", scene: .loading)
|
||||
func loading() {
|
||||
Alert.find("loading") { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .loading
|
||||
vm.title = "正在同步"
|
||||
vm.message = "请稍等片刻"
|
||||
vm.remove(action: 0, 1)
|
||||
}
|
||||
a.startRotate()
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+2) {
|
||||
a.update { (vm) in
|
||||
vm.scene = .error
|
||||
vm.title = "同步失败"
|
||||
vm.message = "请检查网络是否通畅"
|
||||
vm.add(action: .default, title: "重试") {
|
||||
loading()
|
||||
}
|
||||
vm.add(action: .cancel, title: "取消", handler: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
loading()
|
||||
}
|
||||
// MARK: 自定义要旋转的图片
|
||||
sec.addRow(title: "自定义要旋转的图片", subtitle: "添加了自定义视图,在更新的时候记得要视情况移除。") {
|
||||
Alert.push(scene: .privacy, title: "正在授权") { (vc) in
|
||||
vc.identifier = "loading"
|
||||
let imgv = UIImageView(image: UIImage(named: "prohud.rainbow.circle"))
|
||||
vc.imageView.addSubview(imgv)
|
||||
imgv.tag = 1
|
||||
imgv.snp.makeConstraints { (mk) in
|
||||
mk.center.equalToSuperview()
|
||||
mk.width.height.equalTo(18)
|
||||
}
|
||||
vc.startRotate(imgv.layer, speed: 4)
|
||||
vc.vm.duration = 0
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
|
||||
Alert.find("loading") { (vc) in
|
||||
vc.imageView.viewWithTag(1)?.removeFromSuperview()
|
||||
vc.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "授权成功"
|
||||
vm.duration = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sec.footer = "写法1和写法2动画效果略微不同"
|
||||
}
|
||||
|
||||
vm.addSection(title: "为了解决代码逻辑疏漏导致程序卡死、弹窗重叠等问题") { (sec) in
|
||||
// MARK: 极端场景:正在同步(超时未处理)
|
||||
sec.addRow(title: "极端场景:正在同步(超时未处理)", subtitle: "超时未处理的意外情况,弹窗可以手动关闭。(在config中配置所需时间)") {
|
||||
Alert.push(scene: .loading, title: "坐和放宽", message: "我们正在帮你搞定一切") { (a) in
|
||||
a.identifier = "loading"
|
||||
a.startRotate()
|
||||
a.didForceQuit {
|
||||
Toast.push(scene: .default, title: "点击了强制关闭", message: "您可以处理超时事件")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: 极端场景:短时间内调用了多次同一个弹窗
|
||||
sec.addRow(title: "极端场景:短时间内调用了多次同一个弹窗", subtitle: "多次调用,页面弹窗应该是毫无变化的。(本例中,4秒内调用了6次)") {
|
||||
func loading(_ index: Int = 1) {
|
||||
if Alert.find("loading").count == 0 {
|
||||
Alert.push("loading", scene: .loading) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "正在加载"
|
||||
}
|
||||
a.startRotate()
|
||||
}
|
||||
}
|
||||
}
|
||||
loading(1)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
loading(2)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+2) {
|
||||
loading(3)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+3) {
|
||||
loading(4)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+3.5) {
|
||||
loading(5)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+4) {
|
||||
loading(6)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+4.5) {
|
||||
Alert.push("loading", scene: .success) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "测试结束"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 极端场景:多个不同的弹窗重叠
|
||||
sec.addRow(title: "极端场景:多个不同的弹窗重叠", subtitle: "多个弹窗不得不重叠的时候,ProHUD的景深处理可以使其看起来舒服一些。") {
|
||||
func a() {
|
||||
Alert.push("a", scene: .default) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "Windows 10"
|
||||
vm.message = "Windows 10不是為所有人設計,而是為每個人設計"
|
||||
vm.icon = UIImage(named: "prohud.windmill")
|
||||
vm.duration = 0
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
b()
|
||||
}
|
||||
}
|
||||
}
|
||||
func b() {
|
||||
Alert.push("b", scene: .warning) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "Windows 10"
|
||||
vm.message = "不要说我们没有警告过你"
|
||||
vm.duration = 0
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
c()
|
||||
}
|
||||
}
|
||||
func c() {
|
||||
Alert.push("c", scene: .message) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "Windows 10"
|
||||
vm.message = "我们都有不顺利的时候"
|
||||
vm.duration = 0
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
d()
|
||||
}
|
||||
}
|
||||
func d() {
|
||||
Alert.push("d", scene: .loading) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "Windows 10"
|
||||
vm.message = "正在处理一些事情"
|
||||
vm.duration = 0
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+3) {
|
||||
e()
|
||||
}
|
||||
}
|
||||
func e() {
|
||||
Alert.push("e", scene: .failure) { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "更新失败"
|
||||
vm.message = "*回到以前的版本"
|
||||
vm.add(action: .default, title: "好的") {
|
||||
Alert.pop("e")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.3) {
|
||||
Alert.pop("d")
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.6) {
|
||||
Alert.pop("c")
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.9) {
|
||||
Alert.pop("b")
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1.2) {
|
||||
Alert.pop("a")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
a()
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
vm.addSection(title: "") { (sec) in
|
||||
|
||||
// MARK: 测试较长的标题和内容
|
||||
sec.addRow(title: "测试较长的标题和内容") {
|
||||
Alert.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .confirm
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.add(action: .default, title: "我知道了", handler: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 测试特别长的标题和内容
|
||||
sec.addRow(title: "测试特别长的标题和内容", subtitle: "这种情况编码阶段就可以避免,所以没有做特别处理,请控制内容长度不要过长。") {
|
||||
Alert.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来 的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.add(action: .default, title: "我知道了", handler: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 只有标题
|
||||
sec.addRow(title: "只有标题") {
|
||||
Alert.push(scene: .message, title: "这是标题")
|
||||
}
|
||||
// MARK: 只有消息
|
||||
sec.addRow(title: "只有消息") {
|
||||
Alert.push(scene: .message, message: "这是消息")
|
||||
}
|
||||
// MARK: 只有消息
|
||||
sec.addRow(title: "既没有标题也没有消息") {
|
||||
Alert.push()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,188 +0,0 @@
|
|||
//
|
||||
// TestGuardVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
import Inspire
|
||||
import WebKit
|
||||
|
||||
class TestGuardVC: BaseListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
vm.addSection(title: "简单使用") { (sec) in
|
||||
// MARK: 删除菜单
|
||||
sec.addRow(title: "示例:删除菜单") {
|
||||
Guard.push("del") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .destructive, title: "删除") { [weak vc] in
|
||||
Alert.push(scene: .delete) { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .destructive, title: "删除") { [weak vc] in
|
||||
vc?.pop()
|
||||
}
|
||||
vm.add(action: .cancel, title: "取消", handler: nil)
|
||||
}
|
||||
}
|
||||
vc?.pop()
|
||||
}
|
||||
vm.add(action: .cancel, title: "取消", handler: nil)
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
Guard.find("del") { vc in
|
||||
vc.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: 升级至专业版
|
||||
sec.addRow(title: "示例:升级至专业版") {
|
||||
// 可以通过id来避免重复
|
||||
Guard.push("pro") { (vc) in
|
||||
vc.identifier = "pro"
|
||||
vc.update { (vm) in
|
||||
vm.add(title: "升级至专业版")
|
||||
vm.add(subTitle: "解锁功能")
|
||||
vm.add(message: "功能1功能2...")
|
||||
vm.add(subTitle: "价格")
|
||||
vm.add(message: "只需一次性付费$2999即可永久享用。")
|
||||
vm.add(action: .destructive, title: "购买") { [weak vc] in
|
||||
Alert.push(scene: .buy) { (vc) in
|
||||
vc.identifier = "confirm"
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .destructive, title: "购买") { [weak vc] in
|
||||
vc?.update({ (vm) in
|
||||
vm.scene = .loading
|
||||
vm.title = "正在付款"
|
||||
vm.message = "请稍等片刻"
|
||||
vm.remove(action: 0, 1)
|
||||
})
|
||||
vc?.startRotate()
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
|
||||
vc?.update({ (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "购买成功"
|
||||
vm.message = "感谢您的支持"
|
||||
vm.add(action: .default, title: "我知道了") {
|
||||
vc?.pop()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
vm.add(action: .cancel, title: "取消", handler: nil)
|
||||
}
|
||||
}
|
||||
vc?.pop()
|
||||
}
|
||||
vm.add(action: .cancel, title: "取消", handler: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
vm.addSection(title: "添加自定义视图") { (sec) in
|
||||
// MARK: 选项切换
|
||||
sec.addRow(title: "示例:修改背景蒙版", subtitle: "很方便地添加自定义控件") {
|
||||
Guard.push() { (vc) in
|
||||
if #available(iOS 13.0, *) {
|
||||
let imgv = UIImageView(image: UIImage(systemName: "photo.fill.on.rectangle.fill"))
|
||||
vc.textStack.addArrangedSubview(imgv)
|
||||
imgv.contentMode = .scaleAspectFit
|
||||
imgv.snp.makeConstraints { (mk) in
|
||||
mk.height.equalTo(80)
|
||||
}
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
|
||||
// 添加标题
|
||||
vc.vm.add(title: "背景蒙版")
|
||||
// 添加标题
|
||||
vc.vm.add(subTitle: "选择一种模糊效果")
|
||||
// 添加控件
|
||||
let seg = UISegmentedControl(items: ["extraLight", "light", "dark", "none"])
|
||||
seg.selectedSegmentIndex = 1
|
||||
vc.textStack.addArrangedSubview(seg)
|
||||
seg.snp.makeConstraints { (mk) in
|
||||
mk.height.equalTo(40)
|
||||
}
|
||||
// 添加标题
|
||||
vc.vm.add(subTitle: "设置蒙版透明度")
|
||||
// 添加控件
|
||||
let slider = UISlider()
|
||||
slider.minimumValue = 0
|
||||
slider.maximumValue = 100
|
||||
slider.value = 100
|
||||
vc.textStack.addArrangedSubview(slider)
|
||||
slider.snp.makeConstraints { (mk) in
|
||||
mk.height.equalTo(40)
|
||||
}
|
||||
// 添加按钮
|
||||
vc.vm.add(action: .default, title: "OK") { [weak vc] in
|
||||
vc?.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: 隐私协议页面
|
||||
sec.addRow(title: "示例:弹出隐私协议页面", subtitle: "也可以完全控制整个页面") {
|
||||
Guard.push("license") { (vc) in
|
||||
// 全屏
|
||||
vc.isFullScreen = true
|
||||
// 添加标题
|
||||
vc.vm.add(title: "隐私协议").snp.makeConstraints { (mk) in
|
||||
mk.height.equalTo(44)
|
||||
}
|
||||
// 添加网页
|
||||
let web = WKWebView.init(frame: .zero)
|
||||
web.layer.masksToBounds = true
|
||||
web.layer.cornerRadius = ProHUD.shared.config.guard.buttonCornerRadius
|
||||
web.scrollView.showsHorizontalScrollIndicator = false
|
||||
if let url = URL(string: "https://xaoxuu.com/wiki/prohud/") {
|
||||
web.load(URLRequest(url: url))
|
||||
}
|
||||
vc.textStack.addArrangedSubview(web)
|
||||
web.snp.makeConstraints { (mk) in
|
||||
mk.leading.trailing.equalToSuperview()
|
||||
}
|
||||
// 添加文本
|
||||
vc.vm.add(message: "请认真阅读以上内容,当您阅读完毕并同意协议内容时点击接受按钮。")
|
||||
// 添加按钮
|
||||
vc.vm.add(action: .default, title: "接受") { [weak vc] in
|
||||
vc?.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vm.addSection(title: "对比效果") { (sec) in
|
||||
// MARK: 对比:原生的ActionSheet
|
||||
sec.addRow(title: "对比:原生的ActionSheet") {
|
||||
let ac = UIAlertController(title: "Title", message: "message", preferredStyle: .actionSheet)
|
||||
let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
|
||||
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
|
||||
ac.addAction(ok)
|
||||
ac.addAction(cancel)
|
||||
ac.popoverPresentationController?.sourceView = self.view
|
||||
self.present(ac, animated: true, completion: nil)
|
||||
}
|
||||
// MARK: 对比:原生Present效果
|
||||
sec.addRow(title: "对比:原生Present效果") {
|
||||
let vc = UIViewController()
|
||||
vc.view.backgroundColor = .white
|
||||
vc.title = "ceshi"
|
||||
self.present(vc, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,240 +0,0 @@
|
|||
//
|
||||
// TestToastVC.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2019/8/12.
|
||||
// Copyright © 2019 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
// 模拟15秒后同步成功
|
||||
func loadingSuccessAfter15Seconds() {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 15) {
|
||||
Toast.find("loading") { (a) in
|
||||
a.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "同步成功"
|
||||
vm.message = "啊哈哈哈哈哈哈哈哈"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class TestToastVC: BaseListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
|
||||
vm.addSection(title: "简单的例子") { (sec) in
|
||||
// MARK: Hello World
|
||||
sec.addRow(title: "Hello World") {
|
||||
Toast.push(title: "Hello World", message: "This is a test message from ProHUD.")
|
||||
}
|
||||
|
||||
// MARK: 场景:正在加载(没有进度显示)
|
||||
sec.addRow(title: "场景:正在加载(没有进度显示)") {
|
||||
Toast.push(scene: .loading).startRotate()
|
||||
loadingSuccessAfter15Seconds()
|
||||
}
|
||||
// MARK: 场景:正在加载(有进度显示)
|
||||
sec.addRow(title: "场景:正在加载(有进度显示)") {
|
||||
if Toast.find("progress").count == 0 {
|
||||
Toast.push("progress", scene: .loading) { (t) in
|
||||
t.update { (vm) in
|
||||
vm.title = "笑容正在加载"
|
||||
vm.message = "这通常不会太久"
|
||||
}
|
||||
t.startRotate()
|
||||
t.update(progress: 0)
|
||||
updateProgress { (pct) in
|
||||
t.update(progress: pct)
|
||||
if pct >= 1 {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
|
||||
t.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.icon = UIImage(named: "Feel1")
|
||||
vm.title = "加载成功"
|
||||
vm.message = "阿哈哈哈哈.jpg"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 场景:同步成功
|
||||
sec.addRow(title: "场景:同步成功") {
|
||||
let t = Toast.push(scene: .success, title: "同步成功", message: "点击查看详情")
|
||||
t.didTapped { [weak self, weak t] in
|
||||
self?.presentEmptyVC(title: "详情")
|
||||
t?.pop()
|
||||
}
|
||||
}
|
||||
// MARK: 场景:同步失败
|
||||
sec.addRow(title: "场景:同步失败") {
|
||||
Toast.push(scene: .error, title: "同步失败", message: "请稍后重试。点击查看详情") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.duration = 0
|
||||
}
|
||||
vc.didTapped { [weak self, weak vc] in
|
||||
self?.presentEmptyVC(title: "这是错误详情")
|
||||
vc?.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 场景:设备电量过低
|
||||
sec.addRow(title: "场景:设备电量过低", subtitle: "这条消息正文部分显示多行") {
|
||||
Toast.push(scene: .warning, title: "设备电量过低", message: "请及时对设备进行充电,以免影响使用。\n为了您的续航,我们已经为您限制了设备的峰值性能。") { (vc) in
|
||||
vc.vm.duration = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vm.addSection(title: "实用的例子") { (sec) in
|
||||
// MARK: 避免重复发布同一条信息
|
||||
sec.addRow(title: "避免重复发布同一条信息 (id=aaa)", subtitle: "为一个实例指定 identifier 可以避免重复出现。") {
|
||||
Toast.push("aaa") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.scene = .warning
|
||||
vm.message = "这则消息不会同时出现在多条横幅中。"
|
||||
vm.duration = 0
|
||||
}
|
||||
vc.pulse()
|
||||
}
|
||||
}
|
||||
// MARK: 根据 identifier 查找并修改实例
|
||||
sec.addRow(title: "根据 identifier 查找并修改实例 (id=aaa)", subtitle: "在本例中,如果找不到就不进行处理。") {
|
||||
// 本例和上例唯一的区别是 push -> find
|
||||
Toast.find("aaa") { (t) in
|
||||
t.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "找到了哈哈"
|
||||
vm.message = "根据 identifier 查找并修改实例"
|
||||
vm.duration = 0
|
||||
}
|
||||
t.pulse()
|
||||
}
|
||||
}
|
||||
// MARK: 传入指定图标
|
||||
sec.addRow(title: "传入指定图标", subtitle: "虽然您对实例具有有完全的自由,但是更建议提前在场景中设置好对应的图片。") {
|
||||
Toast.push(scene: .default, title: "传入指定图标测试", message: "这是消息内容") { (vc) in
|
||||
vc.update { (vm) in
|
||||
if #available(iOS 13.0, *) {
|
||||
vc.imageView.tintColor = .brown
|
||||
vm.icon = UIImage(systemName: "icloud.and.arrow.down")
|
||||
} else {
|
||||
vm.icon = UIImage(named: "icloud.and.arrow.down")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 禁止手势移除
|
||||
sec.addRow(title: "禁止手势移除", subtitle: "常用于优先级低但是必须用户处理的事件。") {
|
||||
Toast.push(scene: .default, title: "禁止手势移除", message: "这条消息无法通过向上滑动移出屏幕。5秒后自动消失,每次拖拽都会刷新倒计时。") { (vc) in
|
||||
vc.isRemovable = false
|
||||
vc.update { (vm) in
|
||||
vm.duration = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 组合使用示例
|
||||
sec.addRow(title: "和弹窗组合使用示例", subtitle: "如果有一个横幅消息需要用户做出选择怎么办?可以点击的时候弹出一个弹窗来。") {
|
||||
Toast.push(scene: .message, title: "好友邀请", message: "你收到一条好友邀请,点击查看详情。", duration: 10) { (vc) in
|
||||
vc.identifier = "xxx"
|
||||
vc.didTapped { [weak vc] in
|
||||
vc?.pop()
|
||||
Alert.push(scene: .confirm, title: "好友邀请", message: "用户xxx想要添加你为好友,是否同意?") { (vc) in
|
||||
vc.update { (vm) in
|
||||
vm.add(action: .default, title: "接受") { [weak vc] in
|
||||
vc?.pop()
|
||||
Toast.push(scene: .success, title: "好友添加成功", message: "这是消息内容")
|
||||
}
|
||||
vm.add(action: .cancel, title: "拒绝") {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: 自定义要旋转的图片
|
||||
sec.addRow(title: "自定义要旋转的图片", subtitle: "添加了自定义视图,在更新的时候记得要视情况移除。") {
|
||||
Toast.push(scene: .privacy, title: "正在授权", message: "请稍等片刻") { (t) in
|
||||
t.identifier = "loading"
|
||||
let imgv = UIImageView(image: UIImage(named: "prohud.rainbow.circle"))
|
||||
t.imageView.addSubview(imgv)
|
||||
imgv.tag = 1
|
||||
imgv.snp.makeConstraints { (mk) in
|
||||
mk.center.equalToSuperview()
|
||||
mk.width.height.equalTo(18)
|
||||
}
|
||||
t.startRotate(imgv.layer, speed: 4)
|
||||
t.vm.duration = 0
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
|
||||
Toast.find("loading") { (a) in
|
||||
a.imageView.viewWithTag(1)?.removeFromSuperview()
|
||||
a.update { (vm) in
|
||||
vm.scene = .success
|
||||
vm.title = "授权成功"
|
||||
vm.message = "啊哈哈哈哈哈哈哈哈"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
vm.addSection(title: "极端场景") { (sec) in
|
||||
|
||||
// MARK: 测试较长的标题和内容
|
||||
sec.addRow(title: "测试较长的标题和内容") {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 测试特别长的标题和内容
|
||||
sec.addRow(title: "测试特别长的标题和内容", subtitle: "可以在配置中设置 titleMaxLines/bodyMaxLines 来避免出现这种情况。") {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
vm.message = "正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过正在同步看到了你撒地方快乐撒的肌肤轮廓啊就是;来的跨省的人格人格离开那地方离开过"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 只有标题
|
||||
sec.addRow(title: "只有标题部分的效果", subtitle: "这种情况请控制文字不要太少,否则不美观。") {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.title = "坐和放宽,我们正在帮你搞定一切,这通常不会太久。"
|
||||
}
|
||||
}
|
||||
}
|
||||
// MARK: 只有正文
|
||||
sec.addRow(title: "只有正文部分的效果", subtitle: "这种情况请控制文字不要太少,否则不美观。") {
|
||||
Toast.push() { (a) in
|
||||
a.update { (vm) in
|
||||
vm.message = "坐和放宽,我们正在帮你搞定一切,这通常不会太久。\n不幸的是,它花费的时间比通常要长。"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
//
|
||||
// ViewController.swift
|
||||
// Example
|
||||
//
|
||||
// Created by xaoxuu on 2018/6/15.
|
||||
// Copyright © 2018 Titan Studio. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
import SnapKit
|
||||
import WebKit
|
||||
|
||||
class ViewController: BaseListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
// Do any additional setup after loading the view.
|
||||
title = "\(Bundle.main.infoDictionary?["CFBundleName"] ?? "ProHUD")"
|
||||
|
||||
|
||||
vm.addSection(title: "测试项目") { (sec) in
|
||||
sec.addRow(title: "Toast", subtitle: "横幅控件,支持图片、标题和正文。\n不支持添加按钮,但可以接受一个点击事件。") {
|
||||
let vc = TestToastVC()
|
||||
vc.title = "Toast"
|
||||
self.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
sec.addRow(title: "Alert", subtitle: "弹窗控件,支持图片、标题、正文和按钮。\n按钮不设置事件回调时可以自动pop。") {
|
||||
let vc = TestAlertVC()
|
||||
vc.title = "Alert"
|
||||
self.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
sec.addRow(title: "Guard", subtitle: "操作表控件,原生支持标题、副标题、正文和按钮,也可以添加任意视图。") {
|
||||
let vc = TestGuardVC()
|
||||
vc.title = "Guard"
|
||||
self.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
vm.addSection(title: "小提示") { (sec) in
|
||||
sec.addRow(title: "所有控件都是ViewController", subtitle: "可以监听进入、离开移除事件。\n推入、推出统一为 push/pop 操作。\n所有控件都可以在配置中完全自定义布局及样式。\n通过 identifier 来获取实例,方便进行多实例管理") {
|
||||
}
|
||||
sec.addRow(title: "基于场景的应用", subtitle: "一个场景就是一套模板,原生提供了一些常用场景,您可以覆写,也可以新建场景。\n在场景中可以指定持续时间、标题、图标、正文等数据。") {
|
||||
}
|
||||
sec.addRow(title: "样式与逻辑分离", subtitle: "您可以在场景中指定一些规则,也可以在配置中完全自定义布局样式。\n在使用的时候呢,只需要确定数据即可。") {
|
||||
}
|
||||
sec.addRow(title: "Loading图片旋转", subtitle: "可以通过调用 .startRotate() 并可传入适当参数来旋转,也可以自定义场景\n如果场景的 identifier 包含 .rotate 则会自动旋转图片") {
|
||||
}
|
||||
sec.addRow(title: "按钮默认行为", subtitle: "为了灵活性,default 和 destructive 按钮默认不会对实例进行 pop 操作,但是如果它们没有实现回调事件,则会自动 pop。cancel 按钮永远会自动 pop。") {
|
||||
}
|
||||
sec.addRow(title: "持续时间", subtitle: "设置 duration 来指定持续时间,设置为 0 可以永久持续。\n原生提供的 loading 场景持续时间为永久。\n如果弹窗添加了按钮,则持续时间会自动变成永久,除非手动设置。") {
|
||||
}
|
||||
sec.addRow(title: "支持深色模式", subtitle: "切换一下模式看看") {
|
||||
}
|
||||
}
|
||||
|
||||
vm.addSection(title: "更多") { (sec) in
|
||||
sec.addRow(title: "查看在线文档", subtitle: "https://xaoxuu.com/wiki/prohud/") {
|
||||
Guard.push("license") { (vc) in
|
||||
// 全屏
|
||||
vc.isFullScreen = true
|
||||
// 添加标题
|
||||
vc.vm.add(title: "ProHUD").snp.makeConstraints { (mk) in
|
||||
mk.height.equalTo(44)
|
||||
}
|
||||
// 添加网页
|
||||
let web = WKWebView.init(frame: .zero)
|
||||
web.layer.masksToBounds = true
|
||||
web.layer.cornerRadius = ProHUD.shared.config.guard.buttonCornerRadius
|
||||
web.scrollView.showsHorizontalScrollIndicator = false
|
||||
if let url = URL(string: "https://xaoxuu.com/wiki/prohud/") {
|
||||
web.load(URLRequest(url: url))
|
||||
}
|
||||
vc.textStack.addArrangedSubview(web)
|
||||
web.snp.makeConstraints { (mk) in
|
||||
mk.leading.trailing.equalToSuperview()
|
||||
}
|
||||
// 添加按钮
|
||||
vc.vm.add(action: .default, title: "关闭") { [weak vc] in
|
||||
vc?.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
platform :ios, '10.0'
|
||||
use_frameworks!
|
||||
|
||||
target 'Example' do
|
||||
|
||||
pod 'ProHUD', :path => '..'
|
||||
|
||||
pod 'SnapKit', '5.0.0'
|
||||
pod 'Inspire', :path => '../../Inspire'
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
#pod install --verbose --no-repo-update #安装命令
|
||||
#pod update --verbose --no-repo-update #更新命令
|
|
@ -1,30 +0,0 @@
|
|||
PODS:
|
||||
- Inspire (2.1.0)
|
||||
- ProHUD (1.0):
|
||||
- Inspire
|
||||
- SnapKit (= 5.0)
|
||||
- SnapKit (5.0.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- Inspire (from `../../Inspire`)
|
||||
- ProHUD (from `..`)
|
||||
- SnapKit (= 5.0.0)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- SnapKit
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
Inspire:
|
||||
:path: "../../Inspire"
|
||||
ProHUD:
|
||||
:path: ".."
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Inspire: 087dce1e4ff902d26d79bd3453352af09411c172
|
||||
ProHUD: 7128b55036885ac4f8b4d0b0783ee6f8eb3a2ea9
|
||||
SnapKit: fd22d10eb9aff484d79a8724eab922c1ddf89bcf
|
||||
|
||||
PODFILE CHECKSUM: 80148eec6ba2e9631b208c7b277316b6c551afc4
|
||||
|
||||
COCOAPODS: 1.10.1
|
|
@ -1,4 +0,0 @@
|
|||
# 使用 AppDelegate 的项目
|
||||
|
||||
|
||||
|
|
@ -1,663 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 52;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
CDD85460249CD681004BCE22 /* TestGuardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD85458249CD681004BCE22 /* TestGuardVC.swift */; };
|
||||
CDD85461249CD681004BCE22 /* BaseListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD85459249CD681004BCE22 /* BaseListVC.swift */; };
|
||||
CDD85462249CD681004BCE22 /* EmptyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD8545A249CD681004BCE22 /* EmptyVC.swift */; };
|
||||
CDD85463249CD681004BCE22 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CDD8545B249CD681004BCE22 /* Assets.xcassets */; };
|
||||
CDD85464249CD681004BCE22 /* RootVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD8545C249CD681004BCE22 /* RootVC.swift */; };
|
||||
CDD85465249CD681004BCE22 /* TestToastVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD8545D249CD681004BCE22 /* TestToastVC.swift */; };
|
||||
CDD85466249CD681004BCE22 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD8545E249CD681004BCE22 /* ViewController.swift */; };
|
||||
CDD85467249CD681004BCE22 /* TestAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD8545F249CD681004BCE22 /* TestAlertVC.swift */; };
|
||||
CDF2C8E1249722F800C81274 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF2C8E0249722F800C81274 /* AppDelegate.swift */; };
|
||||
CDF2C8E3249722F800C81274 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF2C8E2249722F800C81274 /* SceneDelegate.swift */; };
|
||||
CDF2C8E8249722F800C81274 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDF2C8E6249722F800C81274 /* Main.storyboard */; };
|
||||
CDF2C8ED249722F900C81274 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDF2C8EB249722F900C81274 /* LaunchScreen.storyboard */; };
|
||||
CDF2C8F8249722F900C81274 /* Example_Xcode11Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF2C8F7249722F900C81274 /* Example_Xcode11Tests.swift */; };
|
||||
CDF2C903249722F900C81274 /* Example_Xcode11UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF2C902249722F900C81274 /* Example_Xcode11UITests.swift */; };
|
||||
CDF2C9152497237300C81274 /* Inspire in Frameworks */ = {isa = PBXBuildFile; productRef = CDF2C9142497237300C81274 /* Inspire */; };
|
||||
CDF2C94A2497577C00C81274 /* ProHUD in Frameworks */ = {isa = PBXBuildFile; productRef = CDF2C9492497577C00C81274 /* ProHUD */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
CDF2C8F4249722F900C81274 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = CDF2C8D5249722F800C81274 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = CDF2C8DC249722F800C81274;
|
||||
remoteInfo = "Example-Xcode11";
|
||||
};
|
||||
CDF2C8FF249722F900C81274 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = CDF2C8D5249722F800C81274 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = CDF2C8DC249722F800C81274;
|
||||
remoteInfo = "Example-Xcode11";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
CDD85458249CD681004BCE22 /* TestGuardVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestGuardVC.swift; path = "../../Example-Old/Example/TestGuardVC.swift"; sourceTree = "<group>"; };
|
||||
CDD85459249CD681004BCE22 /* BaseListVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BaseListVC.swift; path = "../../Example-Old/Example/BaseListVC.swift"; sourceTree = "<group>"; };
|
||||
CDD8545A249CD681004BCE22 /* EmptyVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EmptyVC.swift; path = "../../Example-Old/Example/EmptyVC.swift"; sourceTree = "<group>"; };
|
||||
CDD8545B249CD681004BCE22 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = "../../Example-Old/Example/Assets.xcassets"; sourceTree = "<group>"; };
|
||||
CDD8545C249CD681004BCE22 /* RootVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RootVC.swift; path = "../../Example-Old/Example/RootVC.swift"; sourceTree = "<group>"; };
|
||||
CDD8545D249CD681004BCE22 /* TestToastVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestToastVC.swift; path = "../../Example-Old/Example/TestToastVC.swift"; sourceTree = "<group>"; };
|
||||
CDD8545E249CD681004BCE22 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = "../../Example-Old/Example/ViewController.swift"; sourceTree = "<group>"; };
|
||||
CDD8545F249CD681004BCE22 /* TestAlertVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestAlertVC.swift; path = "../../Example-Old/Example/TestAlertVC.swift"; sourceTree = "<group>"; };
|
||||
CDF2C8DD249722F800C81274 /* ProHUD Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ProHUD Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CDF2C8E0249722F800C81274 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
CDF2C8E2249722F800C81274 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
CDF2C8E7249722F800C81274 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
CDF2C8EC249722F900C81274 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
CDF2C8EE249722F900C81274 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
CDF2C8F3249722F900C81274 /* Example-Xcode11Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Example-Xcode11Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CDF2C8F7249722F900C81274 /* Example_Xcode11Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example_Xcode11Tests.swift; sourceTree = "<group>"; };
|
||||
CDF2C8F9249722F900C81274 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
CDF2C8FE249722F900C81274 /* Example-Xcode11UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Example-Xcode11UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CDF2C902249722F900C81274 /* Example_Xcode11UITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example_Xcode11UITests.swift; sourceTree = "<group>"; };
|
||||
CDF2C904249722F900C81274 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
CDF2C8DA249722F800C81274 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDF2C94A2497577C00C81274 /* ProHUD in Frameworks */,
|
||||
CDF2C9152497237300C81274 /* Inspire in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8F0249722F900C81274 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8FB249722F900C81274 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
CDF2C8D4249722F800C81274 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDF2C8DF249722F800C81274 /* Example-Xcode11 */,
|
||||
CDF2C8F6249722F900C81274 /* Example-Xcode11Tests */,
|
||||
CDF2C901249722F900C81274 /* Example-Xcode11UITests */,
|
||||
CDF2C8DE249722F800C81274 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDF2C8DE249722F800C81274 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDF2C8DD249722F800C81274 /* ProHUD Demo.app */,
|
||||
CDF2C8F3249722F900C81274 /* Example-Xcode11Tests.xctest */,
|
||||
CDF2C8FE249722F900C81274 /* Example-Xcode11UITests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDF2C8DF249722F800C81274 /* Example-Xcode11 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDF2C8E0249722F800C81274 /* AppDelegate.swift */,
|
||||
CDF2C8E2249722F800C81274 /* SceneDelegate.swift */,
|
||||
CDD8545B249CD681004BCE22 /* Assets.xcassets */,
|
||||
CDD85459249CD681004BCE22 /* BaseListVC.swift */,
|
||||
CDD8545A249CD681004BCE22 /* EmptyVC.swift */,
|
||||
CDD8545C249CD681004BCE22 /* RootVC.swift */,
|
||||
CDD8545F249CD681004BCE22 /* TestAlertVC.swift */,
|
||||
CDD85458249CD681004BCE22 /* TestGuardVC.swift */,
|
||||
CDD8545D249CD681004BCE22 /* TestToastVC.swift */,
|
||||
CDD8545E249CD681004BCE22 /* ViewController.swift */,
|
||||
CDF2C8E6249722F800C81274 /* Main.storyboard */,
|
||||
CDF2C8EB249722F900C81274 /* LaunchScreen.storyboard */,
|
||||
CDF2C8EE249722F900C81274 /* Info.plist */,
|
||||
);
|
||||
path = "Example-Xcode11";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDF2C8F6249722F900C81274 /* Example-Xcode11Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDF2C8F7249722F900C81274 /* Example_Xcode11Tests.swift */,
|
||||
CDF2C8F9249722F900C81274 /* Info.plist */,
|
||||
);
|
||||
path = "Example-Xcode11Tests";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDF2C901249722F900C81274 /* Example-Xcode11UITests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDF2C902249722F900C81274 /* Example_Xcode11UITests.swift */,
|
||||
CDF2C904249722F900C81274 /* Info.plist */,
|
||||
);
|
||||
path = "Example-Xcode11UITests";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CDF2C8DC249722F800C81274 /* Example-Xcode11 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CDF2C907249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11" */;
|
||||
buildPhases = (
|
||||
CDF2C8D9249722F800C81274 /* Sources */,
|
||||
CDF2C8DA249722F800C81274 /* Frameworks */,
|
||||
CDF2C8DB249722F800C81274 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "Example-Xcode11";
|
||||
packageProductDependencies = (
|
||||
CDF2C9142497237300C81274 /* Inspire */,
|
||||
CDF2C9492497577C00C81274 /* ProHUD */,
|
||||
);
|
||||
productName = "Example-Xcode11";
|
||||
productReference = CDF2C8DD249722F800C81274 /* ProHUD Demo.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
CDF2C8F2249722F900C81274 /* Example-Xcode11Tests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CDF2C90A249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11Tests" */;
|
||||
buildPhases = (
|
||||
CDF2C8EF249722F900C81274 /* Sources */,
|
||||
CDF2C8F0249722F900C81274 /* Frameworks */,
|
||||
CDF2C8F1249722F900C81274 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
CDF2C8F5249722F900C81274 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Example-Xcode11Tests";
|
||||
productName = "Example-Xcode11Tests";
|
||||
productReference = CDF2C8F3249722F900C81274 /* Example-Xcode11Tests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
CDF2C8FD249722F900C81274 /* Example-Xcode11UITests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CDF2C90D249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11UITests" */;
|
||||
buildPhases = (
|
||||
CDF2C8FA249722F900C81274 /* Sources */,
|
||||
CDF2C8FB249722F900C81274 /* Frameworks */,
|
||||
CDF2C8FC249722F900C81274 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
CDF2C900249722F900C81274 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Example-Xcode11UITests";
|
||||
productName = "Example-Xcode11UITests";
|
||||
productReference = CDF2C8FE249722F900C81274 /* Example-Xcode11UITests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.ui-testing";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CDF2C8D5249722F800C81274 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1150;
|
||||
LastUpgradeCheck = 1150;
|
||||
ORGANIZATIONNAME = xaoxuu;
|
||||
TargetAttributes = {
|
||||
CDF2C8DC249722F800C81274 = {
|
||||
CreatedOnToolsVersion = 11.5;
|
||||
};
|
||||
CDF2C8F2249722F900C81274 = {
|
||||
CreatedOnToolsVersion = 11.5;
|
||||
TestTargetID = CDF2C8DC249722F800C81274;
|
||||
};
|
||||
CDF2C8FD249722F900C81274 = {
|
||||
CreatedOnToolsVersion = 11.5;
|
||||
TestTargetID = CDF2C8DC249722F800C81274;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CDF2C8D8249722F800C81274 /* Build configuration list for PBXProject "Example-Xcode11" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CDF2C8D4249722F800C81274;
|
||||
packageReferences = (
|
||||
CDF2C9132497237300C81274 /* XCRemoteSwiftPackageReference "Inspire" */,
|
||||
CDF2C9482497577C00C81274 /* XCRemoteSwiftPackageReference "ProHUD" */,
|
||||
);
|
||||
productRefGroup = CDF2C8DE249722F800C81274 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CDF2C8DC249722F800C81274 /* Example-Xcode11 */,
|
||||
CDF2C8F2249722F900C81274 /* Example-Xcode11Tests */,
|
||||
CDF2C8FD249722F900C81274 /* Example-Xcode11UITests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
CDF2C8DB249722F800C81274 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDF2C8ED249722F900C81274 /* LaunchScreen.storyboard in Resources */,
|
||||
CDD85463249CD681004BCE22 /* Assets.xcassets in Resources */,
|
||||
CDF2C8E8249722F800C81274 /* Main.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8F1249722F900C81274 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8FC249722F900C81274 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CDF2C8D9249722F800C81274 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDD85464249CD681004BCE22 /* RootVC.swift in Sources */,
|
||||
CDD85462249CD681004BCE22 /* EmptyVC.swift in Sources */,
|
||||
CDF2C8E1249722F800C81274 /* AppDelegate.swift in Sources */,
|
||||
CDD85465249CD681004BCE22 /* TestToastVC.swift in Sources */,
|
||||
CDD85460249CD681004BCE22 /* TestGuardVC.swift in Sources */,
|
||||
CDD85467249CD681004BCE22 /* TestAlertVC.swift in Sources */,
|
||||
CDF2C8E3249722F800C81274 /* SceneDelegate.swift in Sources */,
|
||||
CDD85466249CD681004BCE22 /* ViewController.swift in Sources */,
|
||||
CDD85461249CD681004BCE22 /* BaseListVC.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8EF249722F900C81274 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDF2C8F8249722F900C81274 /* Example_Xcode11Tests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CDF2C8FA249722F900C81274 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDF2C903249722F900C81274 /* Example_Xcode11UITests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
CDF2C8F5249722F900C81274 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = CDF2C8DC249722F800C81274 /* Example-Xcode11 */;
|
||||
targetProxy = CDF2C8F4249722F900C81274 /* PBXContainerItemProxy */;
|
||||
};
|
||||
CDF2C900249722F900C81274 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = CDF2C8DC249722F800C81274 /* Example-Xcode11 */;
|
||||
targetProxy = CDF2C8FF249722F900C81274 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
CDF2C8E6249722F800C81274 /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CDF2C8E7249722F800C81274 /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDF2C8EB249722F900C81274 /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CDF2C8EC249722F900C81274 /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CDF2C905249722F900C81274 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDF2C906249722F900C81274 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CDF2C908249722F900C81274 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11";
|
||||
PRODUCT_NAME = "ProHUD Demo";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDF2C909249722F900C81274 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11";
|
||||
PRODUCT_NAME = "ProHUD Demo";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CDF2C90B249722F900C81274 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11Tests/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11Tests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example-Xcode11.app/Example-Xcode11";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDF2C90C249722F900C81274 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11Tests/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11Tests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example-Xcode11.app/Example-Xcode11";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CDF2C90E249722F900C81274 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11UITests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11UITests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = "Example-Xcode11";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CDF2C90F249722F900C81274 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
INFOPLIST_FILE = "Example-Xcode11UITests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xaoxuu.Example-Xcode11UITests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
TEST_TARGET_NAME = "Example-Xcode11";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CDF2C8D8249722F800C81274 /* Build configuration list for PBXProject "Example-Xcode11" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDF2C905249722F900C81274 /* Debug */,
|
||||
CDF2C906249722F900C81274 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CDF2C907249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDF2C908249722F900C81274 /* Debug */,
|
||||
CDF2C909249722F900C81274 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CDF2C90A249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11Tests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDF2C90B249722F900C81274 /* Debug */,
|
||||
CDF2C90C249722F900C81274 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CDF2C90D249722F900C81274 /* Build configuration list for PBXNativeTarget "Example-Xcode11UITests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CDF2C90E249722F900C81274 /* Debug */,
|
||||
CDF2C90F249722F900C81274 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCRemoteSwiftPackageReference section */
|
||||
CDF2C9132497237300C81274 /* XCRemoteSwiftPackageReference "Inspire" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "https://github.com/xaoxuu/Inspire";
|
||||
requirement = {
|
||||
branch = master;
|
||||
kind = branch;
|
||||
};
|
||||
};
|
||||
CDF2C9482497577C00C81274 /* XCRemoteSwiftPackageReference "ProHUD" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "https://github.com/xaoxuu/ProHUD";
|
||||
requirement = {
|
||||
branch = master;
|
||||
kind = branch;
|
||||
};
|
||||
};
|
||||
/* End XCRemoteSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
CDF2C9142497237300C81274 /* Inspire */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = CDF2C9132497237300C81274 /* XCRemoteSwiftPackageReference "Inspire" */;
|
||||
productName = Inspire;
|
||||
};
|
||||
CDF2C9492497577C00C81274 /* ProHUD */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = CDF2C9482497577C00C81274 /* XCRemoteSwiftPackageReference "ProHUD" */;
|
||||
productName = ProHUD;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = CDF2C8D5249722F800C81274 /* Project object */;
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"object": {
|
||||
"pins": [
|
||||
{
|
||||
"package": "Inspire",
|
||||
"repositoryURL": "https://github.com/xaoxuu/Inspire",
|
||||
"state": {
|
||||
"branch": "master",
|
||||
"revision": "22c89fa2ff06bcd44b8c0500a82e64d4baf80387",
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "ProHUD",
|
||||
"repositoryURL": "https://github.com/xaoxuu/ProHUD",
|
||||
"state": {
|
||||
"branch": "master",
|
||||
"revision": "84b9931a8aa979d82c53376d9ff84f9e432dcc7c",
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SnapKit",
|
||||
"repositoryURL": "https://github.com/SnapKit/SnapKit.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d458564516e5676af9c70b4f4b2a9178294f1bc6",
|
||||
"version": "5.0.1"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 1
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -1,62 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
<key>UISceneConfigurations</key>
|
||||
<dict>
|
||||
<key>UIWindowSceneSessionRoleApplication</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UISceneConfigurationName</key>
|
||||
<string>Default Configuration</string>
|
||||
<key>UISceneDelegateClassName</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||
<key>UISceneStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,34 +0,0 @@
|
|||
//
|
||||
// Example_Xcode11Tests.swift
|
||||
// Example-Xcode11Tests
|
||||
//
|
||||
// Created by xaoxuu on 2020/6/15.
|
||||
// Copyright © 2020 xaoxuu. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import Example_Xcode11
|
||||
|
||||
class Example_Xcode11Tests: XCTestCase {
|
||||
|
||||
override func setUpWithError() throws {
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
override func tearDownWithError() throws {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
func testExample() throws {
|
||||
// This is an example of a functional test case.
|
||||
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||
}
|
||||
|
||||
func testPerformanceExample() throws {
|
||||
// This is an example of a performance test case.
|
||||
self.measure {
|
||||
// Put the code you want to measure the time of here.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,43 +0,0 @@
|
|||
//
|
||||
// Example_Xcode11UITests.swift
|
||||
// Example-Xcode11UITests
|
||||
//
|
||||
// Created by xaoxuu on 2020/6/15.
|
||||
// Copyright © 2020 xaoxuu. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
class Example_Xcode11UITests: XCTestCase {
|
||||
|
||||
override func setUpWithError() throws {
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
|
||||
// In UI tests it is usually best to stop immediately when a failure occurs.
|
||||
continueAfterFailure = false
|
||||
|
||||
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
|
||||
}
|
||||
|
||||
override func tearDownWithError() throws {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
func testExample() throws {
|
||||
// UI tests must launch the application that they test.
|
||||
let app = XCUIApplication()
|
||||
app.launch()
|
||||
|
||||
// Use recording to get started writing UI tests.
|
||||
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||
}
|
||||
|
||||
func testLaunchPerformance() throws {
|
||||
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
|
||||
// This measures how long it takes to launch your application.
|
||||
measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
|
||||
XCUIApplication().launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,2 +0,0 @@
|
|||
# 使用 SceneDelegate 的项目
|
||||
|
|
@ -0,0 +1,419 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 55;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
CD6537BF28C3311B00A5981B /* ListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6537BE28C3311B00A5981B /* ListModel.swift */; };
|
||||
CD6537C128C35E1C00A5981B /* ListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6537C028C35E1C00A5981B /* ListVC.swift */; };
|
||||
CD6537C328C35E6200A5981B /* ToastVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6537C228C35E6200A5981B /* ToastVC.swift */; };
|
||||
CD6537C528C35F2C00A5981B /* SheetVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6537C428C35F2C00A5981B /* SheetVC.swift */; };
|
||||
CD8EEF3B28BC5C7200E660EA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8EEF3A28BC5C7200E660EA /* AppDelegate.swift */; };
|
||||
CD8EEF3D28BC5C7200E660EA /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8EEF3C28BC5C7200E660EA /* SceneDelegate.swift */; };
|
||||
CD8EEF4228BC5C7200E660EA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD8EEF4028BC5C7200E660EA /* Main.storyboard */; };
|
||||
CD8EEF4428BC5C7300E660EA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD8EEF4328BC5C7300E660EA /* Assets.xcassets */; };
|
||||
CD8EEF4728BC5C7300E660EA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD8EEF4528BC5C7300E660EA /* LaunchScreen.storyboard */; };
|
||||
CD9C7B1E28CB8972006190CD /* Scenes.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9C7B1D28CB8972006190CD /* Scenes.swift */; };
|
||||
CDA83DB928C601E60025F0DF /* TableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA83DB828C601E60025F0DF /* TableHeaderView.swift */; };
|
||||
CDB6A2A228BC5F4600DEC80D /* ProHUD in Frameworks */ = {isa = PBXBuildFile; productRef = CDB6A2A128BC5F4600DEC80D /* ProHUD */; };
|
||||
CDB7A1D028C32A7400E034D8 /* AlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB7A1CF28C32A7400E034D8 /* AlertVC.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
CD6537BE28C3311B00A5981B /* ListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListModel.swift; sourceTree = "<group>"; };
|
||||
CD6537C028C35E1C00A5981B /* ListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListVC.swift; sourceTree = "<group>"; };
|
||||
CD6537C228C35E6200A5981B /* ToastVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastVC.swift; sourceTree = "<group>"; };
|
||||
CD6537C428C35F2C00A5981B /* SheetVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetVC.swift; sourceTree = "<group>"; };
|
||||
CD8EEF3728BC5C7200E660EA /* PHDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PHDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CD8EEF3A28BC5C7200E660EA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
CD8EEF3C28BC5C7200E660EA /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
CD8EEF4128BC5C7200E660EA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
CD8EEF4328BC5C7300E660EA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
CD8EEF4628BC5C7300E660EA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
CD8EEF4828BC5C7300E660EA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
CD9C7B1D28CB8972006190CD /* Scenes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenes.swift; sourceTree = "<group>"; };
|
||||
CDA83DB828C601E60025F0DF /* TableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableHeaderView.swift; sourceTree = "<group>"; };
|
||||
CDB6A29F28BC5F0F00DEC80D /* ProHUD */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = ProHUD; path = ..; sourceTree = "<group>"; };
|
||||
CDB7A1CF28C32A7400E034D8 /* AlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertVC.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
CD8EEF3428BC5C7200E660EA /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDB6A2A228BC5F4600DEC80D /* ProHUD in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
CD8EEF2E28BC5C7200E660EA = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDB6A29E28BC5F0F00DEC80D /* Packages */,
|
||||
CD8EEF3928BC5C7200E660EA /* PHDemo */,
|
||||
CD8EEF3828BC5C7200E660EA /* Products */,
|
||||
CDB6A2A028BC5F4600DEC80D /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD8EEF3828BC5C7200E660EA /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD8EEF3728BC5C7200E660EA /* PHDemo.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD8EEF3928BC5C7200E660EA /* PHDemo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD8EEF3A28BC5C7200E660EA /* AppDelegate.swift */,
|
||||
CD8EEF3C28BC5C7200E660EA /* SceneDelegate.swift */,
|
||||
CD6537BE28C3311B00A5981B /* ListModel.swift */,
|
||||
CDA83DB828C601E60025F0DF /* TableHeaderView.swift */,
|
||||
CD9C7B1D28CB8972006190CD /* Scenes.swift */,
|
||||
CD6537C028C35E1C00A5981B /* ListVC.swift */,
|
||||
CDB7A1CF28C32A7400E034D8 /* AlertVC.swift */,
|
||||
CD6537C228C35E6200A5981B /* ToastVC.swift */,
|
||||
CD6537C428C35F2C00A5981B /* SheetVC.swift */,
|
||||
CD8EEF4028BC5C7200E660EA /* Main.storyboard */,
|
||||
CD8EEF4328BC5C7300E660EA /* Assets.xcassets */,
|
||||
CD8EEF4528BC5C7300E660EA /* LaunchScreen.storyboard */,
|
||||
CD8EEF4828BC5C7300E660EA /* Info.plist */,
|
||||
);
|
||||
path = PHDemo;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDB6A29E28BC5F0F00DEC80D /* Packages */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CDB6A29F28BC5F0F00DEC80D /* ProHUD */,
|
||||
);
|
||||
name = Packages;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDB6A2A028BC5F4600DEC80D /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CD8EEF3628BC5C7200E660EA /* PHDemo */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CD8EEF4B28BC5C7300E660EA /* Build configuration list for PBXNativeTarget "PHDemo" */;
|
||||
buildPhases = (
|
||||
CD8EEF3328BC5C7200E660EA /* Sources */,
|
||||
CD8EEF3428BC5C7200E660EA /* Frameworks */,
|
||||
CD8EEF3528BC5C7200E660EA /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = PHDemo;
|
||||
packageProductDependencies = (
|
||||
CDB6A2A128BC5F4600DEC80D /* ProHUD */,
|
||||
);
|
||||
productName = PHDemo;
|
||||
productReference = CD8EEF3728BC5C7200E660EA /* PHDemo.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CD8EEF2F28BC5C7200E660EA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = 1;
|
||||
LastSwiftUpdateCheck = 1340;
|
||||
LastUpgradeCheck = 1340;
|
||||
TargetAttributes = {
|
||||
CD8EEF3628BC5C7200E660EA = {
|
||||
CreatedOnToolsVersion = 13.4.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CD8EEF3228BC5C7200E660EA /* Build configuration list for PBXProject "PHDemo" */;
|
||||
compatibilityVersion = "Xcode 13.0";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CD8EEF2E28BC5C7200E660EA;
|
||||
productRefGroup = CD8EEF3828BC5C7200E660EA /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CD8EEF3628BC5C7200E660EA /* PHDemo */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
CD8EEF3528BC5C7200E660EA /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CD8EEF4728BC5C7300E660EA /* LaunchScreen.storyboard in Resources */,
|
||||
CD8EEF4428BC5C7300E660EA /* Assets.xcassets in Resources */,
|
||||
CD8EEF4228BC5C7200E660EA /* Main.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CD8EEF3328BC5C7200E660EA /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDA83DB928C601E60025F0DF /* TableHeaderView.swift in Sources */,
|
||||
CD6537C528C35F2C00A5981B /* SheetVC.swift in Sources */,
|
||||
CD6537C328C35E6200A5981B /* ToastVC.swift in Sources */,
|
||||
CDB7A1D028C32A7400E034D8 /* AlertVC.swift in Sources */,
|
||||
CD6537C128C35E1C00A5981B /* ListVC.swift in Sources */,
|
||||
CD8EEF3B28BC5C7200E660EA /* AppDelegate.swift in Sources */,
|
||||
CD8EEF3D28BC5C7200E660EA /* SceneDelegate.swift in Sources */,
|
||||
CD9C7B1E28CB8972006190CD /* Scenes.swift in Sources */,
|
||||
CD6537BF28C3311B00A5981B /* ListModel.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
CD8EEF4028BC5C7200E660EA /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CD8EEF4128BC5C7200E660EA /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD8EEF4528BC5C7300E660EA /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
CD8EEF4628BC5C7300E660EA /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CD8EEF4928BC5C7300E660EA /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.5;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CD8EEF4A28BC5C7300E660EA /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.5;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CD8EEF4C28BC5C7300E660EA /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = DASH6JFSDW;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = PHDemo/Info.plist;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||
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.xaoxuu.PHDemo;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CD8EEF4D28BC5C7300E660EA /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = DASH6JFSDW;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = PHDemo/Info.plist;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||
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.xaoxuu.PHDemo;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CD8EEF3228BC5C7200E660EA /* Build configuration list for PBXProject "PHDemo" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CD8EEF4928BC5C7300E660EA /* Debug */,
|
||||
CD8EEF4A28BC5C7300E660EA /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CD8EEF4B28BC5C7300E660EA /* Build configuration list for PBXNativeTarget "PHDemo" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CD8EEF4C28BC5C7300E660EA /* Debug */,
|
||||
CD8EEF4D28BC5C7300E660EA /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
CDB6A2A128BC5F4600DEC80D /* ProHUD */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = ProHUD;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = CD8EEF2F28BC5C7200E660EA /* Project object */;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"pins" : [
|
||||
{
|
||||
"identity" : "inspire",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/xaoxuu/Inspire.git",
|
||||
"state" : {
|
||||
"revision" : "10d5a17ee24c8a66da9a3971c62c1d161d2a4cd2",
|
||||
"version" : "3.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "snapkit",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/SnapKit/SnapKit.git",
|
||||
"state" : {
|
||||
"revision" : "f222cbdf325885926566172f6f5f06af95473158",
|
||||
"version" : "5.6.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"version" : 2
|
||||
}
|
|
@ -0,0 +1,298 @@
|
|||
//
|
||||
// AlertVC.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/3.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
class AlertVC: ListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
// Uncomment the following line to preserve selection between presentations
|
||||
// self.clearsSelectionOnViewWillAppear = false
|
||||
|
||||
header.titleLabel.text = "ProHUD.Alert"
|
||||
header.detailLabel.text = "弹窗控件,用于强阻塞性交互,用户必须做出选择或者等待结果才能进入下一步,当多个实例出现时,会以堆叠的形式显示,新的实例会在覆盖旧的实例上层。"
|
||||
|
||||
Alert.Configuration.shared { config in
|
||||
config.reloadData { vc in
|
||||
if vc.identifier == "custom" {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
list.add(title: "纯文字") { section in
|
||||
section.add(title: "只有一句话") {
|
||||
Alert(.message("只有一句话").duration(2)).push()
|
||||
}
|
||||
section.add(title: "标题 + 正文") {
|
||||
let title = "这是标题"
|
||||
let message = "这是正文,文字支持自动换行,可设置最小宽度和最大宽度。这个弹窗将会持续4秒。"
|
||||
Alert { alert in
|
||||
alert.vm = .text(title: title, message: message)
|
||||
alert.vm.duration = 4
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
list.add(title: "图文弹窗") { section in
|
||||
section.add(title: "纯图标") {
|
||||
Alert(.loading(3)).push()
|
||||
}
|
||||
section.add(title: "图标 + 文字") {
|
||||
Alert(.loading(4).message("正在加载")) { alert in
|
||||
alert.update(progress: 0)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
|
||||
alert.update(progress: 0.01)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
alert.update(progress: 0.33)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
alert.update(progress: 0.67)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
|
||||
alert.update(progress: 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
section.add(title: "图标 + 标题 + 正文") {
|
||||
Alert(.error) { alert in
|
||||
alert.vm.title = "加载失败"
|
||||
alert.vm.message = "请稍后重试"
|
||||
alert.vm.duration = 3
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "文字 + 按钮") { section in
|
||||
section.add(title: "只有一段文字 + 按钮") {
|
||||
Alert { alert in
|
||||
alert.vm.title = "只有一段文字"
|
||||
alert.add(action: "取消", style: .gray)
|
||||
alert.add(action: "默认按钮")
|
||||
}
|
||||
}
|
||||
section.add(title: "标题 + 正文 + 按钮") {
|
||||
Alert { alert in
|
||||
alert.vm.title = "标题"
|
||||
alert.vm.message = "这是一段正文,长度超出最大宽度时会自动换行"
|
||||
alert.add(action: "取消", style: .gray)
|
||||
alert.add(action: "删除", style: .destructive) { alert in
|
||||
// 自定义了按钮事件之后,需要手动pop弹窗
|
||||
alert.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "图标 + 文字 + 按钮") { section in
|
||||
section.add(title: "图标 + 一段文字 + 自定义浅色按钮") {
|
||||
Alert(.confirm) { alert in
|
||||
alert.vm.title = "自定义浅色按钮"
|
||||
alert.add(action: "红色", style: .light(color: .systemRed))
|
||||
alert.add(action: "蓝色", style: .light(color: .systemBlue))
|
||||
}
|
||||
}
|
||||
section.add(title: "图标 + 标题 + 正文 + 自定义深色按钮") {
|
||||
Alert(.note) { alert in
|
||||
alert.vm.title = "自定义深色按钮"
|
||||
alert.vm.message = "这是一段正文,长度超出最大宽度时会自动换行"
|
||||
alert.add(action: "橙色", style: .filled(color: .systemOrange))
|
||||
alert.add(action: "粉色", style: .filled(color: .systemPink))
|
||||
alert.add(action: "默认灰色", style: .gray)
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "控件动态管理") { section in
|
||||
section.add(title: "按钮增删") {
|
||||
Alert(.note) { alert in
|
||||
alert.vm.message = "可以动态增加、删除按钮"
|
||||
alert.add(action: "在底部增加按钮", style: .filled(color: .systemGreen)) { alert in
|
||||
alert.add(action: "哈哈1", identifier: "haha1")
|
||||
}
|
||||
alert.add(action: "在当前按钮下方增加", style: .filled(color: .systemIndigo), identifier: "add") { alert in
|
||||
alert.insert(action: .init(identifier: "haha2", style: .light(color: .systemOrange), title: "哈哈2", handler: nil), after: "add")
|
||||
}
|
||||
alert.add(action: "修改当前按钮文字", identifier: "edit") { alert in
|
||||
alert.update(action: "已修改", for: "edit")
|
||||
}
|
||||
alert.add(action: "删除「哈哈1」", style: .destructive) { alert in
|
||||
alert.remove(actions: .identifiers("haha1"))
|
||||
}
|
||||
alert.add(action: "删除「哈哈1」和「哈哈2」", style: .destructive) { alert in
|
||||
alert.remove(actions: .identifiers("haha1", "haha2"))
|
||||
}
|
||||
alert.add(action: "删除全部按钮", style: .destructive) { alert in
|
||||
alert.remove(actions: .all)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
alert.pop()
|
||||
}
|
||||
}
|
||||
alert.add(action: "取消", style: .gray)
|
||||
}
|
||||
}
|
||||
section.add(title: "更新文字") {
|
||||
Alert(.note) { alert in
|
||||
alert.vm.message = "可以动态增加、删除、更新文字"
|
||||
alert.add(action: "增加标题") { alert in
|
||||
alert.vm.title = "这是标题"
|
||||
alert.reloadTextStack()
|
||||
}
|
||||
alert.add(action: "增加正文") { alert in
|
||||
alert.vm.message = "可以动态增加、删除、更新文字"
|
||||
alert.reloadTextStack()
|
||||
}
|
||||
alert.add(action: "删除标题", style: .destructive) { alert in
|
||||
alert.vm.title = nil
|
||||
alert.reloadTextStack()
|
||||
}
|
||||
alert.add(action: "删除正文", style: .destructive) { alert in
|
||||
alert.vm.message = nil
|
||||
alert.reloadTextStack()
|
||||
}
|
||||
alert.add(action: "取消", style: .gray)
|
||||
}
|
||||
}
|
||||
section.add(title: "在弹出过程中增加元素") {
|
||||
Alert(.loading) { alert in
|
||||
alert.vm.title = "在弹出过程中增加元素"
|
||||
alert.add(action: "OK", style: .gray)
|
||||
alert.config.actionAxis = .vertical
|
||||
} .onViewWillAppear { vc in
|
||||
guard let alert = vc as? Alert else {
|
||||
return
|
||||
}
|
||||
alert.vm.message = "这是一段后增加的文字\n动画效果会有细微差别"
|
||||
alert.reloadTextStack()
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "多实例管理") { section in
|
||||
section.add(title: "多层级弹窗") {
|
||||
func f(i: Int) {
|
||||
Alert { alert in
|
||||
alert.vm.title = "第\(i)次弹"
|
||||
alert.vm.message = "每次都是一个新的实例覆盖在上一个弹窗上面,而背景不会叠加变深。"
|
||||
alert.add(action: "取消", style: .gray)
|
||||
alert.add(action: "增加一个") { alert in
|
||||
f(i: i + 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
f(i: 1)
|
||||
}
|
||||
section.add(title: "弹出loading,如果有就不重复弹") {
|
||||
func f(i: Int) {
|
||||
Alert.lazyPush(identifier: "haha") { alert in
|
||||
if i < 2 {
|
||||
alert.vm = .loading.title("第\(i)次弹")
|
||||
let btn = alert.add(action: "请稍等", identifier: "btn")
|
||||
btn.isEnabled = false
|
||||
} else {
|
||||
alert.update(progress: 1)
|
||||
alert.vm = .success.title("第\(i)次弹").message("只更新内容")
|
||||
alert.reloadTextStack()
|
||||
alert.update(action: "完成", style: .filled(color: .systemGreen), for: "btn")
|
||||
alert.button(for: "btn")?.isEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
f(i: 1)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
f(i: 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "放在特定页面") { [weak self] section in
|
||||
section.add(title: "放在特定页面") {
|
||||
let vc = UIViewController()
|
||||
vc.title = "页面"
|
||||
vc.view.backgroundColor = .systemYellow
|
||||
let alert = Alert(.loading.title("正在加载").message("这个弹窗被放在指定的容器中"))
|
||||
alert.config.enableShadow = false
|
||||
self?.present(vc, animated: true)
|
||||
vc.view.addSubview(alert.view)
|
||||
alert.view.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(title: "自定义视图") { section in
|
||||
section.add(title: "自定义控件") {
|
||||
Alert { alert in
|
||||
alert.vm.title = "自定义控件"
|
||||
// 图片
|
||||
let imgv = UIImageView(image: UIImage(named: "landscape"))
|
||||
imgv.contentMode = .scaleAspectFill
|
||||
imgv.clipsToBounds = true
|
||||
imgv.layer.cornerRadiusWithContinuous = 12
|
||||
alert.add(subview: imgv).snp.makeConstraints { make in
|
||||
make.height.equalTo(120)
|
||||
}
|
||||
// seg
|
||||
let seg = UISegmentedControl(items: ["开发", "测试", "预发", "生产"])
|
||||
seg.selectedSegmentIndex = 0
|
||||
alert.add(subview: seg).snp.makeConstraints { make in
|
||||
make.height.equalTo(40)
|
||||
make.width.equalTo(400)
|
||||
}
|
||||
// slider
|
||||
let slider = UISlider()
|
||||
slider.minimumValue = 0
|
||||
slider.maximumValue = 100
|
||||
slider.value = 50
|
||||
alert.add(subview: slider)
|
||||
alert.add(spacing: 24)
|
||||
alert.add(action: "取消", style: .gray)
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "圆角半径") {
|
||||
Alert { alert in
|
||||
alert.title = "圆角半径"
|
||||
let s1 = UISlider()
|
||||
s1.minimumValue = 0
|
||||
s1.maximumValue = 40
|
||||
s1.value = Float(alert.config.cardCornerRadius ?? 16)
|
||||
alert.add(subview: s1).snp.makeConstraints { make in
|
||||
make.height.equalTo(50)
|
||||
}
|
||||
if #available(iOS 14.0, *) {
|
||||
s1.addAction(.init(handler: { [unowned s1] act in
|
||||
alert.config.cardCornerRadius = CGFloat(s1.value)
|
||||
alert.contentView.layer.cornerRadiusWithContinuous = alert.config.cardCornerRadius ?? 16
|
||||
}), for: .valueChanged)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
alert.config.actionAxis = .vertical
|
||||
alert.add(spacing: 24)
|
||||
alert.add(action: "OK", style: .gray)
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "完全自定义容器") {
|
||||
Alert { alert in
|
||||
alert.identifier = "custom"
|
||||
alert.contentView.backgroundColor = .systemYellow
|
||||
alert.view.addSubview(alert.contentView)
|
||||
alert.contentView.layer.cornerRadiusWithContinuous = 32
|
||||
alert.contentView.snp.makeConstraints { make in
|
||||
make.width.equalTo(UIScreen.main.bounds.width - 100)
|
||||
make.height.equalTo(UIScreen.main.bounds.height - 200)
|
||||
make.center.equalToSuperview()
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
alert.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,26 +1,17 @@
|
|||
//
|
||||
// AppDelegate.swift
|
||||
// Example-Xcode11
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2020/6/15.
|
||||
// Copyright © 2020 xaoxuu. All rights reserved.
|
||||
// Created by xaoxuu on 2022/8/29.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
@_exported import ProHUD
|
||||
typealias ProAlert = ProHUD.Alert
|
||||
typealias ProToast = ProHUD.Toast
|
||||
typealias ProGuard = ProHUD.Guard
|
||||
|
||||
|
||||
@UIApplicationMain
|
||||
@main
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
// Override point for customization after application launch.
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"platform" : "ios",
|
||||
"reference" : "systemBlueColor"
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 445 KiB After Width: | Height: | Size: 445 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "avatar@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "avatar@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "F462262A-3B98-4677-A4F2-75827167E067_1_105_c.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
PHDemo/PHDemo/Assets.xcassets/landscape.imageset/F462262A-3B98-4677-A4F2-75827167E067_1_105_c.jpeg
vendored
Normal file
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="06J-FN-U3n">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Alert-->
|
||||
<scene sceneID="LP0-RE-kvY">
|
||||
<objects>
|
||||
<tableViewController id="NBo-Re-tKO" customClass="AlertVC" customModule="PHDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="insetGrouped" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" id="eCS-6f-ub3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="reuseIdentifier" id="aQS-HA-vLM">
|
||||
<rect key="frame" x="20" y="49.5" width="374" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="aQS-HA-vLM" id="Kt9-sG-LyY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="345.5" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<sections/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="NBo-Re-tKO" id="y5b-0b-bjs"/>
|
||||
<outlet property="delegate" destination="NBo-Re-tKO" id="1L3-SV-7FG"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<tabBarItem key="tabBarItem" title="Alert" image="exclamationmark.triangle.fill" catalog="system" id="pLJ-z8-SS1"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="ydp-D5-Zdx" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="955" y="804"/>
|
||||
</scene>
|
||||
<!--Tab Bar Controller-->
|
||||
<scene sceneID="ej2-I3-4Bd">
|
||||
<objects>
|
||||
<tabBarController automaticallyAdjustsScrollViewInsets="NO" id="06J-FN-U3n" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationItem key="navigationItem" id="0Lv-P4-IBc"/>
|
||||
<tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="yC9-4u-5o2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tabBar>
|
||||
<connections>
|
||||
<segue destination="NBo-Re-tKO" kind="relationship" relationship="viewControllers" id="0Aw-nV-Vkk"/>
|
||||
<segue destination="h7R-Kd-Dn5" kind="relationship" relationship="viewControllers" id="icb-EL-vph"/>
|
||||
<segue destination="9SY-ag-pK6" kind="relationship" relationship="viewControllers" id="hyh-rR-Frr"/>
|
||||
</connections>
|
||||
</tabBarController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="avc-BE-wZC" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1865.217391304348" y="71.651785714285708"/>
|
||||
</scene>
|
||||
<!--Toast-->
|
||||
<scene sceneID="DAh-i5-GcF">
|
||||
<objects>
|
||||
<tableViewController id="h7R-Kd-Dn5" customClass="ToastVC" customModule="PHDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="insetGrouped" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" id="MVT-cH-t1Z">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="reuseIdentifier" id="Cfl-KC-JaI">
|
||||
<rect key="frame" x="20" y="49.5" width="374" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Cfl-KC-JaI" id="OCw-s2-GD5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="345.5" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<sections/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="h7R-Kd-Dn5" id="vFn-zO-y4I"/>
|
||||
<outlet property="delegate" destination="h7R-Kd-Dn5" id="8Px-ei-ipU"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<tabBarItem key="tabBarItem" title="Toast" image="bubble.left.fill" catalog="system" id="YYs-U3-EWo"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="VmT-Tm-s4d" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1865" y="804"/>
|
||||
</scene>
|
||||
<!--Sheet-->
|
||||
<scene sceneID="DG9-RE-7gC">
|
||||
<objects>
|
||||
<tableViewController id="9SY-ag-pK6" customClass="SheetVC" customModule="PHDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="insetGrouped" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" id="N9I-Aa-GtP">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="reuseIdentifier" id="H4y-fE-fXP">
|
||||
<rect key="frame" x="20" y="49.5" width="374" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="H4y-fE-fXP" id="LOF-l1-ziH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="345.5" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<sections/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="9SY-ag-pK6" id="hlb-VE-6Jl"/>
|
||||
<outlet property="delegate" destination="9SY-ag-pK6" id="UkD-l4-OhM"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<tabBarItem key="tabBarItem" title="Sheet" image="iphone" catalog="system" id="3or-OI-jbb"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Pal-Bf-SfP" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2742" y="804"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="bubble.left.fill" catalog="system" width="128" height="110"/>
|
||||
<image name="exclamationmark.triangle.fill" catalog="system" width="128" height="112"/>
|
||||
<image name="iphone" catalog="system" width="108" height="128"/>
|
||||
<systemColor name="systemGroupedBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
<key>UISceneConfigurations</key>
|
||||
<dict>
|
||||
<key>UIWindowSceneSessionRoleApplication</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UISceneConfigurationName</key>
|
||||
<string>Default Configuration</string>
|
||||
<key>UISceneDelegateClassName</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||
<key>UISceneStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,33 @@
|
|||
//
|
||||
// ListModel.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/3.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
struct Row {
|
||||
var title: String
|
||||
var action: () -> Void
|
||||
}
|
||||
|
||||
struct Section {
|
||||
var title: String
|
||||
var rows = [Row]()
|
||||
mutating func add(title: String, action: @escaping () -> Void) {
|
||||
rows.append(.init(title: title, action: action))
|
||||
}
|
||||
}
|
||||
|
||||
struct ListModel {
|
||||
|
||||
var sections = [Section]()
|
||||
|
||||
mutating func add(title: String, rows: (_ section: inout Section) -> Void) {
|
||||
var sec = Section(title: title)
|
||||
rows(&sec)
|
||||
sections.append(sec)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
//
|
||||
// ListVC.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/3.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class ListVC: UITableViewController {
|
||||
|
||||
var list = ListModel()
|
||||
|
||||
lazy var header: TableHeaderView = TableHeaderView(text: "ProHUD")
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
tableView.tableHeaderView = header
|
||||
tableView.sectionHeaderHeight = 32
|
||||
tableView.sectionFooterHeight = 8
|
||||
|
||||
}
|
||||
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||
// #warning Incomplete implementation, return the number of sections
|
||||
list.sections.count
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
// #warning Incomplete implementation, return the number of rows
|
||||
list.sections[section].rows.count
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||
list.sections[section].title
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
|
||||
cell.textLabel?.text = list.sections[indexPath.section].rows[indexPath.row].title
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
list.sections[indexPath.section].rows[indexPath.row].action()
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,9 +1,8 @@
|
|||
//
|
||||
// SceneDelegate.swift
|
||||
// Example-Xcode11
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2020/6/15.
|
||||
// Copyright © 2020 xaoxuu. All rights reserved.
|
||||
// Created by xaoxuu on 2022/8/29.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
@ -17,46 +16,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||
// 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 = (scene as? UIWindowScene) else { return }
|
||||
|
||||
print(scene.statusBarManager?.statusBarFrame)
|
||||
let rootVC = RootVC()
|
||||
window?.rootViewController = rootVC
|
||||
window?.makeKeyAndVisible()
|
||||
print("root window \(window!)")
|
||||
ProHUD.config { (cfg) in
|
||||
// cfg.rootViewController = rootVC
|
||||
// cfg.windowScene = scene
|
||||
cfg.alert { (a) in
|
||||
a.titleFont = .bold(22)
|
||||
a.bodyFont = .regular(17)
|
||||
a.boldTextFont = .bold(18)
|
||||
a.buttonFont = .bold(18)
|
||||
a.forceQuitTimer = 3
|
||||
}
|
||||
cfg.toast { (t) in
|
||||
t.titleFont = .bold(18)
|
||||
t.bodyFont = .regular(16)
|
||||
}
|
||||
cfg.guard { (g) in
|
||||
g.titleFont = .bold(22)
|
||||
g.subTitleFont = .bold(20)
|
||||
g.bodyFont = .regular(17)
|
||||
g.buttonFont = .bold(18)
|
||||
}
|
||||
}
|
||||
|
||||
let window = UIWindow()
|
||||
window.makeKeyAndVisible()
|
||||
window.resignKey()
|
||||
|
||||
guard let _ = (scene as? UIWindowScene) else { return }
|
||||
}
|
||||
|
||||
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 neccessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||
}
|
||||
|
||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
|
@ -0,0 +1,34 @@
|
|||
//
|
||||
// File.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/9.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
public extension ViewModel {
|
||||
// static var plain: ViewModel {
|
||||
// ViewModel()
|
||||
// }
|
||||
// static var note: ViewModel {
|
||||
// ViewModel(icon: UIImage(named: "prohud.note"))
|
||||
// }
|
||||
static var msg: ViewModel {
|
||||
ViewModel(icon: UIImage(inProHUD: "prohud.message"))
|
||||
}
|
||||
static func msg(_ seconds: TimeInterval) -> ViewModel {
|
||||
ViewModel(icon: UIImage(inProHUD: "prohud.message"), duration: seconds)
|
||||
}
|
||||
static var loading: ViewModel {
|
||||
let obj = ViewModel(icon: UIImage(named: "prohud.rainbow.circle"))
|
||||
obj.rotation = .init(repeatCount: .infinity)
|
||||
return obj
|
||||
}
|
||||
// static func loading(_ seconds: TimeInterval) -> ViewModel {
|
||||
// let obj = ViewModel(icon: UIImage(named: "prohud.rainbow.circle"), duration: seconds)
|
||||
// obj.rotation = .init(repeatCount: .infinity)
|
||||
// return obj
|
||||
// }
|
||||
}
|
|
@ -0,0 +1,214 @@
|
|||
//
|
||||
// SheetVC.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/3.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
class SheetVC: ListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
header.titleLabel.text = "ProHUD.Sheet"
|
||||
header.detailLabel.text = "操作表控件,用于弱阻塞性交互。显示区域为从屏幕底部向上弹出的新图层,可以放置丰富的内容,自由度较高。"
|
||||
|
||||
list.add(title: "默认布局") { section in
|
||||
section.add(title: "标题 + 正文 + 按钮") {
|
||||
Sheet { sheet in
|
||||
sheet.add(title: "ProHUD")
|
||||
sheet.add(subTitle: "什么是操作表控件")
|
||||
sheet.add(message: "操作表控件,用于弱阻塞性交互。显示区域为从屏幕底部向上弹出的新图层,可以放置丰富的内容,自由度较高。")
|
||||
sheet.add(spacing: 24)
|
||||
sheet.add(action: "确认", style: .destructive) { sheet in
|
||||
Alert(.confirm) { alert in
|
||||
alert.vm.title = "处理点击事件"
|
||||
alert.add(action: "我知道了")
|
||||
}
|
||||
}
|
||||
sheet.add(action: "取消", style: .gray)
|
||||
}
|
||||
}
|
||||
section.add(title: "放置自定义控件") {
|
||||
Sheet { sheet in
|
||||
sheet.add(title: "ProHUD")
|
||||
// 图片
|
||||
let imgv = UIImageView(image: UIImage(named: "landscape"))
|
||||
imgv.contentMode = .scaleAspectFill
|
||||
imgv.clipsToBounds = true
|
||||
imgv.layer.cornerRadiusWithContinuous = 16
|
||||
sheet.add(subview: imgv).snp.makeConstraints { make in
|
||||
make.height.equalTo(200)
|
||||
}
|
||||
// seg
|
||||
let seg = UISegmentedControl(items: ["开发", "测试", "预发", "生产"])
|
||||
seg.selectedSegmentIndex = 0
|
||||
sheet.add(subview: seg).snp.makeConstraints { make in
|
||||
make.height.equalTo(40)
|
||||
make.width.equalTo(400)
|
||||
}
|
||||
// slider
|
||||
let slider = UISlider()
|
||||
slider.minimumValue = 0
|
||||
slider.maximumValue = 100
|
||||
slider.value = 50
|
||||
sheet.add(subview: slider).snp.makeConstraints { make in
|
||||
make.height.equalTo(50)
|
||||
}
|
||||
|
||||
sheet.add(spacing: 50)
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "全屏") {
|
||||
Sheet { sheet in
|
||||
sheet.config.isFullScreen = true
|
||||
sheet.add(title: "ProHUD")
|
||||
sheet.add(action: "OK")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
list.add(title: "事件管理") { section in
|
||||
section.add(title: "拦截返回事件") {
|
||||
Sheet { sheet in
|
||||
sheet.add(title: "ProHUD")
|
||||
sheet.add(message: "点击背景将不会dismiss,必须在下方做出选择才能关掉")
|
||||
sheet.add(spacing: 24)
|
||||
sheet.add(action: "确认")
|
||||
sheet.add(action: "取消", style: .gray)
|
||||
} onTappedBackground: { sheet in
|
||||
print("点击了背景")
|
||||
Toast.lazyPush(identifier: "alert") { toast in
|
||||
toast.vm = .note
|
||||
toast.vm.title = "点击了背景"
|
||||
toast.vm.message = "点击背景将不会dismiss,必须在下方做出选择才能关掉"
|
||||
toast.vm.duration = 2
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
list.add(title: "自定义样式") { section in
|
||||
section.add(title: "圆角半径 & 屏幕边距") {
|
||||
Sheet { sheet in
|
||||
sheet.add(title: "圆角半径 & 屏幕边距")
|
||||
|
||||
sheet.add(subTitle: "圆角半径")
|
||||
let s1 = UISlider()
|
||||
s1.minimumValue = 0
|
||||
s1.maximumValue = 40
|
||||
s1.value = Float(sheet.config.cardCornerRadius ?? 40)
|
||||
sheet.add(subview: s1).snp.makeConstraints { make in
|
||||
make.height.equalTo(50)
|
||||
}
|
||||
if #available(iOS 14.0, *) {
|
||||
s1.addAction(.init(handler: { [unowned s1] act in
|
||||
sheet.config.cardCornerRadius = CGFloat(s1.value)
|
||||
sheet.contentView.layer.cornerRadiusWithContinuous = sheet.config.cardCornerRadius ?? 40
|
||||
}), for: .valueChanged)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
|
||||
sheet.add(subTitle: "屏幕边距")
|
||||
let s2 = UISlider()
|
||||
s2.minimumValue = 0
|
||||
s2.maximumValue = 40
|
||||
s2.value = Float(sheet.config.edgeInset)
|
||||
sheet.add(subview: s2).snp.makeConstraints { make in
|
||||
make.height.equalTo(50)
|
||||
}
|
||||
if #available(iOS 14.0, *) {
|
||||
s2.addAction(.init(handler: { [unowned s2] act in
|
||||
sheet.config.edgeInset = CGFloat(s2.value)
|
||||
sheet.reloadData()
|
||||
}), for: .valueChanged)
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
|
||||
sheet.add(spacing: 24)
|
||||
sheet.add(action: "OK", style: .gray)
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "卡片背景样式") {
|
||||
Sheet { sheet in
|
||||
sheet.title = "卡片背景样式"
|
||||
sheet.add(action: "白色") { sheet in
|
||||
sheet.contentMaskView.backgroundColor = .white
|
||||
sheet.contentMaskView.effect = .none
|
||||
}
|
||||
sheet.add(action: "橙色") { sheet in
|
||||
sheet.contentMaskView.backgroundColor = .systemOrange
|
||||
sheet.contentMaskView.effect = .none
|
||||
}
|
||||
sheet.add(action: "毛玻璃 light") { sheet in
|
||||
sheet.contentMaskView.backgroundColor = .clear
|
||||
sheet.contentMaskView.effect = UIBlurEffect(style: .light)
|
||||
}
|
||||
sheet.add(action: "毛玻璃 dark") { sheet in
|
||||
sheet.contentMaskView.backgroundColor = .clear
|
||||
sheet.contentMaskView.effect = UIBlurEffect(style: .dark)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
section.add(title: "自定义卡片背景") {
|
||||
Sheet { sheet in
|
||||
sheet.add(title: "ProHUD")
|
||||
sheet.add(spacing: 24)
|
||||
sheet.add(action: "OK")
|
||||
sheet.config.contentViewMask { mask in
|
||||
mask.effect = .none
|
||||
mask.backgroundColor = .clear
|
||||
}
|
||||
} .onViewWillAppear { vc in
|
||||
guard let sheet = vc as? Sheet else { return }
|
||||
let imgv = UIImageView(image: UIImage(named: "landscape"))
|
||||
imgv.contentMode = .scaleAspectFill
|
||||
imgv.clipsToBounds = true
|
||||
imgv.layer.cornerRadiusWithContinuous = 16
|
||||
sheet.contentView.insertSubview(imgv, at: 0)
|
||||
imgv.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
make.height.equalTo(300)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
section.add(title: "透明背景") {
|
||||
Sheet { sheet in
|
||||
sheet.backgroundView.backgroundColor = .clear
|
||||
sheet.add(title: "ProHUD")
|
||||
sheet.add(spacing: 24)
|
||||
sheet.add(action: "OK")
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "自定义布局") {
|
||||
Sheet { sheet in
|
||||
let imgv = UIImageView(image: UIImage(named: "landscape"))
|
||||
imgv.contentMode = .scaleAspectFill
|
||||
imgv.clipsToBounds = true
|
||||
imgv.layer.cornerRadiusWithContinuous = 16
|
||||
sheet.set(customView: imgv).snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
make.height.equalTo(300)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
//
|
||||
// TableHeaderView.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/5.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class TableHeaderView: UIView {
|
||||
|
||||
lazy var titleLabel: UILabel = {
|
||||
let lb = UILabel(frame: .init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 80))
|
||||
lb.font = .systemFont(ofSize: 32, weight: .black)
|
||||
lb.textAlignment = .center
|
||||
lb.text = "ProHUD"
|
||||
return lb
|
||||
}()
|
||||
|
||||
lazy var detailLabel: UILabel = {
|
||||
let lb = UILabel(frame: .init(x: 0, y: 80, width: UIScreen.main.bounds.width, height: 120))
|
||||
lb.font = .systemFont(ofSize: 15, weight: .regular)
|
||||
lb.textAlignment = .justified
|
||||
lb.numberOfLines = 0
|
||||
lb.text = "ProHUD"
|
||||
return lb
|
||||
}()
|
||||
|
||||
convenience init(text: String) {
|
||||
self.init(frame: .init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 150))
|
||||
titleLabel.text = text
|
||||
}
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
addSubview(detailLabel)
|
||||
addSubview(titleLabel)
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.left.right.equalToSuperview().inset(24)
|
||||
make.top.equalToSuperview().offset(20)
|
||||
}
|
||||
detailLabel.snp.makeConstraints { make in
|
||||
make.left.right.equalTo(titleLabel)
|
||||
make.top.equalTo(titleLabel.snp.bottom).offset(12)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,224 @@
|
|||
//
|
||||
// ToastVC.swift
|
||||
// PHDemo
|
||||
//
|
||||
// Created by xaoxuu on 2022/9/3.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import ProHUD
|
||||
|
||||
class ToastVC: ListVC {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
let title = "通知条控件"
|
||||
let message = "通知条控件,用于非阻塞性事件通知。显示效果如同原生通知,默认会自动消失,可以支持手势移除,有多条通知可以平铺并列显示。"
|
||||
header.titleLabel.text = "ProHUD.Toast"
|
||||
header.detailLabel.text = message
|
||||
|
||||
list.add(title: "默认布局") { section in
|
||||
section.add(title: "标题 + 正文") {
|
||||
Toast(.title(title).message(message)).push()
|
||||
}
|
||||
section.add(title: "一段长文本") {
|
||||
Toast(.message(message)).push()
|
||||
}
|
||||
section.add(title: "图标 + 标题 + 正文") {
|
||||
let s1 = "正在加载"
|
||||
let s2 = "这条通知4s后消失"
|
||||
let toast = Toast(.loading(4).title(s1).message(s2))
|
||||
toast.identifier = "loading"
|
||||
toast.push()
|
||||
toast.update(progress: 0)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
toast.update(progress: 0.5)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
toast.update(progress: 1)
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) {
|
||||
Toast.update(identifier: "loading") { toast in
|
||||
toast.vm = .success(2).title("加载成功").message("这条通知2s后消失")
|
||||
}
|
||||
}
|
||||
}
|
||||
section.add(title: "图标 + 一段长文本") {
|
||||
Toast(.note.message(message)).push()
|
||||
}
|
||||
}
|
||||
|
||||
list.add(title: "事件管理") { section in
|
||||
section.add(title: "全局点击事件") {
|
||||
let title = "您收到了一条消息"
|
||||
let message = "这条消息5s后消失,点击回复"
|
||||
Toast(.msg(5).title(title).message(message)) { toast in
|
||||
toast.onTapped { toast in
|
||||
toast.pop()
|
||||
testAlert()
|
||||
}
|
||||
}
|
||||
}
|
||||
section.add(title: "增加按钮") {
|
||||
let title = "您收到了一条好友申请"
|
||||
let message = "丹妮莉丝·坦格利安申请添加您为好友,是否同意?"
|
||||
Toast(.title(title).message(message)) { toast in
|
||||
toast.isRemovable = false
|
||||
toast.vm.icon = UIImage(named: "avatar")
|
||||
toast.imageView.layer.masksToBounds = true
|
||||
toast.imageView.layer.cornerRadius = toast.config.iconSize.width / 2
|
||||
toast.add(action: "拒绝", style: .destructive) { toast in
|
||||
Alert.lazyPush(identifier: "Dracarys") { alert in
|
||||
alert.vm = .message("Dracarys")
|
||||
alert.vm.icon = UIImage(inProHUD: "prohud.windmill")
|
||||
alert.vm.rotation = .init(repeatCount: .infinity)
|
||||
alert.config.enableShadow = false
|
||||
alert.config.contentViewMask { mask in
|
||||
mask.effect = .none
|
||||
mask.backgroundColor = .clear
|
||||
}
|
||||
alert.config.backgroundViewMask { mask in
|
||||
mask.backgroundColor = .systemRed
|
||||
}
|
||||
alert.config.iconSize = .init(width: 64, height: 64)
|
||||
alert.config.boldTextFont = .init(name: "Papyrus", size: 40)
|
||||
alert.config.dynamicTextColor = .white
|
||||
}
|
||||
}
|
||||
toast.add(action: "同意") { toast in
|
||||
Alert.find(identifier: "Dracarys")?.pop()
|
||||
toast.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "禁止手势移除") {
|
||||
let title = "这条消息很重要"
|
||||
let message = "向上滑动将不会移除消息,您必须手动处理,用于重要但非阻塞性的事件。(通过代码处理或者在点击事件处理)"
|
||||
Toast(.warning.title(title).message(message)) { toast in
|
||||
toast.isRemovable = false
|
||||
toast.onTapped { toast in
|
||||
toast.pop()
|
||||
testAlert()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
list.add(title: "自定义视图") { section in
|
||||
section.add(title: "图片") {
|
||||
Toast { toast in
|
||||
toast.config.cardMaxHeight = 200 // 自定义视图时需手动指定高度
|
||||
let imgv = UIImageView(image: UIImage(named: "landscape"))
|
||||
imgv.contentMode = .scaleAspectFill
|
||||
toast.add(customView: imgv).snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
}
|
||||
toast.onTapped { toast in
|
||||
toast.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "其它控件") {
|
||||
Toast { toast in
|
||||
toast.config.cardMaxHeight = 200 // 自定义视图时需手动指定高度
|
||||
|
||||
let stack = UIStackView()
|
||||
stack.axis = .vertical
|
||||
stack.distribution = .fill
|
||||
stack.spacing = 8
|
||||
stack.alignment = .fill
|
||||
|
||||
let lb = UILabel()
|
||||
lb.font = .systemFont(ofSize: 20, weight: .bold)
|
||||
lb.text = "Custom Toast"
|
||||
lb.textAlignment = .center
|
||||
stack.addArrangedSubview(lb)
|
||||
|
||||
let btn1 = ProHUD.Button(config: toast.config, action: .init(style: .gray, title: "取消"))
|
||||
btn1.onTouchUpInside { action in
|
||||
print("点击了取消")
|
||||
testAlert()
|
||||
}
|
||||
let btn2 = ProHUD.Button(config: toast.config, action: .init(style: .tinted, title: "确定"))
|
||||
btn2.onTouchUp { action in
|
||||
print("点击了确定")
|
||||
testAlert()
|
||||
}
|
||||
let actions = UIStackView(arrangedSubviews: [btn1, btn2])
|
||||
actions.axis = .horizontal
|
||||
actions.distribution = .fillEqually
|
||||
actions.spacing = 8
|
||||
actions.alignment = .fill
|
||||
|
||||
stack.addArrangedSubview(actions)
|
||||
actions.snp.makeConstraints { make in
|
||||
make.height.equalTo(40)
|
||||
}
|
||||
|
||||
toast.add(customView: stack).snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview().inset(8)
|
||||
}
|
||||
toast.onTapped { toast in
|
||||
toast.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
section.add(title: "卡片背景样式") {
|
||||
Toast { toast in
|
||||
toast.vm.title = "卡片背景样式"
|
||||
toast.add(action: "浅色毛玻璃") { toast in
|
||||
toast.contentMaskView.effect = UIBlurEffect(style: .light)
|
||||
toast.contentMaskView.backgroundColor = .clear
|
||||
}
|
||||
toast.add(action: "深色毛玻璃") { toast in
|
||||
toast.contentMaskView.effect = UIBlurEffect(style: .dark)
|
||||
toast.contentMaskView.backgroundColor = .clear
|
||||
}
|
||||
toast.add(action: "纯色") { toast in
|
||||
toast.contentMaskView.effect = .none
|
||||
toast.contentMaskView.backgroundColor = .red.lighten()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
section.add(title: "共享配置") {
|
||||
func foo() {
|
||||
Toast { toast in
|
||||
toast.title = "共享配置"
|
||||
toast.vm.message = "建议在App启动后进行通用配置设置,所有实例都会先拉取通用配置为默认值,修改这些配置会影响到所有实例。"
|
||||
toast.add(action: "默认", style: .gray) { toast in
|
||||
Toast.Configuration.shared { config in
|
||||
config.titleFont = .systemFont(ofSize: 19, weight: .bold)
|
||||
}
|
||||
toast.pop()
|
||||
foo()
|
||||
}
|
||||
toast.add(action: "大号标题") { toast in
|
||||
Toast.Configuration.shared { config in
|
||||
config.titleFont = .systemFont(ofSize: 28, weight: .medium)
|
||||
}
|
||||
toast.pop()
|
||||
foo()
|
||||
}
|
||||
}
|
||||
}
|
||||
foo()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fileprivate func testAlert() {
|
||||
Alert { alert in
|
||||
alert.vm.title = "处理点击事件"
|
||||
alert.add(action: "我知道了", style: .destructive)
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@
|
|||
"repositoryURL": "https://github.com/xaoxuu/Inspire.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "cad0c64e6995a06ee3bf3ed7c632ad27c1b8ffb1",
|
||||
"version": "2.0.0"
|
||||
"revision": "05bdbf23e380b7b283f9ef5c5115e1c1e1d1ad97",
|
||||
"version": "2.2.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -15,8 +15,8 @@
|
|||
"repositoryURL": "https://github.com/SnapKit/SnapKit.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d458564516e5676af9c70b4f4b2a9178294f1bc6",
|
||||
"version": "5.0.1"
|
||||
"revision": "f222cbdf325885926566172f6f5f06af95473158",
|
||||
"version": "5.6.0"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// swift-tools-version:5.3
|
||||
// swift-tools-version:5.6
|
||||
|
||||
import PackageDescription
|
||||
|
||||
|
@ -10,15 +10,13 @@ let package = Package(
|
|||
],
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/SnapKit/SnapKit.git", "5.0.0" ..< "6.0.0"),
|
||||
.package(url: "https://github.com/xaoxuu/Inspire.git", "2.1.0" ..< "3.0.0"),
|
||||
.package(url: "https://github.com/xaoxuu/Inspire.git", "3.0.0" ..< "4.0.0"),
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: "ProHUD",
|
||||
dependencies: ["SnapKit", "Inspire"],
|
||||
path: "Source",
|
||||
resources: [.process("ProHUD.xcassets")]
|
||||
resources: [.process("Resources/ProHUD.xcassets")]
|
||||
)
|
||||
],
|
||||
swiftLanguageVersions: [.v5]
|
||||
]
|
||||
)
|
||||
|
|
14
Podfile
|
@ -1,14 +0,0 @@
|
|||
platform :ios, '9.0'
|
||||
use_frameworks!
|
||||
|
||||
target 'ProHUD' do
|
||||
|
||||
# pod 'SnapKit', '5.0.1'
|
||||
# pod 'Inspire', '1.1.0' # :path => '../Inspire'
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
#pod install --verbose --no-repo-update #安装命令
|
||||
#pod update --verbose --no-repo-update #更新命令
|
|
@ -1,3 +0,0 @@
|
|||
PODFILE CHECKSUM: 6cebb4bc46375d38fc36a728dcb33f3b7ec0c396
|
||||
|
||||
COCOAPODS: 1.10.1
|
|
@ -1,20 +0,0 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'ProHUD'
|
||||
s.version = "1.0"
|
||||
s.license = 'MIT'
|
||||
s.summary = '可完全定制化的HUD,包含顶部区域的Toast,中央区域的Alert和底部区域的ActionSheet。'
|
||||
s.homepage = "http://xaoxuu.com"
|
||||
s.authors = { 'xaoxuu' => 'xaoxuu@gmail.com' }
|
||||
s.source = { :git => "https://github.com/xaoxuu/ProHUD.git", :tag => "#{s.version}", :submodules => false}
|
||||
|
||||
s.ios.deployment_target = '10.0'
|
||||
|
||||
s.source_files = 'Source/**/*.swift'
|
||||
s.resource_bundles = { 'ProHUD' => ['Source/**/*.{xcassets,strings,xml,storyboard,xib,xcdatamodeld,gif,lproj}'] }
|
||||
s.requires_arc = true
|
||||
s.swift_version = '5.0'
|
||||
|
||||
s.dependency 'SnapKit', '5.0'
|
||||
s.dependency 'Inspire'
|
||||
|
||||
end
|
|
@ -1,528 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 52;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
36CB9DEED3C3E823FE7B1C75 /* Pods_ProHUD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2011798511AD590A613E54E /* Pods_ProHUD.framework */; };
|
||||
CD16490B22EF09AB0077988C /* AlertModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD16490A22EF09AB0077988C /* AlertModel.swift */; };
|
||||
CD16490D22EF09B40077988C /* AlertConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD16490C22EF09B40077988C /* AlertConfig.swift */; };
|
||||
CD16491222EF0D900077988C /* HUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD16491122EF0D900077988C /* HUDView.swift */; };
|
||||
CD16491422EF12220077988C /* ProHUD.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD16491322EF12220077988C /* ProHUD.xcassets */; };
|
||||
CD6CD86C22F1858F00F4FD4A /* ToastModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6CD86B22F1858F00F4FD4A /* ToastModel.swift */; };
|
||||
CD6CD87022F185A700F4FD4A /* ToastController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6CD86F22F185A700F4FD4A /* ToastController.swift */; };
|
||||
CD6CD87222F185AF00F4FD4A /* ToastConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6CD87122F185AF00F4FD4A /* ToastConfig.swift */; };
|
||||
CD6CD87522F185C200F4FD4A /* GuardController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6CD87422F185C200F4FD4A /* GuardController.swift */; };
|
||||
CD6CD87922F185D000F4FD4A /* GuardConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6CD87822F185D000F4FD4A /* GuardConfig.swift */; };
|
||||
CD95D22122E72C4C007559A3 /* ProHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = CD95D21F22E72C4C007559A3 /* ProHUD.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
CD95D26922E72DA1007559A3 /* AlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD95D26822E72DA1007559A3 /* AlertController.swift */; };
|
||||
CD95D26B22E72DB3007559A3 /* ProHUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD95D26A22E72DB3007559A3 /* ProHUD.swift */; };
|
||||
CDB6A07B22EEF06500AF6CF0 /* HUDController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB6A07A22EEF06500AF6CF0 /* HUDController.swift */; };
|
||||
CDB6A07D22EEF19D00AF6CF0 /* HUDConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB6A07C22EEF19D00AF6CF0 /* HUDConfig.swift */; };
|
||||
CDC39CFD22FD6DDF0070E914 /* GuardModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC39CFC22FD6DDF0070E914 /* GuardModel.swift */; };
|
||||
CDC67BE92490A19100CC6FE6 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = CDC67BE82490A19100CC6FE6 /* SnapKit */; };
|
||||
CDC67BEC2490A1D100CC6FE6 /* Inspire in Frameworks */ = {isa = PBXBuildFile; productRef = CDC67BEB2490A1D100CC6FE6 /* Inspire */; };
|
||||
CDF2C58924A0572C002ECDD5 /* HUDUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF2C58824A0572C002ECDD5 /* HUDUtils.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
3C95FD2F17A45D13E2AB9306 /* Pods-ProHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ProHUD.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ProHUD/Pods-ProHUD.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
C2011798511AD590A613E54E /* Pods_ProHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ProHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CD16490A22EF09AB0077988C /* AlertModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertModel.swift; sourceTree = "<group>"; };
|
||||
CD16490C22EF09B40077988C /* AlertConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertConfig.swift; sourceTree = "<group>"; };
|
||||
CD16491122EF0D900077988C /* HUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUDView.swift; sourceTree = "<group>"; };
|
||||
CD16491322EF12220077988C /* ProHUD.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ProHUD.xcassets; sourceTree = "<group>"; };
|
||||
CD6CD86B22F1858F00F4FD4A /* ToastModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastModel.swift; sourceTree = "<group>"; };
|
||||
CD6CD86F22F185A700F4FD4A /* ToastController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastController.swift; sourceTree = "<group>"; };
|
||||
CD6CD87122F185AF00F4FD4A /* ToastConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastConfig.swift; sourceTree = "<group>"; };
|
||||
CD6CD87422F185C200F4FD4A /* GuardController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardController.swift; sourceTree = "<group>"; };
|
||||
CD6CD87822F185D000F4FD4A /* GuardConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardConfig.swift; sourceTree = "<group>"; };
|
||||
CD95D21C22E72C4C007559A3 /* ProHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ProHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CD95D21F22E72C4C007559A3 /* ProHUD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProHUD.h; sourceTree = "<group>"; };
|
||||
CD95D22022E72C4C007559A3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
CD95D26722E72D68007559A3 /* ProHUD.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ProHUD.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
|
||||
CD95D26822E72DA1007559A3 /* AlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertController.swift; sourceTree = "<group>"; };
|
||||
CD95D26A22E72DB3007559A3 /* ProHUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProHUD.swift; sourceTree = "<group>"; };
|
||||
CDB6A07A22EEF06500AF6CF0 /* HUDController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUDController.swift; sourceTree = "<group>"; };
|
||||
CDB6A07C22EEF19D00AF6CF0 /* HUDConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUDConfig.swift; sourceTree = "<group>"; };
|
||||
CDC39CFC22FD6DDF0070E914 /* GuardModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardModel.swift; sourceTree = "<group>"; };
|
||||
CDF2C58824A0572C002ECDD5 /* HUDUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUDUtils.swift; sourceTree = "<group>"; };
|
||||
DC31EBFAC56868D6096A233A /* Pods-ProHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ProHUD.release.xcconfig"; path = "Pods/Target Support Files/Pods-ProHUD/Pods-ProHUD.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
CD95D21922E72C4C007559A3 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CDC67BEC2490A1D100CC6FE6 /* Inspire in Frameworks */,
|
||||
CDC67BE92490A19100CC6FE6 /* SnapKit in Frameworks */,
|
||||
36CB9DEED3C3E823FE7B1C75 /* Pods_ProHUD.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
33E080A4BE17176DF10FFA89 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C95FD2F17A45D13E2AB9306 /* Pods-ProHUD.debug.xcconfig */,
|
||||
DC31EBFAC56868D6096A233A /* Pods-ProHUD.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BA9A12AB2B7D4F5C9A8C773C /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C2011798511AD590A613E54E /* Pods_ProHUD.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD16491022EF0A4B0077988C /* Alert */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD95D26822E72DA1007559A3 /* AlertController.swift */,
|
||||
CD16490A22EF09AB0077988C /* AlertModel.swift */,
|
||||
CD16490C22EF09B40077988C /* AlertConfig.swift */,
|
||||
);
|
||||
path = Alert;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD6CD87322F185B400F4FD4A /* Toast */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD6CD86B22F1858F00F4FD4A /* ToastModel.swift */,
|
||||
CD6CD86F22F185A700F4FD4A /* ToastController.swift */,
|
||||
CD6CD87122F185AF00F4FD4A /* ToastConfig.swift */,
|
||||
);
|
||||
path = Toast;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD6CD87C22F185DA00F4FD4A /* Guard */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD6CD87422F185C200F4FD4A /* GuardController.swift */,
|
||||
CD6CD87822F185D000F4FD4A /* GuardConfig.swift */,
|
||||
CDC39CFC22FD6DDF0070E914 /* GuardModel.swift */,
|
||||
);
|
||||
path = Guard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD95D21222E72C4C007559A3 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD95D26722E72D68007559A3 /* ProHUD.podspec */,
|
||||
CDC67BED2490A28500CC6FE6 /* Source */,
|
||||
CD95D21E22E72C4C007559A3 /* ProHUD */,
|
||||
CD95D21D22E72C4C007559A3 /* Products */,
|
||||
33E080A4BE17176DF10FFA89 /* Pods */,
|
||||
BA9A12AB2B7D4F5C9A8C773C /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD95D21D22E72C4C007559A3 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD95D21C22E72C4C007559A3 /* ProHUD.framework */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CD95D21E22E72C4C007559A3 /* ProHUD */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD95D22022E72C4C007559A3 /* Info.plist */,
|
||||
);
|
||||
path = ProHUD;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDC67BED2490A28500CC6FE6 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CD95D21F22E72C4C007559A3 /* ProHUD.h */,
|
||||
CD16491322EF12220077988C /* ProHUD.xcassets */,
|
||||
CD95D26A22E72DB3007559A3 /* ProHUD.swift */,
|
||||
CDB6A07C22EEF19D00AF6CF0 /* HUDConfig.swift */,
|
||||
CDB6A07A22EEF06500AF6CF0 /* HUDController.swift */,
|
||||
CD16491122EF0D900077988C /* HUDView.swift */,
|
||||
CDF2C58824A0572C002ECDD5 /* HUDUtils.swift */,
|
||||
CD6CD87322F185B400F4FD4A /* Toast */,
|
||||
CD16491022EF0A4B0077988C /* Alert */,
|
||||
CD6CD87C22F185DA00F4FD4A /* Guard */,
|
||||
);
|
||||
path = Source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
CD95D21722E72C4C007559A3 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CD95D22122E72C4C007559A3 /* ProHUD.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CD95D21B22E72C4C007559A3 /* ProHUD */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CD95D22422E72C4C007559A3 /* Build configuration list for PBXNativeTarget "ProHUD" */;
|
||||
buildPhases = (
|
||||
A54F2DB69A2889EF6E75A3EC /* [CP] Check Pods Manifest.lock */,
|
||||
CD95D21722E72C4C007559A3 /* Headers */,
|
||||
CD95D21822E72C4C007559A3 /* Sources */,
|
||||
CD95D21922E72C4C007559A3 /* Frameworks */,
|
||||
CD95D21A22E72C4C007559A3 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ProHUD;
|
||||
packageProductDependencies = (
|
||||
CDC67BE82490A19100CC6FE6 /* SnapKit */,
|
||||
CDC67BEB2490A1D100CC6FE6 /* Inspire */,
|
||||
);
|
||||
productName = ProHUD;
|
||||
productReference = CD95D21C22E72C4C007559A3 /* ProHUD.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CD95D21322E72C4C007559A3 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1100;
|
||||
ORGANIZATIONNAME = "Titan Studio";
|
||||
TargetAttributes = {
|
||||
CD95D21B22E72C4C007559A3 = {
|
||||
CreatedOnToolsVersion = 11.0;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CD95D21622E72C4C007559A3 /* Build configuration list for PBXProject "ProHUD" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CD95D21222E72C4C007559A3;
|
||||
packageReferences = (
|
||||
CDC67BE72490A19100CC6FE6 /* XCRemoteSwiftPackageReference "SnapKit" */,
|
||||
CDC67BEA2490A1D100CC6FE6 /* XCRemoteSwiftPackageReference "Inspire" */,
|
||||
);
|
||||
productRefGroup = CD95D21D22E72C4C007559A3 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CD95D21B22E72C4C007559A3 /* ProHUD */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
CD95D21A22E72C4C007559A3 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CD16491422EF12220077988C /* ProHUD.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
A54F2DB69A2889EF6E75A3EC /* [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-ProHUD-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;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CD95D21822E72C4C007559A3 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CD95D26922E72DA1007559A3 /* AlertController.swift in Sources */,
|
||||
CD6CD87922F185D000F4FD4A /* GuardConfig.swift in Sources */,
|
||||
CDB6A07D22EEF19D00AF6CF0 /* HUDConfig.swift in Sources */,
|
||||
CD6CD87222F185AF00F4FD4A /* ToastConfig.swift in Sources */,
|
||||
CD6CD87522F185C200F4FD4A /* GuardController.swift in Sources */,
|
||||
CD6CD87022F185A700F4FD4A /* ToastController.swift in Sources */,
|
||||
CD95D26B22E72DB3007559A3 /* ProHUD.swift in Sources */,
|
||||
CD16490D22EF09B40077988C /* AlertConfig.swift in Sources */,
|
||||
CD6CD86C22F1858F00F4FD4A /* ToastModel.swift in Sources */,
|
||||
CD16490B22EF09AB0077988C /* AlertModel.swift in Sources */,
|
||||
CD16491222EF0D900077988C /* HUDView.swift in Sources */,
|
||||
CDF2C58924A0572C002ECDD5 /* HUDUtils.swift in Sources */,
|
||||
CDB6A07B22EEF06500AF6CF0 /* HUDController.swift in Sources */,
|
||||
CDC39CFD22FD6DDF0070E914 /* GuardModel.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CD95D22222E72C4C007559A3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CD95D22322E72C4C007559A3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CD95D22522E72C4C007559A3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 3C95FD2F17A45D13E2AB9306 /* Pods-ProHUD.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = ProHUD/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xaoxuu.ProHUD;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CD95D22622E72C4C007559A3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = DC31EBFAC56868D6096A233A /* Pods-ProHUD.release.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 34W5TB5KD2;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = ProHUD/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xaoxuu.ProHUD;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CD95D21622E72C4C007559A3 /* Build configuration list for PBXProject "ProHUD" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CD95D22222E72C4C007559A3 /* Debug */,
|
||||
CD95D22322E72C4C007559A3 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CD95D22422E72C4C007559A3 /* Build configuration list for PBXNativeTarget "ProHUD" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CD95D22522E72C4C007559A3 /* Debug */,
|
||||
CD95D22622E72C4C007559A3 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCRemoteSwiftPackageReference section */
|
||||
CDC67BE72490A19100CC6FE6 /* XCRemoteSwiftPackageReference "SnapKit" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "https://github.com/SnapKit/SnapKit";
|
||||
requirement = {
|
||||
kind = upToNextMajorVersion;
|
||||
minimumVersion = 5.0.1;
|
||||
};
|
||||
};
|
||||
CDC67BEA2490A1D100CC6FE6 /* XCRemoteSwiftPackageReference "Inspire" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "https://github.com/xaoxuu/Inspire";
|
||||
requirement = {
|
||||
kind = upToNextMajorVersion;
|
||||
minimumVersion = 2.1.0;
|
||||
};
|
||||
};
|
||||
/* End XCRemoteSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
CDC67BE82490A19100CC6FE6 /* SnapKit */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = CDC67BE72490A19100CC6FE6 /* XCRemoteSwiftPackageReference "SnapKit" */;
|
||||
productName = SnapKit;
|
||||
};
|
||||
CDC67BEB2490A1D100CC6FE6 /* Inspire */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = CDC67BEA2490A1D100CC6FE6 /* XCRemoteSwiftPackageReference "Inspire" */;
|
||||
productName = Inspire;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = CD95D21322E72C4C007559A3 /* Project object */;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,25 +0,0 @@
|
|||
{
|
||||
"object": {
|
||||
"pins": [
|
||||
{
|
||||
"package": "Inspire",
|
||||
"repositoryURL": "https://github.com/xaoxuu/Inspire",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "fed13e3530ca38f884d190ea5c7b12b8f3b2a41b",
|
||||
"version": "2.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SnapKit",
|
||||
"repositoryURL": "https://github.com/SnapKit/SnapKit",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d458564516e5676af9c70b4f4b2a9178294f1bc6",
|
||||
"version": "5.0.1"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 1
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:ProHUD.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,25 +0,0 @@
|
|||
{
|
||||
"object": {
|
||||
"pins": [
|
||||
{
|
||||
"package": "Inspire",
|
||||
"repositoryURL": "https://github.com/xaoxuu/Inspire",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "cad0c64e6995a06ee3bf3ed7c632ad27c1b8ffb1",
|
||||
"version": "2.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SnapKit",
|
||||
"repositoryURL": "https://github.com/SnapKit/SnapKit",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d458564516e5676af9c70b4f4b2a9178294f1bc6",
|
||||
"version": "5.0.1"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 1
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -90,7 +90,7 @@ Toast.push(scene: .warning, title: "设备电量过低", message: "请及时对
|
|||
toast.isRemovable = false
|
||||
// 监听点击事件
|
||||
toast.didTapped {
|
||||
debugPrint("点击了这条横幅")
|
||||
print("点击了这条横幅")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|