我的第三次提交
31
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/Sticker copy-Info.plist
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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>Sticker</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>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.message-payload-provider</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>StickerBrowserViewController</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
31
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/Stickers/Info.plist
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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>中国名胜古迹</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>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.message-payload-provider</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>StickerBrowserViewController</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"grid-size" : "small"
|
||||
},
|
||||
"stickers" : [
|
||||
{
|
||||
"filename" : "sticker-万里长城.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-桂林山水.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-北京故宫.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-杭州西湖.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-苏州园林.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-安徽黄山.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-长江三峡.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-日月潭.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-承德避暑山庄.sticker"
|
||||
},
|
||||
{
|
||||
"filename" : "sticker-兵马俑.sticker"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-万里长城.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 58 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-兵马俑.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-北京故宫.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-安徽黄山.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 51 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-承德避暑山庄.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-日月潭.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-杭州西湖.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 70 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-桂林山水.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-苏州园林.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"filename" : "sticker-长江三峡.png"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icon-29@2x.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29@3x.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-60x45@2x.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "60x45"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-60x45@3x.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "60x45"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29@2x-1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-67x50@2x.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "67x50"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-74x55@2x.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "74x55"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-1024x1024.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x1024"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-27x20@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "27x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-27x20@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "27x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-32x24@2x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "2x",
|
||||
"size" : "32x24"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-32x24@3x.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"scale" : "3x",
|
||||
"size" : "32x24"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-1024x768.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"platform" : "ios",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x768"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 488 KiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,680 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 52;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1F107E9025A9468B005C4354 /* PlaceListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F107E8F25A9468B005C4354 /* PlaceListItemView.swift */; };
|
||||
1F1BE49425B5C575004D63FC /* PlaceGridItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1BE49325B5C575004D63FC /* PlaceGridItemView.swift */; };
|
||||
1F25325325A6B6CE0097A3DC /* VideoListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25325225A6B6CE0097A3DC /* VideoListView.swift */; };
|
||||
1F25325625A6B6F90097A3DC /* MapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25325525A6B6F90097A3DC /* MapView.swift */; };
|
||||
1F25325925A6B70F0097A3DC /* GalleryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25325825A6B70F0097A3DC /* GalleryView.swift */; };
|
||||
1F25325C25A6B7D20097A3DC /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25325B25A6B7D20097A3DC /* MainView.swift */; };
|
||||
1F25326325A722300097A3DC /* CoverImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25326225A7222F0097A3DC /* CoverImageView.swift */; };
|
||||
1F25326825A73B900097A3DC /* CoverImageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25326725A73B900097A3DC /* CoverImageModel.swift */; };
|
||||
1F25326C25A74EC10097A3DC /* CodableBundleExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F25326B25A74EC10097A3DC /* CodableBundleExtension.swift */; };
|
||||
1F345D5025B86A5B0062F76F /* CopyrightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F345D4F25B86A5B0062F76F /* CopyrightView.swift */; };
|
||||
1F345D5725B8D1FC0062F76F /* CenterModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F345D5625B8D1FC0062F76F /* CenterModifier.swift */; };
|
||||
1F34F25525A9F3C30044A002 /* PlaceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F34F25425A9F3C30044A002 /* PlaceModel.swift */; };
|
||||
1F34F26225AA0C580044A002 /* places.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F34F26125AA0C580044A002 /* places.json */; };
|
||||
1F7455C025B025F000305CBE /* LocationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7455BF25B025F000305CBE /* LocationModel.swift */; };
|
||||
1F7455C325B06F4F00305CBE /* MapAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7455C225B06F4F00305CBE /* MapAnnotationView.swift */; };
|
||||
1F78115C25AD391400A253C3 /* VideoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F78115B25AD391400A253C3 /* VideoModel.swift */; };
|
||||
1F78115F25AD3A2900A253C3 /* VideoListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F78115E25AD3A2900A253C3 /* VideoListItemView.swift */; };
|
||||
1F9CD80A25ABA9DF007FFB92 /* InsetMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F9CD80925ABA9DF007FFB92 /* InsetMapView.swift */; };
|
||||
1F9CD80D25ACA4DB007FFB92 /* ExternalWebLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F9CD80C25ACA4DB007FFB92 /* ExternalWebLinkView.swift */; };
|
||||
1FA6CD8F25B7B3EB008EB791 /* Stickers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1FA6CD8E25B7B3EB008EB791 /* Stickers.xcassets */; };
|
||||
1FA6CD9325B7B3EB008EB791 /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1FA6CD8C25B7B3EA008EB791 /* Stickers.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
1FAB16B225B173EF004C4103 /* MotionAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB16B125B173EF004C4103 /* MotionAnimationView.swift */; };
|
||||
1FB9479425A5FF9000DCAA6C /* 日月潭.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478A25A5FF9000DCAA6C /* 日月潭.mov */; };
|
||||
1FB9479525A5FF9000DCAA6C /* 兵马俑.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478B25A5FF9000DCAA6C /* 兵马俑.mov */; };
|
||||
1FB9479625A5FF9000DCAA6C /* 苏州园林.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478C25A5FF9000DCAA6C /* 苏州园林.mov */; };
|
||||
1FB9479725A5FF9000DCAA6C /* 北京故宫.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478D25A5FF9000DCAA6C /* 北京故宫.mov */; };
|
||||
1FB9479825A5FF9000DCAA6C /* 万里长城.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478E25A5FF9000DCAA6C /* 万里长城.mov */; };
|
||||
1FB9479925A5FF9000DCAA6C /* 承德避暑山庄.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9478F25A5FF9000DCAA6C /* 承德避暑山庄.mov */; };
|
||||
1FB9479A25A5FF9000DCAA6C /* 安徽黄山.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9479025A5FF9000DCAA6C /* 安徽黄山.mov */; };
|
||||
1FB9479B25A5FF9000DCAA6C /* 桂林山水.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9479125A5FF9000DCAA6C /* 桂林山水.mov */; };
|
||||
1FB9479C25A5FF9000DCAA6C /* 杭州西湖.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9479225A5FF9000DCAA6C /* 杭州西湖.mov */; };
|
||||
1FB9479D25A5FF9000DCAA6C /* 长江三峡.mov in Resources */ = {isa = PBXBuildFile; fileRef = 1FB9479325A5FF9000DCAA6C /* 长江三峡.mov */; };
|
||||
1FB947A425A6038500DCAA6C /* covers.json in Resources */ = {isa = PBXBuildFile; fileRef = 1FB947A025A6038500DCAA6C /* covers.json */; };
|
||||
1FB947A525A6038500DCAA6C /* locations.json in Resources */ = {isa = PBXBuildFile; fileRef = 1FB947A125A6038500DCAA6C /* locations.json */; };
|
||||
1FB947A725A6038500DCAA6C /* videos.json in Resources */ = {isa = PBXBuildFile; fileRef = 1FB947A325A6038500DCAA6C /* videos.json */; };
|
||||
1FD908CE25AF22D900B49FDC /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD908CD25AF22D900B49FDC /* VideoPlayerView.swift */; };
|
||||
1FD908D225AF371700B49FDC /* VideoPlayerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD908D125AF371700B49FDC /* VideoPlayerHelper.swift */; };
|
||||
1FEBC2DA25AAE2970094E88E /* PlaceDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEBC2D925AAE2970094E88E /* PlaceDetailView.swift */; };
|
||||
1FEBC2DD25AB18760094E88E /* HeadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEBC2DC25AB18760094E88E /* HeadingView.swift */; };
|
||||
1FEBC2E025AB1E270094E88E /* InsetGalleryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEBC2DF25AB1E270094E88E /* InsetGalleryView.swift */; };
|
||||
1FEBC2E325AB30480094E88E /* InsetMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEBC2E225AB30480094E88E /* InsetMessageView.swift */; };
|
||||
1FF14DBD25A1F38C00A69167 /* ThePlacesOfInterestApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF14DBC25A1F38C00A69167 /* ThePlacesOfInterestApp.swift */; };
|
||||
1FF14DBF25A1F38C00A69167 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF14DBE25A1F38C00A69167 /* ContentView.swift */; };
|
||||
1FF14DC125A1F38D00A69167 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1FF14DC025A1F38D00A69167 /* Assets.xcassets */; };
|
||||
1FF14DC425A1F38D00A69167 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1FF14DC325A1F38D00A69167 /* Preview Assets.xcassets */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
1FA6CD9125B7B3EB008EB791 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1FF14DB125A1F38C00A69167 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 1FA6CD8B25B7B3EA008EB791;
|
||||
remoteInfo = Stickers;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
1FA417B125B7866C00E28C1A /* Embed App Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
1FA6CD9325B7B3EB008EB791 /* Stickers.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
1F107E8F25A9468B005C4354 /* PlaceListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceListItemView.swift; sourceTree = "<group>"; };
|
||||
1F1BE49325B5C575004D63FC /* PlaceGridItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceGridItemView.swift; sourceTree = "<group>"; };
|
||||
1F25325225A6B6CE0097A3DC /* VideoListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoListView.swift; sourceTree = "<group>"; };
|
||||
1F25325525A6B6F90097A3DC /* MapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapView.swift; sourceTree = "<group>"; };
|
||||
1F25325825A6B70F0097A3DC /* GalleryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryView.swift; sourceTree = "<group>"; };
|
||||
1F25325B25A6B7D20097A3DC /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = "<group>"; };
|
||||
1F25326225A7222F0097A3DC /* CoverImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoverImageView.swift; sourceTree = "<group>"; };
|
||||
1F25326725A73B900097A3DC /* CoverImageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoverImageModel.swift; sourceTree = "<group>"; };
|
||||
1F25326B25A74EC10097A3DC /* CodableBundleExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableBundleExtension.swift; sourceTree = "<group>"; };
|
||||
1F345D4F25B86A5B0062F76F /* CopyrightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyrightView.swift; sourceTree = "<group>"; };
|
||||
1F345D5625B8D1FC0062F76F /* CenterModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CenterModifier.swift; sourceTree = "<group>"; };
|
||||
1F345D6225B8DA070062F76F /* ThePlacesOfInterest.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ThePlacesOfInterest.entitlements; sourceTree = "<group>"; };
|
||||
1F34F25425A9F3C30044A002 /* PlaceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceModel.swift; sourceTree = "<group>"; };
|
||||
1F34F26125AA0C580044A002 /* places.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = places.json; sourceTree = "<group>"; };
|
||||
1F7455BF25B025F000305CBE /* LocationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationModel.swift; sourceTree = "<group>"; };
|
||||
1F7455C225B06F4F00305CBE /* MapAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapAnnotationView.swift; sourceTree = "<group>"; };
|
||||
1F78115B25AD391400A253C3 /* VideoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoModel.swift; sourceTree = "<group>"; };
|
||||
1F78115E25AD3A2900A253C3 /* VideoListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoListItemView.swift; sourceTree = "<group>"; };
|
||||
1F9CD80925ABA9DF007FFB92 /* InsetMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsetMapView.swift; sourceTree = "<group>"; };
|
||||
1F9CD80C25ACA4DB007FFB92 /* ExternalWebLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalWebLinkView.swift; sourceTree = "<group>"; };
|
||||
1FA417BE25B786F400E28C1A /* Sticker copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Sticker copy-Info.plist"; path = "/Users/liumingl/Library/Mobile Documents/com~apple~CloudDocs/SwiftUI开发实战手册/第四章 中国名胜古迹/源代码/ThePlacesOfInterest/Sticker copy-Info.plist"; sourceTree = "<absolute>"; };
|
||||
1FA6CD8C25B7B3EA008EB791 /* Stickers.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Stickers.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1FA6CD8E25B7B3EB008EB791 /* Stickers.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Stickers.xcassets; sourceTree = "<group>"; };
|
||||
1FA6CD9025B7B3EB008EB791 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
1FAB16B125B173EF004C4103 /* MotionAnimationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionAnimationView.swift; sourceTree = "<group>"; };
|
||||
1FB9478A25A5FF9000DCAA6C /* 日月潭.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "日月潭.mov"; sourceTree = "<group>"; };
|
||||
1FB9478B25A5FF9000DCAA6C /* 兵马俑.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "兵马俑.mov"; sourceTree = "<group>"; };
|
||||
1FB9478C25A5FF9000DCAA6C /* 苏州园林.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "苏州园林.mov"; sourceTree = "<group>"; };
|
||||
1FB9478D25A5FF9000DCAA6C /* 北京故宫.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "北京故宫.mov"; sourceTree = "<group>"; };
|
||||
1FB9478E25A5FF9000DCAA6C /* 万里长城.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "万里长城.mov"; sourceTree = "<group>"; };
|
||||
1FB9478F25A5FF9000DCAA6C /* 承德避暑山庄.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "承德避暑山庄.mov"; sourceTree = "<group>"; };
|
||||
1FB9479025A5FF9000DCAA6C /* 安徽黄山.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "安徽黄山.mov"; sourceTree = "<group>"; };
|
||||
1FB9479125A5FF9000DCAA6C /* 桂林山水.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "桂林山水.mov"; sourceTree = "<group>"; };
|
||||
1FB9479225A5FF9000DCAA6C /* 杭州西湖.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "杭州西湖.mov"; sourceTree = "<group>"; };
|
||||
1FB9479325A5FF9000DCAA6C /* 长江三峡.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = "长江三峡.mov"; sourceTree = "<group>"; };
|
||||
1FB947A025A6038500DCAA6C /* covers.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = covers.json; sourceTree = "<group>"; };
|
||||
1FB947A125A6038500DCAA6C /* locations.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = locations.json; sourceTree = "<group>"; };
|
||||
1FB947A325A6038500DCAA6C /* videos.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = videos.json; sourceTree = "<group>"; };
|
||||
1FD908CD25AF22D900B49FDC /* VideoPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = "<group>"; };
|
||||
1FD908D125AF371700B49FDC /* VideoPlayerHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerHelper.swift; sourceTree = "<group>"; };
|
||||
1FEBC2D925AAE2970094E88E /* PlaceDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceDetailView.swift; sourceTree = "<group>"; };
|
||||
1FEBC2DC25AB18760094E88E /* HeadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadingView.swift; sourceTree = "<group>"; };
|
||||
1FEBC2DF25AB1E270094E88E /* InsetGalleryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsetGalleryView.swift; sourceTree = "<group>"; };
|
||||
1FEBC2E225AB30480094E88E /* InsetMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsetMessageView.swift; sourceTree = "<group>"; };
|
||||
1FF14DB925A1F38C00A69167 /* ThePlacesOfInterest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ThePlacesOfInterest.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1FF14DBC25A1F38C00A69167 /* ThePlacesOfInterestApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThePlacesOfInterestApp.swift; sourceTree = "<group>"; };
|
||||
1FF14DBE25A1F38C00A69167 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||
1FF14DC025A1F38D00A69167 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
1FF14DC325A1F38D00A69167 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
||||
1FF14DC525A1F38D00A69167 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
1FF14DB625A1F38C00A69167 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
1F25325025A6B2360097A3DC /* App */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FF14DBC25A1F38C00A69167 /* ThePlacesOfInterestApp.swift */,
|
||||
1FF14DBE25A1F38C00A69167 /* ContentView.swift */,
|
||||
1F25325225A6B6CE0097A3DC /* VideoListView.swift */,
|
||||
1F25325525A6B6F90097A3DC /* MapView.swift */,
|
||||
1F25325825A6B70F0097A3DC /* GalleryView.swift */,
|
||||
1F25325B25A6B7D20097A3DC /* MainView.swift */,
|
||||
);
|
||||
path = App;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1F25326125A722240097A3DC /* View */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F25326225A7222F0097A3DC /* CoverImageView.swift */,
|
||||
1F107E8F25A9468B005C4354 /* PlaceListItemView.swift */,
|
||||
1FEBC2D925AAE2970094E88E /* PlaceDetailView.swift */,
|
||||
1FEBC2DC25AB18760094E88E /* HeadingView.swift */,
|
||||
1FEBC2DF25AB1E270094E88E /* InsetGalleryView.swift */,
|
||||
1FEBC2E225AB30480094E88E /* InsetMessageView.swift */,
|
||||
1F9CD80925ABA9DF007FFB92 /* InsetMapView.swift */,
|
||||
1F9CD80C25ACA4DB007FFB92 /* ExternalWebLinkView.swift */,
|
||||
1F78115E25AD3A2900A253C3 /* VideoListItemView.swift */,
|
||||
1FD908CD25AF22D900B49FDC /* VideoPlayerView.swift */,
|
||||
1F7455C225B06F4F00305CBE /* MapAnnotationView.swift */,
|
||||
1FAB16B125B173EF004C4103 /* MotionAnimationView.swift */,
|
||||
1F1BE49325B5C575004D63FC /* PlaceGridItemView.swift */,
|
||||
1F345D4F25B86A5B0062F76F /* CopyrightView.swift */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1F25326625A73B810097A3DC /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F25326725A73B900097A3DC /* CoverImageModel.swift */,
|
||||
1F34F25425A9F3C30044A002 /* PlaceModel.swift */,
|
||||
1F78115B25AD391400A253C3 /* VideoModel.swift */,
|
||||
1F7455BF25B025F000305CBE /* LocationModel.swift */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1F25326A25A74EB00097A3DC /* Extension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F25326B25A74EC10097A3DC /* CodableBundleExtension.swift */,
|
||||
);
|
||||
path = Extension;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1F345D5525B8D1CE0062F76F /* Modifier */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F345D5625B8D1FC0062F76F /* CenterModifier.swift */,
|
||||
);
|
||||
path = Modifier;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FA6CD8D25B7B3EA008EB791 /* Stickers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FA6CD8E25B7B3EB008EB791 /* Stickers.xcassets */,
|
||||
1FA6CD9025B7B3EB008EB791 /* Info.plist */,
|
||||
);
|
||||
path = Stickers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FB9478925A5F8EB00DCAA6C /* Video */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FB9479025A5FF9000DCAA6C /* 安徽黄山.mov */,
|
||||
1FB9478D25A5FF9000DCAA6C /* 北京故宫.mov */,
|
||||
1FB9478B25A5FF9000DCAA6C /* 兵马俑.mov */,
|
||||
1FB9478F25A5FF9000DCAA6C /* 承德避暑山庄.mov */,
|
||||
1FB9479125A5FF9000DCAA6C /* 桂林山水.mov */,
|
||||
1FB9479225A5FF9000DCAA6C /* 杭州西湖.mov */,
|
||||
1FB9478A25A5FF9000DCAA6C /* 日月潭.mov */,
|
||||
1FB9478C25A5FF9000DCAA6C /* 苏州园林.mov */,
|
||||
1FB9478E25A5FF9000DCAA6C /* 万里长城.mov */,
|
||||
1FB9479325A5FF9000DCAA6C /* 长江三峡.mov */,
|
||||
);
|
||||
path = Video;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FB9479F25A602DB00DCAA6C /* Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F34F26125AA0C580044A002 /* places.json */,
|
||||
1FB947A025A6038500DCAA6C /* covers.json */,
|
||||
1FB947A125A6038500DCAA6C /* locations.json */,
|
||||
1FB947A325A6038500DCAA6C /* videos.json */,
|
||||
);
|
||||
path = Data;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FD908D025AF36F400B49FDC /* Helper */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FD908D125AF371700B49FDC /* VideoPlayerHelper.swift */,
|
||||
);
|
||||
path = Helper;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FF14DB025A1F38C00A69167 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FF14DBB25A1F38C00A69167 /* ThePlacesOfInterest */,
|
||||
1FA6CD8D25B7B3EA008EB791 /* Stickers */,
|
||||
1FF14DBA25A1F38C00A69167 /* Products */,
|
||||
1FA417BE25B786F400E28C1A /* Sticker copy-Info.plist */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FF14DBA25A1F38C00A69167 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FF14DB925A1F38C00A69167 /* ThePlacesOfInterest.app */,
|
||||
1FA6CD8C25B7B3EA008EB791 /* Stickers.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FF14DBB25A1F38C00A69167 /* ThePlacesOfInterest */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F345D6225B8DA070062F76F /* ThePlacesOfInterest.entitlements */,
|
||||
1F345D5525B8D1CE0062F76F /* Modifier */,
|
||||
1FD908D025AF36F400B49FDC /* Helper */,
|
||||
1F25326A25A74EB00097A3DC /* Extension */,
|
||||
1F25326625A73B810097A3DC /* Model */,
|
||||
1F25326125A722240097A3DC /* View */,
|
||||
1FB9479F25A602DB00DCAA6C /* Data */,
|
||||
1FB9478925A5F8EB00DCAA6C /* Video */,
|
||||
1F25325025A6B2360097A3DC /* App */,
|
||||
1FF14DC025A1F38D00A69167 /* Assets.xcassets */,
|
||||
1FF14DC525A1F38D00A69167 /* Info.plist */,
|
||||
1FF14DC225A1F38D00A69167 /* Preview Content */,
|
||||
);
|
||||
path = ThePlacesOfInterest;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1FF14DC225A1F38D00A69167 /* Preview Content */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1FF14DC325A1F38D00A69167 /* Preview Assets.xcassets */,
|
||||
);
|
||||
path = "Preview Content";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
1FA6CD8B25B7B3EA008EB791 /* Stickers */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1FA6CD9425B7B3EB008EB791 /* Build configuration list for PBXNativeTarget "Stickers" */;
|
||||
buildPhases = (
|
||||
1FA6CD8A25B7B3EA008EB791 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Stickers;
|
||||
productName = Stickers;
|
||||
productReference = 1FA6CD8C25B7B3EA008EB791 /* Stickers.appex */;
|
||||
productType = "com.apple.product-type.app-extension.messages-sticker-pack";
|
||||
};
|
||||
1FF14DB825A1F38C00A69167 /* ThePlacesOfInterest */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1FF14DC825A1F38D00A69167 /* Build configuration list for PBXNativeTarget "ThePlacesOfInterest" */;
|
||||
buildPhases = (
|
||||
1FF14DB525A1F38C00A69167 /* Sources */,
|
||||
1FF14DB625A1F38C00A69167 /* Frameworks */,
|
||||
1FF14DB725A1F38C00A69167 /* Resources */,
|
||||
1FA417B125B7866C00E28C1A /* Embed App Extensions */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
1FA6CD9225B7B3EB008EB791 /* PBXTargetDependency */,
|
||||
);
|
||||
name = ThePlacesOfInterest;
|
||||
productName = ThePlacesOfInterest;
|
||||
productReference = 1FF14DB925A1F38C00A69167 /* ThePlacesOfInterest.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
1FF14DB125A1F38C00A69167 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1230;
|
||||
LastUpgradeCheck = 1250;
|
||||
TargetAttributes = {
|
||||
1FA6CD8B25B7B3EA008EB791 = {
|
||||
CreatedOnToolsVersion = 12.3;
|
||||
};
|
||||
1FF14DB825A1F38C00A69167 = {
|
||||
CreatedOnToolsVersion = 12.3;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 1FF14DB425A1F38C00A69167 /* Build configuration list for PBXProject "ThePlacesOfInterest" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 1FF14DB025A1F38C00A69167;
|
||||
productRefGroup = 1FF14DBA25A1F38C00A69167 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
1FF14DB825A1F38C00A69167 /* ThePlacesOfInterest */,
|
||||
1FA6CD8B25B7B3EA008EB791 /* Stickers */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
1FA6CD8A25B7B3EA008EB791 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1FA6CD8F25B7B3EB008EB791 /* Stickers.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
1FF14DB725A1F38C00A69167 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1FB947A525A6038500DCAA6C /* locations.json in Resources */,
|
||||
1FB947A425A6038500DCAA6C /* covers.json in Resources */,
|
||||
1FB9479C25A5FF9000DCAA6C /* 杭州西湖.mov in Resources */,
|
||||
1FB9479825A5FF9000DCAA6C /* 万里长城.mov in Resources */,
|
||||
1FB9479A25A5FF9000DCAA6C /* 安徽黄山.mov in Resources */,
|
||||
1FB9479625A5FF9000DCAA6C /* 苏州园林.mov in Resources */,
|
||||
1FB9479425A5FF9000DCAA6C /* 日月潭.mov in Resources */,
|
||||
1FB9479B25A5FF9000DCAA6C /* 桂林山水.mov in Resources */,
|
||||
1FB9479525A5FF9000DCAA6C /* 兵马俑.mov in Resources */,
|
||||
1FB9479725A5FF9000DCAA6C /* 北京故宫.mov in Resources */,
|
||||
1FB9479D25A5FF9000DCAA6C /* 长江三峡.mov in Resources */,
|
||||
1F34F26225AA0C580044A002 /* places.json in Resources */,
|
||||
1FB9479925A5FF9000DCAA6C /* 承德避暑山庄.mov in Resources */,
|
||||
1FB947A725A6038500DCAA6C /* videos.json in Resources */,
|
||||
1FF14DC425A1F38D00A69167 /* Preview Assets.xcassets in Resources */,
|
||||
1FF14DC125A1F38D00A69167 /* Assets.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
1FF14DB525A1F38C00A69167 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1F78115F25AD3A2900A253C3 /* VideoListItemView.swift in Sources */,
|
||||
1FF14DBF25A1F38C00A69167 /* ContentView.swift in Sources */,
|
||||
1F25325C25A6B7D20097A3DC /* MainView.swift in Sources */,
|
||||
1F25326325A722300097A3DC /* CoverImageView.swift in Sources */,
|
||||
1F107E9025A9468B005C4354 /* PlaceListItemView.swift in Sources */,
|
||||
1F25326825A73B900097A3DC /* CoverImageModel.swift in Sources */,
|
||||
1F25325625A6B6F90097A3DC /* MapView.swift in Sources */,
|
||||
1FF14DBD25A1F38C00A69167 /* ThePlacesOfInterestApp.swift in Sources */,
|
||||
1FEBC2DA25AAE2970094E88E /* PlaceDetailView.swift in Sources */,
|
||||
1F34F25525A9F3C30044A002 /* PlaceModel.swift in Sources */,
|
||||
1F345D5025B86A5B0062F76F /* CopyrightView.swift in Sources */,
|
||||
1FD908D225AF371700B49FDC /* VideoPlayerHelper.swift in Sources */,
|
||||
1F9CD80A25ABA9DF007FFB92 /* InsetMapView.swift in Sources */,
|
||||
1FEBC2E325AB30480094E88E /* InsetMessageView.swift in Sources */,
|
||||
1F7455C325B06F4F00305CBE /* MapAnnotationView.swift in Sources */,
|
||||
1F9CD80D25ACA4DB007FFB92 /* ExternalWebLinkView.swift in Sources */,
|
||||
1F25325325A6B6CE0097A3DC /* VideoListView.swift in Sources */,
|
||||
1F78115C25AD391400A253C3 /* VideoModel.swift in Sources */,
|
||||
1F7455C025B025F000305CBE /* LocationModel.swift in Sources */,
|
||||
1F25325925A6B70F0097A3DC /* GalleryView.swift in Sources */,
|
||||
1FEBC2E025AB1E270094E88E /* InsetGalleryView.swift in Sources */,
|
||||
1F25326C25A74EC10097A3DC /* CodableBundleExtension.swift in Sources */,
|
||||
1F1BE49425B5C575004D63FC /* PlaceGridItemView.swift in Sources */,
|
||||
1FAB16B225B173EF004C4103 /* MotionAnimationView.swift in Sources */,
|
||||
1F345D5725B8D1FC0062F76F /* CenterModifier.swift in Sources */,
|
||||
1FEBC2DD25AB18760094E88E /* HeadingView.swift in Sources */,
|
||||
1FD908CE25AF22D900B49FDC /* VideoPlayerView.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
1FA6CD9225B7B3EB008EB791 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
platformFilter = ios;
|
||||
target = 1FA6CD8B25B7B3EA008EB791 /* Stickers */;
|
||||
targetProxy = 1FA6CD9125B7B3EB008EB791 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1FA6CD9525B7B3EB008EB791 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = Z3W45GNWDZ;
|
||||
INFOPLIST_FILE = Stickers/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.ThePlacesOfInterest.Stickers;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1FA6CD9625B7B3EB008EB791 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = Z3W45GNWDZ;
|
||||
INFOPLIST_FILE = Stickers/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.ThePlacesOfInterest.Stickers;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
1FF14DC625A1F38D00A69167 /* 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;
|
||||
};
|
||||
1FF14DC725A1F38D00A69167 /* 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;
|
||||
};
|
||||
1FF14DC925A1F38D00A69167 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = ThePlacesOfInterest/ThePlacesOfInterest.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"ThePlacesOfInterest/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = Z3W45GNWDZ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = ThePlacesOfInterest/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.ThePlacesOfInterest;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1FF14DCA25A1F38D00A69167 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = ThePlacesOfInterest/ThePlacesOfInterest.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"ThePlacesOfInterest/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = Z3W45GNWDZ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = ThePlacesOfInterest/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = cn.liuming.ThePlacesOfInterest;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1FA6CD9425B7B3EB008EB791 /* Build configuration list for PBXNativeTarget "Stickers" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1FA6CD9525B7B3EB008EB791 /* Debug */,
|
||||
1FA6CD9625B7B3EB008EB791 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
1FF14DB425A1F38C00A69167 /* Build configuration list for PBXProject "ThePlacesOfInterest" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1FF14DC625A1F38D00A69167 /* Debug */,
|
||||
1FF14DC725A1F38D00A69167 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
1FF14DC825A1F38D00A69167 /* Build configuration list for PBXNativeTarget "ThePlacesOfInterest" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1FF14DC925A1F38D00A69167 /* Debug */,
|
||||
1FF14DCA25A1F38D00A69167 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 1FF14DB125A1F38C00A69167 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?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>Stickers.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>ThePlacesOfInterest.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Bucket
|
||||
uuid = "940A90BB-50CD-46CE-8DBB-79489C2329A8"
|
||||
type = "1"
|
||||
version = "2.0">
|
||||
</Bucket>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?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>Sticker copy.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>Sticker.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Stickers.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>ThePlacesOfInterest.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,110 @@
|
||||
//
|
||||
// ContentView.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/3.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
//MARK: - Properties
|
||||
let places: [Place] = Bundle.main.decode("places.json")
|
||||
let haptics = UIImpactFeedbackGenerator(style: .medium)
|
||||
|
||||
@State private var gridLayout: [GridItem] = [GridItem(.flexible())]
|
||||
@State private var gridColumn = 1
|
||||
@State private var toolbarIcon = "square.grid.2x2"
|
||||
|
||||
@State private var isGridViewActive: Bool = false
|
||||
|
||||
// MARK: - Function
|
||||
func gridSwitch() {
|
||||
gridLayout = Array(repeating: GridItem(.flexible()), count: gridLayout.count % 3 + 1)
|
||||
gridColumn = gridLayout.count
|
||||
|
||||
// 按钮外观变换
|
||||
switch gridColumn {
|
||||
case 1:
|
||||
toolbarIcon = "square.grid.2x2"
|
||||
case 2:
|
||||
toolbarIcon = "square.grid.3x2"
|
||||
case 3:
|
||||
toolbarIcon = "rectangle.grid.1x2"
|
||||
default:
|
||||
toolbarIcon = "square.grid.2x2"
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - Body
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Group {
|
||||
if !isGridViewActive {
|
||||
List {
|
||||
CoverImageView()
|
||||
.frame(height: 300)
|
||||
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
|
||||
ForEach(places) { place in
|
||||
NavigationLink(destination: PlaceDetailView(place: place)) {
|
||||
PlaceListItemView(place: place)
|
||||
} //: Link
|
||||
} //: Loop
|
||||
CopyrightView()
|
||||
.modifier(CenterModifier())
|
||||
} //: List
|
||||
} else {
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
LazyVGrid(columns: gridLayout, alignment: .center, spacing: 10) {
|
||||
ForEach(places) { item in
|
||||
NavigationLink(
|
||||
destination: PlaceDetailView(place: item)) {
|
||||
PlaceGridItemView(place: item)
|
||||
} //: Link
|
||||
} //: Loop
|
||||
} //: LazyVGrid
|
||||
.padding(10)
|
||||
.animation(.easeIn)
|
||||
} //: ScrollView
|
||||
} //: Endif
|
||||
} //: Group
|
||||
.navigationBarTitle("名胜古迹", displayMode: .large)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
HStack(spacing: 16) {
|
||||
// 列表视图模式
|
||||
Button(action: {
|
||||
print("列表视图被激活")
|
||||
isGridViewActive = false
|
||||
haptics.impactOccurred()
|
||||
}){
|
||||
Image(systemName: "square.fill.text.grid.1x2")
|
||||
.font(.title2)
|
||||
.foregroundColor(isGridViewActive ? .primary : .accentColor)
|
||||
} //: List Button
|
||||
|
||||
// 网格视图模式
|
||||
Button(action: {
|
||||
print("网格视图被激活")
|
||||
isGridViewActive = true
|
||||
haptics.impactOccurred()
|
||||
gridSwitch()
|
||||
}){
|
||||
Image(systemName: toolbarIcon)
|
||||
.font(.title2)
|
||||
.foregroundColor(isGridViewActive ? .accentColor : .primary)
|
||||
} //: Grid Button
|
||||
} //: HStack
|
||||
} //: ToolBarItem
|
||||
} //: Toolbar
|
||||
} //: NavigationView
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - Preview
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// GalleryView.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/7.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GalleryView: View {
|
||||
// MARK: - Properties
|
||||
let places: [Place] = Bundle.main.decode("places.json")
|
||||
let haptics = UIImpactFeedbackGenerator(style: .medium)
|
||||
|
||||
@State private var selectedPlace: String = "万里长城"
|
||||
|
||||
// MARK: - 简单的网格定义
|
||||
// let gridLayout: [GridItem] = [
|
||||
// GridItem(.flexible()),
|
||||
// GridItem(.flexible()),
|
||||
// GridItem(.flexible())
|
||||
// ]
|
||||
// 利用数组方法定义网格元素
|
||||
// let gridLayout: [GridItem] = Array(repeating: GridItem(.flexible()), count: 3)
|
||||
@State private var gridLayout: [GridItem] = [GridItem(.flexible())]
|
||||
@State private var gridColumn: Double = 3.0
|
||||
|
||||
func gridSwitch() {
|
||||
gridLayout = Array(repeating: .init(.flexible()), count: Int(gridColumn))
|
||||
}
|
||||
|
||||
// MARK: - Body
|
||||
var body: some View {
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
VStack(alignment: .center, spacing: 30) {
|
||||
// MARK: - Image
|
||||
Image(selectedPlace)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.clipShape(Circle())
|
||||
.overlay(
|
||||
Circle().stroke(Color.white, lineWidth: 8)
|
||||
)
|
||||
|
||||
// MARK: - Slider
|
||||
Slider(value: $gridColumn, in: 2...4, step: 1)
|
||||
.padding(.horizontal)
|
||||
.onChange(of: gridColumn){ value in
|
||||
gridSwitch()
|
||||
}
|
||||
|
||||
// MARK: - 网格视图
|
||||
LazyVGrid(columns: gridLayout, alignment: .center, spacing: 10) {
|
||||
ForEach(places) { item in
|
||||
Image(item.image)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.clipShape(Circle())
|
||||
.overlay(Circle().stroke(Color.white, lineWidth: 1))
|
||||
.onTapGesture {
|
||||
selectedPlace = item.image
|
||||
haptics.impactOccurred()
|
||||
}
|
||||
} //: Loop
|
||||
} //: Grid
|
||||
.onAppear{
|
||||
gridSwitch()
|
||||
}
|
||||
.animation(.easeIn)
|
||||
} //: VStack
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.vertical, 50)
|
||||
} //: Scroll
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.background(MotionAnimationView())
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Preview
|
||||
struct GalleryView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GalleryView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
//
|
||||
// MainView.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/7.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct MainView: View {
|
||||
var body: some View {
|
||||
TabView {
|
||||
ContentView()
|
||||
.tabItem {
|
||||
Image(systemName: "square.grid.2x2")
|
||||
Text("浏览")
|
||||
}
|
||||
|
||||
VideoListView()
|
||||
.tabItem {
|
||||
Image(systemName: "play.rectangle")
|
||||
Text("视频")
|
||||
}
|
||||
|
||||
MapView()
|
||||
.tabItem {
|
||||
Image(systemName: "map")
|
||||
Text("位置")
|
||||
}
|
||||
|
||||
GalleryView()
|
||||
.tabItem {
|
||||
Image(systemName: "photo")
|
||||
Text("照片")
|
||||
}
|
||||
} //: Tab
|
||||
}
|
||||
}
|
||||
|
||||
struct MainView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MainView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// MapView.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/7.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import MapKit
|
||||
|
||||
struct MapView: View {
|
||||
//MARK: - Properties
|
||||
@State private var region: MKCoordinateRegion = {
|
||||
var mapCoordinates = CLLocationCoordinate2D(latitude: 30.555624612131368, longitude: 114.30381222526006)
|
||||
var mapZoomLevel = MKCoordinateSpan(latitudeDelta: 25.0, longitudeDelta: 25.0)
|
||||
var mapRegion = MKCoordinateRegion(center: mapCoordinates, span: mapZoomLevel)
|
||||
|
||||
return mapRegion
|
||||
}()
|
||||
|
||||
let locations: [PlaceLocation] = Bundle.main.decode("locations.json")
|
||||
|
||||
//MARK: - Body
|
||||
var body: some View {
|
||||
//MARK: - 1. 基本地图
|
||||
//Map(coordinateRegion: $region)
|
||||
|
||||
//MARK: - 2. 高级地图
|
||||
Map(coordinateRegion: $region, annotationItems: locations) { item in
|
||||
// 方案1. Pin:老旧的风格
|
||||
// MapPin(coordinate: item.location, tint: .accentColor)
|
||||
// 方案2. Marker:崭新的风格
|
||||
//MapMarker(coordinate: item.location, tint: .accentColor)
|
||||
|
||||
// 方案3. 自定义基本标注(用户可以点击交互)
|
||||
/*
|
||||
MapAnnotation(coordinate: item.location) {
|
||||
Image("Logo")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
}*/
|
||||
|
||||
// 方案4. 自定义高级标注
|
||||
MapAnnotation(coordinate: item.location) {
|
||||
MapAnnotationView(location: item)
|
||||
}
|
||||
}
|
||||
.overlay(
|
||||
HStack(alignment: .center, spacing: 12) {
|
||||
Image("Logo")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 48, height: 48, alignment: .center)
|
||||
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
HStack {
|
||||
Text("经度:")
|
||||
.font(.footnote)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.accentColor)
|
||||
Spacer()
|
||||
Text("\(region.center.latitude)")
|
||||
.font(.footnote)
|
||||
.foregroundColor(.white)
|
||||
} //: HStack
|
||||
Divider()
|
||||
HStack {
|
||||
Text("纬度:")
|
||||
.font(.footnote)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.accentColor)
|
||||
Spacer()
|
||||
Text("\(region.center.longitude)")
|
||||
.font(.footnote)
|
||||
.foregroundColor(.white)
|
||||
} //: HStack
|
||||
} //: VStack
|
||||
} //: HStack
|
||||
.padding(.vertical, 12)
|
||||
.padding(.horizontal, 16)
|
||||
.background(
|
||||
Color.black
|
||||
.cornerRadius(8)
|
||||
.opacity(0.6)
|
||||
).padding()
|
||||
, alignment: .top
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - Preview
|
||||
struct MapView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MapView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// ThePlacesOfInterestApp.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/3.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct ThePlacesOfInterestApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
MainView()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// VideoListView.swift
|
||||
// ThePlacesOfInterest
|
||||
//
|
||||
// Created by 刘铭 on 2021/1/7.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct VideoListView: View {
|
||||
// MARK: - Properties
|
||||
@State var videos: [Video] = Bundle.main.decode("videos.json")
|
||||
|
||||
let hapticImpact = UIImpactFeedbackGenerator(style: .medium)
|
||||
|
||||
// MARK: - Body
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
List {
|
||||
ForEach(videos) { item in
|
||||
NavigationLink(destination: VideoPlayerView(videoSelected: item.name, videoTitle: item.name)) {
|
||||
VideoListItemView(video: item)
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
} //: Loop
|
||||
} //: List
|
||||
.listStyle(InsetGroupedListStyle())
|
||||
.navigationBarTitle("视频", displayMode: .inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
Button(action: {
|
||||
videos.shuffle()
|
||||
hapticImpact.impactOccurred()
|
||||
}) {
|
||||
Image(systemName: "arrow.2.squarepath")
|
||||
}
|
||||
}
|
||||
}
|
||||
} //: NavigationView
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Preview
|
||||
struct VideoListView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VideoListView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x2A",
|
||||
"green" : "0x82",
|
||||
"red" : "0xDF"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.165",
|
||||
"green" : "0.510",
|
||||
"red" : "0.875"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 527 KiB |
@@ -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-ipad.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-20@2x-1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29-ipad.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-29@2x-ipad.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "icon-40.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@2x.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"filename" : "AppIcon.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 764 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icon-40.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/Logo.imageset/icon-40.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "万里长城.jpg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/万里长城.imageset/万里长城.jpg
vendored
Normal file
|
After Width: | Height: | Size: 270 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "兵马俑.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/兵马俑.imageset/兵马俑.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 263 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "北京故宫.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/北京故宫.imageset/北京故宫.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 232 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "安徽黄山.jpg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/安徽黄山.imageset/安徽黄山.jpg
vendored
Normal file
|
After Width: | Height: | Size: 225 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "承德避暑山庄.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 273 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "日月潭.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/日月潭.imageset/日月潭.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 153 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "杭州西湖.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/杭州西湖.imageset/杭州西湖.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 34 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "桂林山水.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/桂林山水.imageset/桂林山水.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 223 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "苏州园林.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/苏州园林.imageset/苏州园林.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 409 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "长江三峡.jpeg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
第四章 中国名胜古迹/源代码/ThePlacesOfInterest/ThePlacesOfInterest/Assets.xcassets/名胜标志图/长江三峡.imageset/长江三峡.jpeg
vendored
Normal file
|
After Width: | Height: | Size: 283 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "万里长城-1.jpg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 82 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "万里长城-2.jpg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||