我的第三次提交

This commit is contained in:
liu
2021-10-17 13:32:45 +08:00
parent b92968f349
commit 1d1869d3a7
1314 changed files with 19477 additions and 0 deletions

View File

@@ -0,0 +1,417 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
1F5E089925994C4B00FC74DE /* SettingsLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F5E089825994C4B00FC74DE /* SettingsLabelView.swift */; };
1F5E089C25995DE000FC74DE /* SettingsRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F5E089B25995DE000FC74DE /* SettingsRowView.swift */; };
1F6A4589258E53CB008CC20A /* VegetableCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6A4588258E53CB008CC20A /* VegetableCardView.swift */; };
1F6A458D258F5006008CC20A /* StartButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6A458C258F5006008CC20A /* StartButtonView.swift */; };
1F764E40259735AC005E1961 /* VegetableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F764E3F259735AC005E1961 /* VegetableHeaderView.swift */; };
1F764E4325975A10005E1961 /* SourceLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F764E4225975A10005E1961 /* SourceLinkView.swift */; };
1F764E46259785BB005E1961 /* VegetableClassificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F764E45259785BB005E1961 /* VegetableClassificationView.swift */; };
1F84B1F22590DD01005AB37E /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F84B1F12590DD01005AB37E /* OnboardingView.swift */; };
1F84B1F62591534E005AB37E /* VegetableModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F84B1F52591534E005AB37E /* VegetableModel.swift */; };
1FAAA29D2595F924009274CF /* VegetableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAAA29C2595F924009274CF /* VegetableRowView.swift */; };
1FAAA2A02596A756009274CF /* VegetableDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAAA29F2596A756009274CF /* VegetableDetailView.swift */; };
1FAF0B6425922A5F0077963B /* VegetablesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAF0B6325922A5F0077963B /* VegetablesData.swift */; };
1FBC07D6258C7928005D8191 /* VegetablesApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBC07D5258C7928005D8191 /* VegetablesApp.swift */; };
1FBC07D8258C7928005D8191 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBC07D7258C7928005D8191 /* ContentView.swift */; };
1FBC07DA258C7929005D8191 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1FBC07D9258C7929005D8191 /* Assets.xcassets */; };
1FBC07DD258C7929005D8191 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1FBC07DC258C7929005D8191 /* Preview Assets.xcassets */; };
1FCC39BB25988E18001295B5 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCC39BA25988E18001295B5 /* SettingsView.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
1F5E089825994C4B00FC74DE /* SettingsLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsLabelView.swift; sourceTree = "<group>"; };
1F5E089B25995DE000FC74DE /* SettingsRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsRowView.swift; sourceTree = "<group>"; };
1F6A4588258E53CB008CC20A /* VegetableCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableCardView.swift; sourceTree = "<group>"; };
1F6A458C258F5006008CC20A /* StartButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartButtonView.swift; sourceTree = "<group>"; };
1F764E3F259735AC005E1961 /* VegetableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableHeaderView.swift; sourceTree = "<group>"; };
1F764E4225975A10005E1961 /* SourceLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceLinkView.swift; sourceTree = "<group>"; };
1F764E45259785BB005E1961 /* VegetableClassificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableClassificationView.swift; sourceTree = "<group>"; };
1F84B1F12590DD01005AB37E /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = "<group>"; };
1F84B1F52591534E005AB37E /* VegetableModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableModel.swift; sourceTree = "<group>"; };
1FAAA29C2595F924009274CF /* VegetableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableRowView.swift; sourceTree = "<group>"; };
1FAAA29F2596A756009274CF /* VegetableDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetableDetailView.swift; sourceTree = "<group>"; };
1FAF0B6325922A5F0077963B /* VegetablesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetablesData.swift; sourceTree = "<group>"; };
1FBC07D2258C7928005D8191 /* Vegetables.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Vegetables.app; sourceTree = BUILT_PRODUCTS_DIR; };
1FBC07D5258C7928005D8191 /* VegetablesApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VegetablesApp.swift; sourceTree = "<group>"; };
1FBC07D7258C7928005D8191 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
1FBC07D9258C7929005D8191 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
1FBC07DC258C7929005D8191 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
1FBC07DE258C7929005D8191 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
1FCC39BA25988E18001295B5 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1FBC07CF258C7928005D8191 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1F6A4586258E4494008CC20A /* App */ = {
isa = PBXGroup;
children = (
1FBC07D5258C7928005D8191 /* VegetablesApp.swift */,
1FBC07D7258C7928005D8191 /* ContentView.swift */,
1F84B1F12590DD01005AB37E /* OnboardingView.swift */,
1FAAA29F2596A756009274CF /* VegetableDetailView.swift */,
1FCC39BA25988E18001295B5 /* SettingsView.swift */,
);
path = App;
sourceTree = "<group>";
};
1F6A4587258E53B4008CC20A /* View */ = {
isa = PBXGroup;
children = (
1F6A4588258E53CB008CC20A /* VegetableCardView.swift */,
1F6A458C258F5006008CC20A /* StartButtonView.swift */,
1FAAA29C2595F924009274CF /* VegetableRowView.swift */,
1F764E3F259735AC005E1961 /* VegetableHeaderView.swift */,
1F764E4225975A10005E1961 /* SourceLinkView.swift */,
1F764E45259785BB005E1961 /* VegetableClassificationView.swift */,
1F5E089825994C4B00FC74DE /* SettingsLabelView.swift */,
1F5E089B25995DE000FC74DE /* SettingsRowView.swift */,
);
path = View;
sourceTree = "<group>";
};
1F84B1F425915330005AB37E /* Model */ = {
isa = PBXGroup;
children = (
1F84B1F52591534E005AB37E /* VegetableModel.swift */,
);
path = Model;
sourceTree = "<group>";
};
1FAF0B6225922A400077963B /* Data */ = {
isa = PBXGroup;
children = (
1FAF0B6325922A5F0077963B /* VegetablesData.swift */,
);
path = Data;
sourceTree = "<group>";
};
1FBC07C9258C7928005D8191 = {
isa = PBXGroup;
children = (
1FBC07D4258C7928005D8191 /* Vegetables */,
1FBC07D3258C7928005D8191 /* Products */,
);
sourceTree = "<group>";
};
1FBC07D3258C7928005D8191 /* Products */ = {
isa = PBXGroup;
children = (
1FBC07D2258C7928005D8191 /* Vegetables.app */,
);
name = Products;
sourceTree = "<group>";
};
1FBC07D4258C7928005D8191 /* Vegetables */ = {
isa = PBXGroup;
children = (
1FAF0B6225922A400077963B /* Data */,
1F84B1F425915330005AB37E /* Model */,
1F6A4587258E53B4008CC20A /* View */,
1F6A4586258E4494008CC20A /* App */,
1FBC07D9258C7929005D8191 /* Assets.xcassets */,
1FBC07DE258C7929005D8191 /* Info.plist */,
1FBC07DB258C7929005D8191 /* Preview Content */,
);
path = Vegetables;
sourceTree = "<group>";
};
1FBC07DB258C7929005D8191 /* Preview Content */ = {
isa = PBXGroup;
children = (
1FBC07DC258C7929005D8191 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
1FBC07D1258C7928005D8191 /* Vegetables */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1FBC07E1258C7929005D8191 /* Build configuration list for PBXNativeTarget "Vegetables" */;
buildPhases = (
1FBC07CE258C7928005D8191 /* Sources */,
1FBC07CF258C7928005D8191 /* Frameworks */,
1FBC07D0258C7928005D8191 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = Vegetables;
productName = Vegetables;
productReference = 1FBC07D2258C7928005D8191 /* Vegetables.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
1FBC07CA258C7928005D8191 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1230;
LastUpgradeCheck = 1230;
TargetAttributes = {
1FBC07D1258C7928005D8191 = {
CreatedOnToolsVersion = 12.3;
};
};
};
buildConfigurationList = 1FBC07CD258C7928005D8191 /* Build configuration list for PBXProject "Vegetables" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 1FBC07C9258C7928005D8191;
productRefGroup = 1FBC07D3258C7928005D8191 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
1FBC07D1258C7928005D8191 /* Vegetables */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
1FBC07D0258C7928005D8191 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1FBC07DD258C7929005D8191 /* Preview Assets.xcassets in Resources */,
1FBC07DA258C7929005D8191 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
1FBC07CE258C7928005D8191 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1FBC07D8258C7928005D8191 /* ContentView.swift in Sources */,
1F764E4325975A10005E1961 /* SourceLinkView.swift in Sources */,
1F5E089C25995DE000FC74DE /* SettingsRowView.swift in Sources */,
1F6A458D258F5006008CC20A /* StartButtonView.swift in Sources */,
1F6A4589258E53CB008CC20A /* VegetableCardView.swift in Sources */,
1FAAA29D2595F924009274CF /* VegetableRowView.swift in Sources */,
1F84B1F62591534E005AB37E /* VegetableModel.swift in Sources */,
1FAF0B6425922A5F0077963B /* VegetablesData.swift in Sources */,
1F84B1F22590DD01005AB37E /* OnboardingView.swift in Sources */,
1F764E40259735AC005E1961 /* VegetableHeaderView.swift in Sources */,
1FAAA2A02596A756009274CF /* VegetableDetailView.swift in Sources */,
1F5E089925994C4B00FC74DE /* SettingsLabelView.swift in Sources */,
1F764E46259785BB005E1961 /* VegetableClassificationView.swift in Sources */,
1FBC07D6258C7928005D8191 /* VegetablesApp.swift in Sources */,
1FCC39BB25988E18001295B5 /* SettingsView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1FBC07DF258C7929005D8191 /* 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_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 = 14.3;
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;
};
1FBC07E0258C7929005D8191 /* 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_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 = 14.3;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
1FBC07E2258C7929005D8191 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"Vegetables/Preview Content\"";
DEVELOPMENT_TEAM = Z3W45GNWDZ;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = Vegetables/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.Vegetables;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Debug;
};
1FBC07E3258C7929005D8191 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"Vegetables/Preview Content\"";
DEVELOPMENT_TEAM = Z3W45GNWDZ;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = Vegetables/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.Vegetables;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1FBC07CD258C7928005D8191 /* Build configuration list for PBXProject "Vegetables" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1FBC07DF258C7929005D8191 /* Debug */,
1FBC07E0258C7929005D8191 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1FBC07E1258C7929005D8191 /* Build configuration list for PBXNativeTarget "Vegetables" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1FBC07E2258C7929005D8191 /* Debug */,
1FBC07E3258C7929005D8191 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 1FBC07CA258C7928005D8191 /* Project object */;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,8 @@
<?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>

View File

@@ -0,0 +1,14 @@
<?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>SchemeUserState</key>
<dict>
<key>Vegetables.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,14 @@
<?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>SchemeUserState</key>
<dict>
<key>Vegetables.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,47 @@
//
// ContentView.swift
// Vegetables
//
// Created by on 2020/12/18.
//
import SwiftUI
struct ContentView: View {
// MARK: - Properties
var vegetables: [Vegetable] = vegetablesData
@State private var isShowingSettings: Bool = false
// MARK: - Body
var body: some View {
NavigationView {
List {
ForEach(vegetables.shuffled()) { item in
NavigationLink(destination: VegetableDetailView(vegetable: item)){
VegetableRowView(vegetable: item)
.padding(.vertical, 4)
}
}
}
.navigationTitle("蔬菜")
.navigationBarItems(trailing:
Button(action: {
isShowingSettings = true
}) {
Image(systemName: "slider.horizontal.3")
}
.sheet(isPresented: $isShowingSettings) {
SettingsView()
}
)
}
}
}
// MARK: - Preview
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

View File

@@ -0,0 +1,31 @@
//
// OnboardingView.swift
// Vegetables
//
// Created by on 2020/12/21.
//
import SwiftUI
struct OnboardingView: View {
// MARK: - Properties
var vegetables: [Vegetable]
// MARK: - Body
var body: some View {
TabView {
ForEach(vegetables[0 ..< 5]) { item in
VegetableCardView(vegetable: item)
} //: Loop
} //: TabView
.tabViewStyle(PageTabViewStyle())
.padding(.vertical, 20)
}
}
// MARK: - Preview
struct OnboardingView_Previews: PreviewProvider {
static var previews: some View {
OnboardingView(vegetables: vegetablesData)
}
}

View File

@@ -0,0 +1,98 @@
//
// SettingsView.swift
// Vegetables
//
// Created by on 2020/12/27.
//
import SwiftUI
struct SettingsView: View {
// MARK: - Properties
@Environment(\.presentationMode) var presentationMode
@AppStorage("isOnboarding") var isOnboarding: Bool = false
// MARK: - Body
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack {
// MARK: -
GroupBox(
label: SettingsLabelView(labelText: "蔬菜百科", labelImage: "info.circle")) {
Divider().padding(.vertical, 4)
HStack(alignment: .center, spacing: 10 ){
Image("logo")
.resizable()
.scaledToFit()
.frame(width: 80, height: 80)
.cornerRadius(9)
Text("蔬菜是指可以做菜、烹饪成为食品的一类植物或菌类蔬菜是人们日常饮食中必不可少的食物之一。蔬菜可提供人体所必需的多种维生素和矿物质等营养物质。本App的目的就是让更多的人了解每种蔬菜的特性。")
.font(.footnote)
}
}
// MARK: -
GroupBox(label: SettingsLabelView(labelText: "定制化", labelImage: "paintbrush")) {
Divider().padding(.vertical, 4)
Text("如果需要,那么你可以通过这个开关来重置引导页面。")
.padding(.vertical, 8)
.frame(minHeight: 60)
.layoutPriority(1)
.font(.footnote)
.multilineTextAlignment(.leading)
Toggle(isOn: $isOnboarding) {
if isOnboarding {
Text("引导页面已重置").fontWeight(.bold)
.foregroundColor(Color.green)
} else {
Text("重置引导页面").fontWeight(.bold)
.foregroundColor(Color.secondary)
}
}
.padding()
.background(
Color(UIColor.tertiarySystemBackground)
.clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
)
}
// MARK: -
GroupBox(label: SettingsLabelView(labelText: "应用程序", labelImage: "apps.iphone")) {
SettingsRowView(name: "开发者", content: "liuming / Happy")
SettingsRowView(name: "设计者", content: "Oscar")
SettingsRowView(name: "兼容性", content: "iOS 14")
SettingsRowView(name: "网站", linkLabel: "百度", linkDestination: "www.baidu.com")
SettingsRowView(name: "微博", linkLabel: "@刘铭", linkDestination: "weibo.com")
SettingsRowView(name: "SwiftUI", content: "1.0")
SettingsRowView(name: "版本", content: "1.3.0")
}
} //: VStack
.navigationBarTitle(Text("设置"), displayMode: .large)
.navigationBarItems(trailing:
Button(action: {
// 退
presentationMode.wrappedValue.dismiss()
}){
Image(systemName: "xmark")
}
)
.padding()
} //: ScrollView
} //: NavigationView
}
}
// MARK: - Preview
struct SettingsView_Previews: PreviewProvider {
static var previews: some View {
SettingsView()
.preferredColorScheme(.light)
.previewDevice("iPhone 11 Pro")
}
}

