Using the full, 2960x1440 wallpapers with LazyVGrid is not an option, as it leads to unsatisfactory performance, even on an iPhone 12 Pro.
All assets are stored in the asset catalog. These are the Models:
struct Thumbnail: Identifiable {
var id = UUID()
var name: String
}
struct Wallpaper: Identifiable {
var id = UUID()
var name: String
}
let thumbnailSet = (1...50).map { Thumbnail(name: "thumbnail-\($0)") }
let wallpaperSet = (1...50).map { Wallpaper(name: "wallpaper-\($0)") }
The gallery is a simple two column grid:
import SwiftUI
struct GalleryView: View {
@State private var fullScreen = false
let columns = [
GridItem(.flexible(), spacing: 2),
GridItem(.flexible())]
var body: some View {
ZStack {
// GRID VIEW
ScrollView(showsIndicators: false) {
VStack {
LazyVGrid(columns: columns, spacing: 2) {
ForEach(thumbnailSet.indices) { index in
Image(thumbnailSet[index].name)
.resizable()
.aspectRatio(contentMode: .fit)
.onTapGesture {(fullScreen = true)}
}
}
}
}
.ignoresSafeArea()
// FULL SCREEN VIEW
if fullScreen {
ZStack {
// Code to show corresponding wallpaper?
// BACK TO GRID VIEW
Button(action: {
(fullScreen = false)
}) {Image(systemName: "chevron.left")
.font(.system(size: 23))
.frame(width: 48, height: 44)
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
}
.zIndex(1)
}
}
}
}
Is this doable? Ideas?
Thank you!