diff GeoQuiz/Components/CityMapHelper.swift @ 19:f140bb277c96

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Sun, 23 Oct 2022 00:11:38 +0100
parents a793f33f05fb
children
line wrap: on
line diff
--- a/GeoQuiz/Components/CityMapHelper.swift	Sat Oct 22 08:56:54 2022 +0100
+++ b/GeoQuiz/Components/CityMapHelper.swift	Sun Oct 23 00:11:38 2022 +0100
@@ -9,12 +9,18 @@
 import MapKit
 
 struct CityMap: View {
-    @ObservedObject var game: CityGame
-    @State private var mapImage: UIImage? = nil
+    @ObservedObject var game: CityGameController
+    
+    @StateObject var mapController: MapController
+    
+    init(game: CityGameController) {
+        self.game = game
+        self._mapController = StateObject(wrappedValue: MapController())
+    }
     
     var body: some View {
         VStack {
-            if let mapImage = mapImage {
+            if let mapImage = mapController.image {
                 Image(uiImage: mapImage)
                     .resizable()
                     .scaledToFit()
@@ -28,42 +34,18 @@
                 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: 500, height: 500)
-        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)
-            }
+        .onChange(of: game.correctAnswer.value) { _ in
+            mapController.getMapImage(lat: game.correctAnswer.value.lat, lon: game.correctAnswer.value.lon)
+        }
+        
+        .onAppear {
+            mapController.getMapImage(lat: game.correctAnswer.value.lat, lon: game.correctAnswer.value.lon)
         }
     }
 }
 
 struct CityMap_Previews: PreviewProvider {
     static var previews: some View {
-        CityMap(game: CityGame())
+        CityMap(game: CityGameController())
     }
 }