View File

@@ -0,0 +1,69 @@
//
// VegetableDetailView.swift
// Vegetables
//
// Created by on 2020/12/26.
//
import SwiftUI
struct VegetableDetailView: View {
// MARK: - Properties
var vegetable: Vegetable
// MARK: - Body
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .center, spacing: 20) {
// Header
VegetableHeaderView(vegetable: vegetable)
VStack(alignment: .leading, spacing: 20) {
//
Text(vegetable.title)
.font(.largeTitle)
.fontWeight(.heavy)
.foregroundColor(vegetable.gradientColors[1])
//
Text(vegetable.headline)
.font(.headline)
.multilineTextAlignment(.leading)
//
VegetableClassificationView(vegetable: vegetable)
//
Text("了解更多关于:\(vegetable.title)")
.fontWeight(.bold)
.foregroundColor(vegetable.gradientColors[1])
//
Text(vegetable.description)
.multilineTextAlignment(.leading)
//
SourceLinkView()
.padding(.top, 10)
.padding(.bottom, 40)
} //: VStack
.padding(.horizontal, 20)
.frame(maxWidth: 640, alignment: .center)
} //: VStack
.navigationBarTitle(vegetable.title, displayMode: .inline)
.navigationBarHidden(true)
} //: ScrollView
.edgesIgnoringSafeArea(.top)
} //: NavigationView
}
}
// MARK: - Preview
struct VegetableDetailView_Previews: PreviewProvider {
static var previews: some View {
VegetableDetailView(vegetable: vegetablesData[0])
}
}

