annotate GeoQuiz/GuessThePopulationView.swift @ 10:a793f33f05fb

refactor code and fix layout
author Dennis C. M. <dennis@denniscm.com>
date Sat, 08 Oct 2022 21:36:40 +0200
parents e09959b4e4a8
children f1967f8cc67b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
2 // GuessThePopulationView.swift
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 29/9/22.
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import SwiftUI
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
10 struct GuessThePopulationView: View {
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
11 @StateObject var game = CountryGame()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
12
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13 var body: some View {
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
14 ZStack {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
15 LinearGradient(gradient: .quaternary, startPoint: .top, endPoint: .bottom)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
16 .ignoresSafeArea()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
17
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
18 GeometryReader { geo in
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
19 VStack {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
20 GameToolbar(game: game, color: .maizeCrayola)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
21
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
22 Spacer()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
23
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
24 FlagImage(flagSymbol: game.correctAnswer.value.flag, cornerRadius: 20)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
25 .clipShape(RoundedRectangle(cornerRadius: 20))
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
26 .shadow(radius: 10)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
27 .frame(height: geo.size.height * 0.15)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
28
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
29 Spacer()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
30
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
31 VStack(alignment: .leading) {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
32 VStack(alignment: .leading, spacing: 10) {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
33 Text("Question \(game.questionCounter) of \(game.data.count)")
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
34 .font(.title3)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
35 .foregroundColor(.white.opacity(0.7))
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
36
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
37 Text("What is the population of \(game.correctAnswer.key)?")
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
38 .font(.title)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
39 .fontWeight(.semibold)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
40 .foregroundColor(.white)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
41 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
42
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
43 VStack(spacing: 15) {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
44 ForEach(Array(game.userChoices.keys), id: \.self) { countryName in
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
45 Button {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
46 game.answer((key: countryName, value: game.data[countryName]!)) {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
47 game.selector()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
48 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
49 } label: {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
50 let population = game.data[countryName]!.population
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
51 AnswerButton(
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
52 optionName: population.formattedWithSeparator,
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
53 color: .middleRed
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
54 )
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
55 .frame(height: geo.size.height * 0.08)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
56 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
57 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
58 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
59 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
60 .frame(maxWidth: 500)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
61 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
62 .padding()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
63 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
64 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
65 .navigationBarHidden(true)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
66 .modifier(GameAlertsModifier(game: game))
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
70 struct GuessThePopulationView_Previews: PreviewProvider {
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71 static var previews: some View {
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
72 GuessThePopulationView()
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
73 .previewDevice(PreviewDevice(rawValue: "iPhone 14 Pro Max"))
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
74 .previewDisplayName("iPhone 14 Pro Max")
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
75
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
76 GuessThePopulationView()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
77 .previewDevice(PreviewDevice(rawValue: "iPad Pro (12.9-inch) (5th generation)"))
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
78 .previewDisplayName("iPad Pro (12.9-inch) (5th generation)")
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80 }