Mercurial > public > geoquiz
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()) } }