View File

@@ -0,0 +1,23 @@
//
// VegetablesApp.swift
// Vegetables
//
// Created by on 2020/12/18.
//
import SwiftUI
@main
struct VegetablesApp: App {
@AppStorage("isOnboarding") var isOnboarding: Bool = true
var body: some Scene {
WindowGroup {
if isOnboarding {
OnboardingView(vegetables: vegetablesData)
}else {
ContentView()
}
}
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0.000",
"green" : "0.000",
"red" : "0.000"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "1.000",
"green" : "1.000",
"red" : "1.000"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,116 @@
{
"images" : [
{
"filename" : "icon-20@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon-20@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "icon-29@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon-29@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "icon-40@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "icon-40@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "Icon-60@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "Icon-60@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "icon-20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "icon-40.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon-29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "icon-29@2x-1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon-41.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "icon-40@2x-1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "Icon-76@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "Icon-83.5.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "icon1@1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "logo.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "冬瓜.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "南瓜.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "土豆.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "柿子椒.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "紫甘蓝.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "胡萝卜.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "茄子.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "萝卜.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "西红柿.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "西蓝花.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "黄瓜.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x00",
"green" : "0xBB",
"red" : "0x7C"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x00",
"green" : "0xBB",
"red" : "0x7C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x4C",
"green" : "0xFF",
"red" : "0xD5"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x4C",
"green" : "0xFF",
"red" : "0xD5"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x00",
"green" : "0xA8",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0.000",
"green" : "0.659",
"red" : "1.000"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x42",
"green" : "0xF2",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x42",
"green" : "0xF2",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x77",
"red" : "0xDA"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x77",
"red" : "0xDA"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x5D",
"green" : "0xC1",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0.365",
"green" : "0.757",
"red" : "1.000"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x40",
"green" : "0x00",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x40",
"green" : "0x00",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x93",
"green" : "0x80",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x93",
"green" : "0x80",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xA8",
"green" : "0x00",
"red" : "0xD6"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xA8",
"green" : "0x00",
"red" : "0xD6"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x9A",
"green" : "0x86",
"red" : "0xFD"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x9A",
"green" : "0x86",
"red" : "0xFD"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x29",
"green" : "0x82",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x29",
"green" : "0x82",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x80",
"green" : "0xBD",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x80",
"green" : "0xBD",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x92",
"green" : "0x29",
"red" : "0x8C"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x92",
"green" : "0x29",
"red" : "0x8C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xA4",
"green" : "0x6E",
"red" : "0xA1"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xA4",
"green" : "0x6E",
"red" : "0xA1"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x3F",
"green" : "0x18",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0.247",
"green" : "0.094",
"red" : "1.000"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x93",
"green" : "0x7A",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x93",
"green" : "0x7A",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x59",
"green" : "0x00",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x59",
"green" : "0x00",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x9B",
"green" : "0x80",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x9B",
"green" : "0x80",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x34",
"green" : "0x98",
"red" : "0x3B"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x34",
"green" : "0x98",
"red" : "0x3B"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x76",
"green" : "0xF4",
"red" : "0x84"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x76",
"green" : "0xF4",
"red" : "0x84"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x43",
"green" : "0x94",
"red" : "0x00"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x43",
"green" : "0x94",
"red" : "0x00"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x67",
"green" : "0xEF",
"red" : "0x6B"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x67",
"green" : "0xEF",
"red" : "0x6B"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,24 @@
//
// VegetableData.swift
// Vegetables
//
// Created by on 2020/12/22.
//
import Foundation
import SwiftUI
// MARK: - Vegetables Data
let vegetablesData: [Vegetable] = [
Vegetable(title: "茄子", headline: "果可供蔬食。根、茎、叶入药,为收敛剂,有利尿之效,叶也可以作麻醉剂。种子为消肿药,也用为刺激剂,但容易引起胃弱及便秘,果生食可解食菌中毒。", image: "茄子", gradientColors: [Color("Color-茄子-Light"), Color("Color-茄子-Dark")], description: "学名Solanum melongena L.茄科茄属植物。茄直立分枝草本至亚灌木高可达1米小枝叶柄及花梗均被6-8-10分枝平贴或具短柄的星状绒毛小枝多为紫色野生的往往有皮刺渐老则毛被逐渐脱落。叶大卵形至长圆状卵形叶柄长约2-4.5厘米野生的具皮刺。能孕花单生花柄长约1-1.8厘米,毛被较密。果的形状大小变异极大。果的形状有长或圆,颜色有白、红、紫等。", classification: ["被子植物门","双子叶植物纲","合瓣花亚纲","管状花目","茄科","茄族","茄属","","原产亚洲热带,中国各省均有栽培"]),
Vegetable(title: "冬瓜", headline: "冬瓜果实除作蔬菜外,也可浸渍为各种糖果;果皮和种子药用,有消炎、利尿、消肿的功效", image: "冬瓜", gradientColors: [Color("Color-冬瓜-Light"), Color("Color-冬瓜-Dark")], description: "冬瓜学名Benincasa hispida (Thunb.) Cogn.),葫芦科冬瓜属一年生蔓生或架生草本植物,茎被黄褐色硬毛及长柔毛,有棱沟,叶柄粗壮,被粗硬毛和长柔毛,雌雄同株,花单生,果实长圆柱状或近球状,大型,有硬毛和白霜,种子卵形。", classification: ["被子植物门","双子叶植物纲","五桠果亚纲","堇菜目","葫芦科","冬瓜族","冬瓜属","冬瓜","亚洲其他热带、亚热带地区"]),
Vegetable(title: "胡萝卜", headline: "胡萝卜素是维生素A的主要来源而维生素A可以促进生长防止细菌感染以及具有保护表皮组织保护呼吸道、消化道、泌尿系统等上皮细胞组织的功能与作用", image: "胡萝卜", gradientColors: [Color("Color-胡萝卜-Light"), Color("Color-胡萝卜-Dark")], description: "胡萝卜学名Daucus carota var. sativa Hoffm.是伞形科、胡萝卜属野胡萝卜的变种一年生或二年生草本植物。根粗壮长圆锥形呈橙红色或黄色。茎直立高可达90厘米多分枝。叶片具长柄羽状复叶裂片线形或披针形先端尖锐叶柄基部扩大形成叶鞘。复伞形花序花序梗有糙硬毛总苞片多数呈叶状、结果期外缘的伞辐向内弯曲花通常白色有时带淡红色花柄不等长。果实圆锥形棱上有白色刺手。期4月开花。", classification: ["被子植物门","双子叶植物纲","原始花被亚纲","伞形目","伞形科","胡萝卜族","胡萝卜属","胡萝卜","原产亚洲西部,阿富汗,10世纪时经伊朗传入欧洲大陆15世纪英国已有栽培16世纪传入美国。12世纪经伊朗传入中国日本在16世纪从中国引入。"]),
Vegetable(title: "黄瓜", headline: "中国各地普遍栽培,且许多地区均有温室或塑料大棚栽培;现广泛种植于温带和热带地区。黄瓜为中国各地夏季主要菜蔬之一。茎藤药用,能消炎、祛痰、镇痉。", image: "黄瓜", gradientColors: [Color("Color-黄瓜-Light"), Color("Color-黄瓜-Dark")], description: "黄瓜学名Cucumis sativus L.)葫芦科一年生蔓生或攀援草本植物。茎、枝伸长,有棱沟,被白色的糙硬毛。卷须细。叶柄稍粗糙,有糙硬毛;叶片宽卵状心形,膜质,裂片三角形,有齿。雌雄同株。雄花:常数朵在叶腋簇生;花梗纤细,被微柔毛;花冠黄白色,花冠裂片长圆状披针形。雌花:单生或稀簇生;花梗粗壮,被柔毛;子房粗糙。果实长圆形或圆柱形,熟时黄绿色,表面粗糙。种子小,狭卵形,白色,无边缘,两端近急尖。花果期夏季。", classification: ["被子植物门","双子叶植物纲","合瓣花亚纲","葫芦目","葫芦科","","黄瓜属","黄瓜","世界各地"]),
Vegetable(title: "西蓝花", headline: "西蓝花,俗称青花菜。原产意大利,是常见蔬菜。通称绿花菜,也被称为西兰花。二年生草本植物,是甘蓝的一种变种。叶子大,主茎顶端形成肥大的花球,绿色或紫绿色,表面的小花蕾不密集在一起,侧枝的顶端各生小花球。", image: "西蓝花", gradientColors: [Color("Color-西蓝花-Light"), Color("Color-西蓝花-Dark")], description: "西兰花是一种营养价值非常高的蔬菜,几乎包含人体所需的各种营养元素,含有蛋白质、糖、脂肪、矿物质、维生素和胡萝卜素等,被誉为“蔬菜皇冠”。西兰花中矿物质成分比其他蔬菜更全面,钙、磷、铁、钾、锌、锰等含量很丰富,比同属于十字花科的白菜花高出很多。西兰花不仅味道鲜美,其药用价值近年来也被医学界所发现。研究表明,西兰花含硫萝卜素,可刺激身体产生抗癌蛋白酵素。经常食用,有助排除体内有害的自由基。西兰花含有丰富的抗坏血酸,能增强肝脏的解毒能力,提高肌体免疫力。西兰花被誉为“防癌新秀”,能有效对抗乳癌和大肠癌,健康的人经常食用西兰花也能起到预防癌症的作用。西兰花对高血压、心脏病有调节和预防的功用。西兰花是糖尿病患者的福音食品,富含的高纤维能有效降低肠胃对葡萄糖的吸收,进而降低血糖,有效控制糖尿病的病情。常吃西兰花还可以抗衰老,防止皮肤干燥,是一种很好的美容佳品;医学界还认为西兰花对大脑、视力都有很好的作用,是营养丰富的综合保健蔬菜。", classification: ["被子植物门","双子叶植物纲","五桠果亚纲","白花菜目","十字花科","","芸苔属","西蓝花","意大利"]),
Vegetable(title: "萝卜", headline: "萝卜根作蔬菜食用;种子、鲜根、枯根、叶皆入药,种子消食化痰,鲜根止渴、助消化,枯根利二便,叶治初痢,并预防痢疾,种子榨油工业用及食用。", image: "萝卜", gradientColors: [Color("Color-萝卜-Light"), Color("Color-萝卜-Dark")], description: "萝卜学名Raphanus sativus L. 十字花科萝卜属二年或一年生草本植物高20-100厘米直根肉质长圆形、球形或圆锥形外皮绿色、白色或红色茎有分枝无毛稍具粉霜。总状花序顶生及腋生花白色或粉红色果梗长1-1.5厘米花期4-5月果期5-6月。", classification: ["被子植物门","双子叶植物纲","原始花被亚纲","白花菜目","十字花科","芸苔族","萝卜属","萝卜","世界各地均有分布"]),
Vegetable(title: "南瓜", headline: "南瓜的果实作肴馔,亦可代粮食。全株各部又供药用,种子含南瓜子氨基酸,有清热除湿、驱虫的功效,对血吸虫有控制和杀灭的作用,藤有清热的作用,瓜蒂有安胎的功效,根治牙痛。", image: "南瓜", gradientColors: [Color("Color-南瓜-Light"), Color("Color-南瓜-Dark")], description: "南瓜学名Cucurbita moschata (Duch. ex Lam.) Duch. ex Poiret葫芦科南瓜属的一个种一年生蔓生草本植物茎常节部生根叶柄粗壮叶片宽卵形或卵圆形质稍柔软叶脉隆起卷须稍粗壮雌雄同株果梗粗壮有棱和槽因品种而异外面常有数条纵沟或无种子多数长卵形或长圆形。", classification: ["被子植物门","双子叶植物纲","五桠果亚纲","堇菜目","葫芦科","南瓜族","南瓜属","南瓜","世界各地普遍栽培"]),
Vegetable(title: "柿子椒", headline: "甜椒由原产地南美洲热带地区的辣椒经长期驯化栽培及人工选择,使其果实体积增大,果肉变厚,子房腔数增多,辣味消失。彩椒是育种学家利用常规杂交育种技术培育出的品种,由于果皮中的叶绿素、花青素、类胡萝卜素和类黄酮的不同比例产生不同的颜色。", image: "柿子椒", gradientColors: [Color("Color-柿子椒-Light"), Color("Color-柿子椒-Dark")], description: "彩椒中含丰富的维生素A、维生素 B、维生素C、β胡萝卜素、糖类、纤维质、钙、磷、铁等元素维生素含量比黄瓜、番茄、茄子高4-7倍是蔬菜中维生素A和维生素C含量最高的。尤其是在成熟期果实中的营养成分除维生素C含量未增加外其它营养成分均会增加5倍因此有成熟果甜椒的营养价值更高于青果甜椒之说。", classification: ["被子植物门","双子叶植物纲","合瓣花亚纲","管状花目","茄科","茄族","辣椒属","辣椒","原产墨西哥到哥伦比亚;现普遍栽培"]),
Vegetable(title: "马铃薯", headline: "“马铃薯”因酷似马铃铛而得名,此称呼最早见于康熙年间的《松溪县志食货》。中国东北、河北称土豆,华北称山药蛋,西北和两湖地区称洋芋,江浙一带称洋番芋或洋山芋,广东称之为薯仔,粤东一带称荷兰薯,闽东地区则称之为番仔薯,在鄂西北一带被称为“土豆”。", image: "土豆", gradientColors: [Color("Color-土豆-Light"), Color("Color-土豆-Dark")], description: "马铃薯学名Solanum tuberosum L.属茄科一年生草本植物块茎可供食用是全球第四大重要的粮食作物仅次于小麦、稻谷和玉米。马铃薯又名山药蛋、洋芋、洋山芋、洋芋头、香山芋、洋番芋、山洋芋、阳芋、地蛋、土豆等。马铃薯在不同国度名称称谓也不一样如美国称爱尔兰豆薯、俄罗斯称荷兰薯、法国称地苹果、德国称地梨、意大利称地豆、秘鲁称巴巴等。与小麦、稻谷、玉米、高粱并称为世界五大作物。马铃薯块茎含有大量的淀粉能为人体提供丰富的热量且富含蛋白质、氨基酸及多种维生素、矿物质尤其是其维生素含量是所有粮食作物中最全的在欧美国家特别是北美马铃薯早就成为第二主食。马铃薯原产于南美洲安第斯山区人工栽培历史最早可追溯到大约公元前8000年到5000年的秘鲁南部地区。马铃薯主要生产国有中国、俄罗斯、印度、乌克兰、美国等。中国是世界马铃薯总产最多的国家。", classification: ["被子植物门","双子叶植物纲","合瓣花亚纲","管状花目","茄科","茄族","茄属","马铃薯","亚洲、北美、非洲南部和澳大利亚"]),
Vegetable(title: "番茄", headline: "番茄原产南美洲,中国南北方广泛栽培。番茄的果实营养丰富,具特殊风味。可以生食、煮食、加工番茄酱、汁或整果罐藏。", image: "西红柿", gradientColors: [Color("Color-西红柿-Light"), Color("Color-西红柿-Dark")], description: "番茄学名Solanum lycopersicum即西红柿是管状花目、茄科、番茄属的一种一年生或多年生草本植物体高0.62米全体生粘质腺毛有强烈气味茎易倒伏叶羽状复叶或羽状深裂花序总梗长25厘米常37朵花花萼辐状花冠辐状浆果扁球状或近球状肉质而多汁液种子黄色花果期夏秋季。", classification: ["被子植物门","双子叶植物纲","合瓣花亚纲","管状花目","茄科","茄族","番茄属","番茄","原产南美洲,全世界广泛栽培"]),
Vegetable(title: "紫甘蓝", headline: "紫甘蓝产量高结球紧实价格较低易储藏和运输抗病虫能力强现作为一种可食用蔬菜在国内大范围种植是一种广受欢迎的鲜切蔬菜。紫甘蓝因其具有鲜艳的色泽色素含量高、营养价值高无毒、安全等特点。紫甘蓝被世界卫生组织WHO推荐为排名第三可食用最佳蔬菜。紫甘蓝属低热量高纤维食物具有丰富的叶酸肥胖者及孕妇均可食用。", image: "紫甘蓝", gradientColors: [Color("Color-紫甘蓝-Light"), Color("Color-紫甘蓝-Dark")], description: "紫甘蓝又称红甘蓝、赤甘蓝,俗称紫包菜,十字花科、芸苔属甘蓝种中的一个变种,是结球甘蓝中的一个类型。紫甘蓝叶片紫红,叶面有蜡粉,叶球近圆形。 紫甘蓝的营养成分包括碳水化合物蛋白质叶酸、抗坏血酸、维生素A、生育酚等维生素铜、铁、硒、钙、锰、锌等矿物质。", classification: ["被子植物门","双子叶植物纲","五桠果亚纲","白花菜目","十字花科","芸薹族","芸薹属","甘蓝","欧洲地中海沿岸"])
]

View File

@@ -0,0 +1,48 @@
<?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>
<true/>
</dict>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchScreen</key>
<dict/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,20 @@
//
// VegetableModel.swift
// Vegetables
//
// Created by on 2020/12/22.
//
import Foundation
import SwiftUI
// MARK: - Vegetables Data Model
struct Vegetable: Identifiable {
var id = UUID()
var title: String
var headline: String
var image: String
var gradientColors: [Color]
var description: String
var classification: [String]
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,32 @@
//
// SettingsLabelView.swift
// Vegetables
//
// Created by on 2020/12/28.
//
import SwiftUI
struct SettingsLabelView: View {
// MARK: - Properties
var labelText: String
var labelImage: String
// MARK: - Body
var body: some View {
HStack {
Text(labelText)
Spacer()
Image(systemName: labelImage)
}
}
}
// MARK: - Preview
struct SettingsLabelView_Previews: PreviewProvider {
static var previews: some View {
SettingsLabelView(labelText: "蔬菜百科", labelImage: "info.circle")
.previewLayout(.sizeThatFits)
.padding()
}
}

View File

@@ -0,0 +1,50 @@
//
// SettingsRowView.swift
// Vegetables
//
// Created by on 2020/12/28.
//
import SwiftUI
struct SettingsRowView: View {
// MARK: - Properties
var name: String
var content: String?
var linkLabel: String?
var linkDestination: String?
// MARK: - Body
var body: some View {
VStack {
Divider().padding(.vertical, 4)
HStack {
Text(name).foregroundColor(.gray)
Spacer()
if (content != nil) {
Text(content!)
}else if (linkLabel != nil && linkDestination != nil) {
Link(linkLabel!, destination: URL(string: "https://\(linkDestination!)")!)
Image(systemName: "arrow.up.right.square").foregroundColor(.pink)
}else {
EmptyView()
}
}
}
}
}
// MARK: - Preview
struct SettingsRowView_Previews: PreviewProvider {
static var previews: some View {
Group {
SettingsRowView(name: "开发人员", content: "liumingl / happy")
.previewLayout(.fixed(width: 375, height: 60))
.padding()
SettingsRowView(name: "网站", linkLabel: "百度", linkDestination: "www.baidu.com")
.preferredColorScheme(.dark)
.previewLayout(.fixed(width: 375, height: 60))
.padding()
}
}
}

View File

@@ -0,0 +1,30 @@
//
// SourceLinkView.swift
// Vegetables
//
// Created by on 2020/12/26.
//
import SwiftUI
struct SourceLinkView: View {
var body: some View {
GroupBox() {
HStack {
Text("内容来源")
Spacer()
Link("百度百科", destination: URL(string: "https://baike.baidu.com")!)
Image(systemName: "arrow.up.right.square")
}
.font(.footnote)
}
}
}
struct SourceLinkView_Previews: PreviewProvider {
static var previews: some View {
SourceLinkView()
.previewLayout(.sizeThatFits)
.padding()
}
}

View File

@@ -0,0 +1,41 @@
//
// StartButtonView.swift
// Vegetables
//
// Created by on 2020/12/20.
//
import SwiftUI
struct StartButtonView: View {
// MARK: - Properties
@AppStorage("isOnboarding") var isOnboarding: Bool?
// MARK: - Body
var body: some View {
Button(action: {
isOnboarding = false
}) {
HStack(spacing: 8) {
Text("开始")
Image(systemName: "arrow.right.circle")
.imageScale(.large)
}
.padding(.horizontal, 16)
.padding(.vertical, 10)
.background(Capsule().strokeBorder(Color.white, lineWidth: 1.25))
}
.accentColor(.white)
}
}
// MARK: - Preview
struct StartButtonView_Previews: PreviewProvider {
static var previews: some View {
StartButtonView()
.preferredColorScheme(.dark)
.previewLayout(.sizeThatFits)
}
}

View File

@@ -0,0 +1,64 @@
//
// VegetableCardView.swift
// Vegetables
//
// Created by on 2020/12/19.
//
import SwiftUI
struct VegetableCardView: View {
// MARK: - Properties
var vegetable: Vegetable
@State private var isAnimating: Bool = false
// MARK: - Body
var body: some View {
ZStack {
VStack(spacing: 20) {
// Vegetable: Image
Image(vegetable.image)
.resizable()
.scaledToFit()
.shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.15), radius: 8, x: 6, y: 8)
.scaleEffect(isAnimating ? 1.0 : 0.6)
// Vegetable: Title
Text(vegetable.title)
.foregroundColor(.white)
.font(.largeTitle)
.fontWeight(.heavy)
.shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.15), radius: 2, x: 2, y: 2)
// Vegetable: Headline
Text(vegetable.headline)
.foregroundColor(.white)
.multilineTextAlignment(.leading)
.padding(.horizontal, 16)
.frame(maxWidth: 480)
// Button: Start
StartButtonView()
} //: VStack
} //: ZStack
.onAppear {
withAnimation(.easeOut(duration: 0.5)) {
isAnimating = true
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.background(LinearGradient(gradient: Gradient(colors: vegetable.gradientColors), startPoint: .top, endPoint: .bottom))
.cornerRadius(20)
.padding(.horizontal, 20)
}
}
// MARK: - Preview
struct VegetableCardView_Previews: PreviewProvider {
static var previews: some View {
VegetableCardView(vegetable: vegetablesData[1])
.previewLayout(.fixed(width: 320, height: 640))
}
}

View File

@@ -0,0 +1,49 @@
//
// VegetableClassificationView.swift
// Vegetables
//
// Created by on 2020/12/26.
//
import SwiftUI
struct VegetableClassificationView: View {
// MARK: - Properties
var vegetable: Vegetable
let classification: [String] = ["", "", "亚纲", "", "", "", "", "", "分布区域"]
// MARK: - Body
var body: some View {
GroupBox {
DisclosureGroup("蔬菜分类") {
ForEach(0..<classification.count, id: \.self) { item in
Divider().padding(.vertical, 2)
HStack {
HStack {
Image(systemName: "info.circle")
Text(classification[item])
}
.foregroundColor(vegetable.gradientColors[1])
.font(Font.system(.body).bold())
Spacer(minLength: 65)
Text(vegetable.classification[item])
.multilineTextAlignment(.trailing)
} //: HStack
} //: ForEach
} //: DisclosureGroup
} //: GroupBox
}
}
// MARK: - Preview
struct VegetableClassificationView_Previews: PreviewProvider {
static var previews: some View {
VegetableClassificationView(vegetable: vegetablesData[0])
.preferredColorScheme(.dark)
.previewLayout(.fixed(width: 375, height: 480))
.padding()
}
}

View File

@@ -0,0 +1,43 @@
//
// VegetableHeaderView.swift
// Vegetables
//
// Created by on 2020/12/26.
//
import SwiftUI
struct VegetableHeaderView: View {
// MARK: - Properties
var vegetable: Vegetable
@State private var isAnimatingImage: Bool = false
// MARK: - Body
var body: some View {
ZStack {
LinearGradient(gradient: Gradient(colors: vegetable.gradientColors), startPoint: .topLeading, endPoint: .bottomTrailing)
Image(vegetable.image)
.resizable()
.scaledToFit()
.shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.15), radius: 8, x: 6, y: 8 )
.padding(.vertical, 20)
.scaleEffect(isAnimatingImage ? 1.0 : 0.6)
}//: ZStack
.frame(height: 440)
.onAppear() {
withAnimation(.easeOut(duration: 0.5)) {
isAnimatingImage = true
}
}
}
}
// MARK: - Preview
struct VegetableHeaderView_Previews: PreviewProvider {
static var previews: some View {
VegetableHeaderView(vegetable: vegetablesData[0])
.previewLayout(.fixed(width: 375, height: 440))
}
}

View File

@@ -0,0 +1,47 @@
//
// VegetableRowView.swift
// Vegetables
//
// Created by on 2020/12/25.
//
import SwiftUI
struct VegetableRowView: View {
// MARK: - Properties
var vegetable: Vegetable
// MARK: - Body
var body: some View {
HStack {
Image(vegetable.image)
.renderingMode(.original)
.resizable()
.scaledToFit()
.frame(width: 80, height: 80, alignment: .center)
.shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.3), radius: 3, x: 2, y: 2 )
.background(LinearGradient(gradient: Gradient(colors: vegetable.gradientColors), startPoint: .top, endPoint: .bottom))
.cornerRadius(8)
VStack(alignment: .leading, spacing: 5) {
Text(vegetable.title)
.font(.title2)
.fontWeight(.bold)
Text(vegetable.headline)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
// MARK: - Preview
struct VegetableRowView_Previews: PreviewProvider {
static var previews: some View {
VegetableRowView(vegetable: vegetablesData[0])
.preferredColorScheme(.light)
.previewLayout(.sizeThatFits)
.padding()
}
}

View File

@@ -0,0 +1,116 @@
{
"images" : [
{
"filename" : "icon-20@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon-20@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "icon-29@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon-29@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "icon-40@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "icon-40@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "Icon-60@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "Icon-60@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "icon-20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "icon-40.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon-29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "icon-29@2x-1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon-41.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "icon-40@2x-1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "Icon-76@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "Icon-83.5.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "icon1@1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Some files were not shown because too many files have changed in this diff Show More