annotate GeoQuiz/Components/CityMapHelper.swift @ 11:039b26a99a48

implementing RevenueCat
author Dennis C. M. <dennis@denniscm.com>
date Sun, 09 Oct 2022 17:02:34 +0200
parents a793f33f05fb
children f140bb277c96
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 //
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
2 // CityMapHelper.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 //
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
5 // Created by Dennis Concepción Martín on 4/10/22.
6
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
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
9 import MapKit
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 struct CityMap: View {
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
12 @ObservedObject var game: CityGame
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
13 @State private var mapImage: UIImage? = nil
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
14
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15 var body: some View {
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
16 VStack {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
17 if let mapImage = mapImage {
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
18 Image(uiImage: mapImage)
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
19 .resizable()
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
20 .scaledToFit()
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
21 .clipShape(Circle())
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
22 .overlay {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
23 Circle()
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
24 .strokeBorder(.white, lineWidth: 4)
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
25 }
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
26 .shadow(radius: 10)
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
27 } else {
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
28 ProgressView()
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
29 }
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
30 }
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
31 .onChange(of: game.correctAnswer.value) { _ in getMapImage() }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
32 .onAppear(perform: getMapImage)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
33 }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
34
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
35 private func getMapImage() {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
36 let region = MKCoordinateRegion(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
37 center: CLLocationCoordinate2D(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
38 latitude: game.correctAnswer.value.lat,
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
39 longitude: game.correctAnswer.value.lon
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
40 ),
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
41 span: MKCoordinateSpan(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
42 latitudeDelta: 0.1,
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
43 longitudeDelta: 0.1
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
44 )
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
45 )
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
46
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
47 // Map options
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
48 let mapOptions = MKMapSnapshotter.Options()
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
49 mapOptions.region = region
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
50 mapOptions.size = CGSize(width: 500, height: 500)
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
51 mapOptions.pointOfInterestFilter = .excludingAll
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
52
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
53 // Create the snapshotter and run it
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
54 let snapshotter = MKMapSnapshotter(options: mapOptions)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
55 snapshotter.start { (snapshot, error) in
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
56 if let snapshot = snapshot {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
57 self.mapImage = snapshot.image
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
58 } else if let error = error {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
59 print(error.localizedDescription)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
60 }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
61 }
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
63 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
64
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
65 struct CityMap_Previews: PreviewProvider {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
66 static var previews: some View {
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
67 CityMap(game: CityGame())
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
68 }
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
69 }