Mercurial > public > geoquiz
annotate GeoQuiz/SettingsModalView.swift @ 27:3f4b366d476d
add flag layout settings
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 10 Nov 2022 09:26:48 +0100 |
parents | 425078c01194 |
children | eb23effeede7 |
rev | line source |
---|---|
5 | 1 // |
2 // SettingsModalView.swift | |
3 // GeoQuiz | |
4 // | |
5 // Created by Dennis Concepción Martín on 22/9/22. | |
6 // | |
7 | |
8 import SwiftUI | |
9 | |
10 struct SettingsModalView: View { | |
26 | 11 @ObservedObject var userController: UserController |
19 | 12 |
5 | 13 @Environment(\.dismiss) var dismiss |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
14 |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
15 var lives: [Int] { |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
16 var lives = [Int]() |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
17 for i in stride(from: 5, to: 55, by: 5) { |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
18 lives.append(i) |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
19 } |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
20 |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
21 return lives |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
22 } |
5 | 23 |
24 var body: some View { | |
19 | 25 NavigationStack { |
5 | 26 Form { |
7 | 27 Section { |
26 | 28 Picker("❤️ Lives", selection: $userController.data.numberOfLives) { |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
29 ForEach(lives, id: \.self) { numberOfLives in |
9 | 30 Text("\(numberOfLives)") |
31 .tag(numberOfLives) | |
32 } | |
33 } | |
7 | 34 } header: { |
27 | 35 Text("General") |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
36 } footer: { |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
37 Text("Number of lives at the beginning of each game.") |
7 | 38 } |
39 | |
40 Section { | |
27 | 41 Picker("Flag shape", selection: $userController.data.guessTheFlagShape) { |
42 ForEach(GuessTheFlagShape.allCases, id: \.self) { shape in | |
43 Text(shape.localizedName) | |
44 .tag(shape) | |
45 } | |
46 } | |
47 } header: { | |
48 Text("Guess the flag game") | |
49 } | |
50 | |
51 Section { | |
26 | 52 Toggle("Haptics", isOn: $userController.data.haptics) |
53 Toggle("Sound effects", isOn: $userController.data.sound) | |
7 | 54 } header: { |
55 Text("Effects") | |
56 } | |
57 | |
58 Section { | |
27 | 59 SettingsRow( |
9 | 60 color: .mayaBlue, |
27 | 61 symbol: "person.fill", |
9 | 62 text: "About", |
63 url: URL(string: "https://dennistech.io")! | |
64 ) | |
65 | |
27 | 66 SettingsRow( |
9 | 67 color: .atomicTangerine, |
27 | 68 symbol: "ant.fill", |
9 | 69 text: "Report bugs", |
70 url: URL(string: "mailto:dmartin@dennistech.io")! | |
71 ) | |
72 | |
27 | 73 SettingsRow( |
9 | 74 color: .blueBell, |
27 | 75 symbol: "message.fill", |
9 | 76 text: "Twitter", |
77 url: URL(string: "https://twitter.com/dennistech_")! | |
78 ) | |
7 | 79 } header: { |
80 Text("Get in touch") | |
27 | 81 } footer: { |
82 HStack { | |
83 Spacer() | |
84 VStack { | |
85 Text("© 2022 Dennis Technologies Ltd.") | |
86 Text("Proud to be indie.") | |
87 | |
88 if let versionNumber = getVersion() { | |
89 Text("Version \(versionNumber)") | |
90 } | |
91 } | |
92 Spacer() | |
93 } | |
94 .padding(.top) | |
7 | 95 } |
5 | 96 } |
97 .navigationTitle("Settings") | |
19 | 98 .navigationBarTitleDisplayMode(.inline) |
5 | 99 .toolbar { |
100 ToolbarItem(placement: .cancellationAction) { | |
101 Button { | |
102 dismiss() | |
103 } label: { | |
104 Label("Exit", systemImage: "multiply") | |
105 } | |
106 } | |
107 } | |
108 } | |
109 } | |
110 } | |
111 | |
112 struct SettingsModalView_Previews: PreviewProvider { | |
113 static var previews: some View { | |
26 | 114 SettingsModalView(userController: UserController()) |
5 | 115 } |
116 } |