Mercurial > public > geoquiz
annotate GeoQuiz/Components/CityMapHelper.swift @ 14:136928bae534
add user profile
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Wed, 19 Oct 2022 07:56:33 +0200 |
parents | a793f33f05fb |
children | f140bb277c96 |
rev | line source |
---|---|
6 | 1 // |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
8
diff
changeset
|
2 // CityMapHelper.swift |
6 | 3 // GeoQuiz |
4 // | |
7 | 5 // Created by Dennis Concepción Martín on 4/10/22. |
6 | 6 // |
7 | |
8 import SwiftUI | |
8 | 9 import MapKit |
6 | 10 |
11 struct CityMap: View { | |
7 | 12 @ObservedObject var game: CityGame |
8 | 13 @State private var mapImage: UIImage? = nil |
14 | |
6 | 15 var body: some View { |
8 | 16 VStack { |
17 if let mapImage = mapImage { | |
7 | 18 Image(uiImage: mapImage) |
19 .resizable() | |
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 | 26 .shadow(radius: 10) |
27 } else { | |
28 ProgressView() | |
29 } | |
30 } | |
8 | 31 .onChange(of: game.correctAnswer.value) { _ in getMapImage() } |
32 .onAppear(perform: getMapImage) | |
33 } | |
34 | |
35 private func getMapImage() { | |
36 let region = MKCoordinateRegion( | |
37 center: CLLocationCoordinate2D( | |
38 latitude: game.correctAnswer.value.lat, | |
39 longitude: game.correctAnswer.value.lon | |
40 ), | |
41 span: MKCoordinateSpan( | |
42 latitudeDelta: 0.1, | |
43 longitudeDelta: 0.1 | |
44 ) | |
45 ) | |
46 | |
47 // Map options | |
48 let mapOptions = MKMapSnapshotter.Options() | |
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 | 51 mapOptions.pointOfInterestFilter = .excludingAll |
52 | |
53 // Create the snapshotter and run it | |
54 let snapshotter = MKMapSnapshotter(options: mapOptions) | |
55 snapshotter.start { (snapshot, error) in | |
56 if let snapshot = snapshot { | |
57 self.mapImage = snapshot.image | |
58 } else if let error = error { | |
59 print(error.localizedDescription) | |
60 } | |
61 } | |
6 | 62 } |
63 } | |
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 } |