Comments (6)
The approaches are very similar to how the Apple implementation works and therefore do not necessarily need specific documentation here imho. If you feel different about this, feel free to open a pull request with a more extensive explanation.
There are two possible approaches on how to display the current user position.
1. The 'default' way:
You can simply use the MapInformationVisibility
parameter when initializing the map:
Map(
coordinateRegion: $region, // you can also use mapRect here, does not make a difference for this example
informationVisibility: .default.union(.userLocation)
)
This will show the user location as it does in the Maps app. The appearance is hereby fixed - if you need a custom appearance, please look at the following option:
2. The 'custom' way:
Specify an annotation as you normally would that reflects the user location by first defining an annotation item type:
struct UserLocationAnnotation: Identifiable {
var id = UUID()
let coordinate: CLLocationCoordinate2D
// of course, you can add more properties here that might be helpful when creating the annotation itself from this annotation item (e.g. color, text, etc)
}
Not let's plug it into a Map:
struct MyMapView: View {
@State private var annotationItems = [UserLocationAnnotation]()
var body: some View {
Map(
coordinateRegion: $region, // you can also use mapRect here, does not make a difference for this example
annotationItems: annotationItems
) { annotationItem in
MapMarker(coordinate: annotationItem.coordinate, tint: .red)
// This could be any kind of annotation, e.g. ViewMapAnnotation, MapPin and MapMarker
}
}
}
Now you would only need to somehow set the state according to the locations received from your CLLocationManager. You could also use an @Published
property inside an ObservableObject
using the ObservedObject
/StateObject
/EnvironmentObject
property wrappers. One thing you will need to make sure is to not create the identifiable objects inside the body
, since they would be removed and added on each redraw of the map, which would be quite costly performance-wise (this is the case in Apple's Map SwiftUI implementation as well btw).
from map.
Thank you for your answer, but I'm still having problems with user position visualization, especially with the "default" way: when the map appears on the view is centered on the user position, but it doesn't show a dot/mark on the map (as Apple Maps does); furthermore, the Location manager, that at the beginning of the app it was working good starts to raise errors (managed by callback function didFailWithError).
I'm also sure that Location Manager class works well because using a standard Map object from MapKit I get rid of the errors.
from map.
You will still need to handle authorization, maybe this is the issue? This library is simply setting showsUserLocation
on MKMapView
, so there should not really be an issue in any way. I sadly don't have the time to dig into this deeper at the moment, but I remember that this definitely worked a couple of weeks ago.
Which version of this library are you using? Could you maybe try the latest main
commit?
from map.
I tried to add the package inside my Xcode project specifying the main branch rather than the default version proposed by Xcode and it starts to work correctly.
Thank you very much for your help and I', very sorry for wasting your time for a stupid thing.
from map.
great! not a waste of time at all - it tells me that I will need to release a new version soon, so that this bug does not appear for new users of this library.
from map.
@pauljohanneskraft i also noticed that there is one reported bug left, about the name clash of UserTrackingMode inside the main branch.
I noticed it now, trying to adapt the Map to the new initialization inside my app.
from map.
Related Issues (20)
- Map Annotation selection HOT 1
- ViewMapAnnotation does not allow text HOT 2
- ViewMapAnnotation not updating location HOT 1
- Using current zoom factor in Annotations HOT 1
- ViewMapAnnotation doesn't support clustering HOT 4
- Support with documentation HOT 4
- Package not recognised HOT 18
- impossible to have my liste of annotations HOT 1
- Issue with userTrackingMode HOT 8
- Map+Coordinator.swift:256 Modifying state during view update, this will cause undefined behavior.
- onTapGesture not working HOT 23
- watchOS support for overlays? HOT 2
- assertionFailure("Somehow a cluster contains an unknown annotation item.") HOT 8
- Fails to compile for macOS (Apple Silicon) HOT 2
- If an annotation is clustered and then this annotation is removed from the array of annotationItems, it throws error assertionFailure("Somehow a cluster contains an unknown annotation item." HOT 1
- Append a Text after an Image as ViewMapAnnotation not showed HOT 1
- Annotations aren't immobile and move with zoom HOT 4
- Running HOT 1
- can't use Map on VisionOS. error about userTrackingMode HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from map.