Pull this view out into a standalone file
- ID
2b64a0e- date
2023-06-08 09:53:23+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
ec40633- message
Pull this view out into a standalone file- changed files
Changed files
BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (24688) → BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (25136)
diff --git a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
index 80f28a6..fa11309 100644
--- a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
@@ -19,6 +19,7 @@
94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7511F2A31B53E005859E7 /* AlbumInfo.swift */; };
94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */; };
94D7512B2A31D6AC005859E7 /* AssetHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */; };
+ 94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -55,6 +56,7 @@
94D7511F2A31B53E005859E7 /* AlbumInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumInfo.swift; sourceTree = "<group>"; };
94D751212A31BD8E005859E7 /* PhotoReviewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoReviewer.swift; sourceTree = "<group>"; };
94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetHelpers.swift; sourceTree = "<group>"; };
+ 94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailList.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -148,6 +150,7 @@
94D7511D2A31B243005859E7 /* PreviewImage.swift */,
94D7511F2A31B53E005859E7 /* AlbumInfo.swift */,
94D751212A31BD8E005859E7 /* PhotoReviewer.swift */,
+ 94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */,
);
path = Views;
sourceTree = "<group>";
@@ -296,6 +299,7 @@
94D7511E2A31B243005859E7 /* PreviewImage.swift in Sources */,
94D750F02A31A796005859E7 /* BlinkReviewerApp.swift in Sources */,
94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */,
+ 94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */,
94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (2625) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (1242)
diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index c054860..8aab99f 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -15,33 +15,9 @@ struct PhotoReviewer: View {
var body: some View {
VStack {
Divider()
- ScrollViewReader { proxy in
- ScrollView(.horizontal) {
- LazyHStack(spacing: 5) {
- // TODO: placeholder images for start/end
- // TODO: Allow tapping thumbnails to jump to that
-
- // Implementation note: we use the localIdentifier rather than the
- // array index as the id here, because the app gets way slower if
- // you use the array index -- it tries to regenerate a bunch of
- // the thumbnails every time you change position.
- ForEach(Array(assets.enumerated()), id: \.element.localIdentifier) { index, asset in
- ThumbnailImage(
- thumbnail: asset.getThumbnail(),
- isSelected: assets[selectedAssetIndex].localIdentifier == asset.localIdentifier
- ).onTapGesture {
- selectedAssetIndex = index
- }
- }
- }.padding()
- }.frame(height: 70)
- .onChange(of: selectedAssetIndex, perform: { newIndex in
- withAnimation {
- proxy.scrollTo(assets[newIndex].localIdentifier, anchor: .center)
- }
-
- })
- }
+
+ ThumbnailList(assets: assets, selectedAssetIndex: $selectedAssetIndex)
+
Divider()
PreviewImage(asset: assets[selectedAssetIndex])
BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (0) → BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (1620)
diff --git a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
new file mode 100644
index 0000000..c509111
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
@@ -0,0 +1,43 @@
+//
+// ThumbnailList.swift
+// BlinkReviewer
+//
+// Created by Alex Chan on 08/06/2023.
+//
+
+import SwiftUI
+import Photos
+
+struct ThumbnailList: View {
+ var assets: [PHAsset]
+ @Binding var selectedAssetIndex: Int
+
+ var body: some View {
+ ScrollViewReader { proxy in
+ ScrollView(.horizontal) {
+ LazyHStack(spacing: 5) {
+ // TODO: placeholder images for start/end
+ // TODO: Allow tapping thumbnails to jump to that
+
+ // Implementation note: we use the localIdentifier rather than the
+ // array index as the id here, because the app gets way slower if
+ // you use the array index -- it tries to regenerate a bunch of
+ // the thumbnails every time you change position.
+ ForEach(Array(assets.enumerated()), id: \.element.localIdentifier) { index, asset in
+ ThumbnailImage(
+ thumbnail: asset.getThumbnail(),
+ isSelected: assets[selectedAssetIndex].localIdentifier == asset.localIdentifier
+ ).onTapGesture {
+ selectedAssetIndex = index
+ }
+ }
+ }.padding()
+ }.frame(height: 70)
+ .onChange(of: selectedAssetIndex, perform: { newIndex in
+ withAnimation {
+ proxy.scrollTo(assets[newIndex].localIdentifier, anchor: .center)
+ }
+ })
+ }
+ }
+}