annotate GeoQuiz/Helpers/CityMap.swift @ 8:e09959b4e4a8

fix bugs
author Dennis C. M. <dennis@denniscm.com>
date Thu, 06 Oct 2022 11:14:34 +0200
parents d945e52b0704
children
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 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // CityMap.swift
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
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
15 let geo: GeometryProxy
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17 var body: some View {
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
18 VStack {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
19 if let mapImage = mapImage {
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
20 Image(uiImage: mapImage)
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
21 .resizable()
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
22 .scaledToFit()
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
23 .clipShape(RoundedRectangle(cornerRadius: 20))
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
24 .shadow(radius: 10)
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
25 } else {
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
26 ProgressView()
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
27 }
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
28 }
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
29 .onChange(of: game.correctAnswer.value) { _ in getMapImage() }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
30 .onAppear(perform: getMapImage)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
31 }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
32
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
33 private func getMapImage() {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
34 let region = MKCoordinateRegion(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
35 center: CLLocationCoordinate2D(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
36 latitude: game.correctAnswer.value.lat,
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
37 longitude: game.correctAnswer.value.lon
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
38 ),
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
39 span: MKCoordinateSpan(
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
40 latitudeDelta: 0.1,
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
41 longitudeDelta: 0.1
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
42 )
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
43 )
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 // Map options
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
46 let mapOptions = MKMapSnapshotter.Options()
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
47 mapOptions.region = region
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
48 mapOptions.size = CGSize(width: geo.size.width * 0.8, height: geo.size.width * 0.8)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
49 mapOptions.pointOfInterestFilter = .excludingAll
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
50
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
51 // Create the snapshotter and run it
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
52 let snapshotter = MKMapSnapshotter(options: mapOptions)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
53 snapshotter.start { (snapshot, error) in
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
54 if let snapshot = snapshot {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
55 self.mapImage = snapshot.image
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
56 } else if let error = error {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
57 print(error.localizedDescription)
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
58 }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
59 }
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
60 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
61 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62
8
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
63 //struct CityMap_Previews: PreviewProvider {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
64 // static var previews: some View {
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
65 // CityMap(game: CityGame())
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
66 // }
e09959b4e4a8 fix bugs
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
67 //}