131 lines
4.9 KiB
Swift
131 lines
4.9 KiB
Swift
//
|
|
// BrandingPreviewView.swift
|
|
// Blackjack
|
|
//
|
|
// Development view for previewing and exporting app icons and launch screens.
|
|
// Access this during development to generate icon assets.
|
|
//
|
|
|
|
import SwiftUI
|
|
import CasinoKit
|
|
|
|
/// Preview view for app branding assets.
|
|
/// Use this during development to preview and export icons.
|
|
struct BrandingPreviewView: View {
|
|
var body: some View {
|
|
TabView {
|
|
// App Icon Preview
|
|
ScrollView {
|
|
VStack(spacing: Design.Spacing.xxxLarge) {
|
|
Text("App Icon")
|
|
.font(.largeTitle.bold())
|
|
|
|
AppIconView(config: .blackjack, size: 300)
|
|
.clipShape(.rect(cornerRadius: 300 * 0.22))
|
|
.shadow(radius: Design.Shadow.radiusXLarge)
|
|
|
|
Text("All Sizes")
|
|
.font(.title2.bold())
|
|
|
|
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))], spacing: Design.Spacing.xLarge) {
|
|
ForEach([180, 120, 87, 60, 40], id: \.self) { size in
|
|
VStack {
|
|
AppIconView(config: .blackjack, size: CGFloat(size))
|
|
.clipShape(.rect(cornerRadius: CGFloat(size) * 0.22))
|
|
Text("\(size)px")
|
|
.font(.caption)
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
}
|
|
}
|
|
|
|
instructionsSection
|
|
}
|
|
.padding()
|
|
}
|
|
.tabItem {
|
|
Label("Icon", systemImage: "app.fill")
|
|
}
|
|
|
|
// Launch Screen Preview
|
|
LaunchScreenView(config: .blackjack)
|
|
.tabItem {
|
|
Label("Launch", systemImage: "rectangle.portrait.fill")
|
|
}
|
|
|
|
// Other Games Preview
|
|
ScrollView {
|
|
VStack(spacing: Design.Spacing.xxxLarge) {
|
|
Text("Other Game Icons")
|
|
.font(.largeTitle.bold())
|
|
|
|
HStack(spacing: Design.Spacing.xLarge) {
|
|
VStack {
|
|
AppIconView(config: .baccarat, size: 150)
|
|
.clipShape(.rect(cornerRadius: 150 * 0.22))
|
|
Text("Baccarat")
|
|
.font(.caption)
|
|
}
|
|
|
|
VStack {
|
|
AppIconView(config: .poker, size: 150)
|
|
.clipShape(.rect(cornerRadius: 150 * 0.22))
|
|
Text("Poker")
|
|
.font(.caption)
|
|
}
|
|
|
|
VStack {
|
|
AppIconView(config: .roulette, size: 150)
|
|
.clipShape(.rect(cornerRadius: 150 * 0.22))
|
|
Text("Roulette")
|
|
.font(.caption)
|
|
}
|
|
}
|
|
|
|
Text("These show how the same pattern works for other games")
|
|
.font(.callout)
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
.padding()
|
|
}
|
|
.tabItem {
|
|
Label("Others", systemImage: "square.grid.2x2")
|
|
}
|
|
}
|
|
}
|
|
|
|
private var instructionsSection: some View {
|
|
VStack(alignment: .leading, spacing: Design.Spacing.medium) {
|
|
Text("How to Export Icons")
|
|
.font(.headline)
|
|
|
|
VStack(alignment: .leading, spacing: Design.Spacing.small) {
|
|
Text("Option 1: Screenshot from Preview")
|
|
.font(.subheadline.bold())
|
|
Text("• Run the preview in Xcode")
|
|
Text("• Screenshot the 1024px icon")
|
|
Text("• Use an online tool to generate all sizes")
|
|
}
|
|
|
|
VStack(alignment: .leading, spacing: Design.Spacing.small) {
|
|
Text("Option 2: Use IconRenderer in Code")
|
|
.font(.subheadline.bold())
|
|
Text("• Call IconRenderer.renderAppIcon(config: .blackjack)")
|
|
Text("• Save the resulting UIImage to files")
|
|
Text("• Add to Assets.xcassets/AppIcon")
|
|
}
|
|
}
|
|
.font(.callout)
|
|
.foregroundStyle(.secondary)
|
|
.frame(maxWidth: .infinity, alignment: .leading)
|
|
.padding()
|
|
.background(Color.gray.opacity(Design.Opacity.subtle))
|
|
.clipShape(.rect(cornerRadius: Design.CornerRadius.medium))
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
BrandingPreviewView()
|
|
}
|
|
|