diff 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
line wrap: on
line diff
--- a/GeoQuiz/Helpers/CityMap.swift	Tue Oct 04 18:54:24 2022 +0200
+++ b/GeoQuiz/Helpers/CityMap.swift	Thu Oct 06 11:14:34 2022 +0200
@@ -6,13 +6,17 @@
 //
 
 import SwiftUI
+import MapKit
 
 struct CityMap: View {
     @ObservedObject var game: CityGame
+    @State private var mapImage: UIImage? = nil
+    
+    let geo: GeometryProxy
     
     var body: some View {
-        Group {
-            if let mapImage = game.mapImage {
+        VStack {
+            if let mapImage = mapImage {
                 Image(uiImage: mapImage)
                     .resizable()
                     .scaledToFit()
@@ -22,11 +26,42 @@
                 ProgressView()
             }
         }
+        .onChange(of: game.correctAnswer.value) { _ in getMapImage() }
+        .onAppear(perform: getMapImage)
+    }
+    
+    private func getMapImage() {
+        let region = MKCoordinateRegion(
+            center: CLLocationCoordinate2D(
+                latitude: game.correctAnswer.value.lat,
+                longitude: game.correctAnswer.value.lon
+            ),
+            span: MKCoordinateSpan(
+                latitudeDelta: 0.1,
+                longitudeDelta: 0.1
+            )
+        )
+
+        // Map options
+        let mapOptions = MKMapSnapshotter.Options()
+        mapOptions.region = region
+        mapOptions.size = CGSize(width: geo.size.width * 0.8, height: geo.size.width * 0.8)
+        mapOptions.pointOfInterestFilter = .excludingAll
+
+        // Create the snapshotter and run it
+        let snapshotter = MKMapSnapshotter(options: mapOptions)
+        snapshotter.start { (snapshot, error) in
+            if let snapshot = snapshot {
+                self.mapImage = snapshot.image
+            } else if let error = error {
+                print(error.localizedDescription)
+            }
+        }
     }
 }
 
-struct CityMap_Previews: PreviewProvider {
-    static var previews: some View {
-        CityMap(game: CityGame())
-    }
-}
+//struct CityMap_Previews: PreviewProvider {
+//    static var previews: some View {
+//        CityMap(game: CityGame())
+//    }
+//}