2960x1440 の完全な壁紙を LazyVGrid で使用することは、iPhone 12 Pro でもパフォーマンスが不十分になるため、オプションではありません。
すべてのアセットはアセット カタログに保存されます。これらはモデルです:
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)") }
ギャラリーは単純な 2 列のグリッドです。
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)
}
}
}
}
これは実行可能ですか?アイデア?
ありがとうございました!