Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Annotations aren't immobile and move with zoom #49

Open
GuillaumeGenest opened this issue May 22, 2023 · 4 comments
Open

Annotations aren't immobile and move with zoom #49

GuillaumeGenest opened this issue May 22, 2023 · 4 comments

Comments

@GuillaumeGenest
Copy link

When I use ignoreSafeArea or edgesIgnoringSafeArea(.all) in my code and if I zoom, my annotations aren't immobile and move.
To fix the problem I have to add a title with a VStack above my map
Some one have an idea of the problem ?

Thank you
Good work with the package, it's really impressive

Carte(coordinateRegion: $region ,type: MKStandardMapConfiguration() , userTrackingMode: $userTrackingMode ,annotationItems: MockedDataMapAnnotation,
annotationContent: { location in
CarteAnnotation(coordinate: CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)) {
VStack(spacing: 0) {
Image(systemName: "map")
.resizable()
.scaledToFit()
.frame(width: 15, height: 15)
.font(.headline)
.foregroundColor(Color.black)
.padding(6)
.background(Color.white)
.clipShape(Circle())
Image(systemName: "triangle.fill")
.resizable()
.scaledToFit()
.foregroundColor(.black)
.frame(width: 10, height: 10)
.rotationEffect(Angle(degrees: 180))
.offset(y: -1.5)
.padding(.bottom, 40)
}
}
},
overlays: [
MKPolyline(coordinates: polylineCoordinates, count: polylineCoordinates.count)
],overlayContent: { overlay in
RendererCarteOverlay(overlay: overlay) { _, overlay in

                if let polyline = overlay as? MKPolyline {
                    let renderer = MKPolylineRenderer(polyline: polyline)
                    renderer.lineWidth = 2
                    renderer.lineCap = .butt
                    renderer.lineJoin = .miter
                    renderer.miterLimit = 0
                    renderer.lineDashPhase = 0
                    renderer.lineDashPattern = [10,5]
                    renderer.strokeColor = .orange
                    return renderer
                } else {
                     assertionFailure("Unknown overlay type found.")
                     print("Probleme overlay")
                     return MKOverlayRenderer(overlay: overlay)
                }
            }
        }
   ).edgesIgnoringSafeArea(.all)
@pauljohanneskraft
Copy link
Owner

As described in the readme, please do not create your MKOverlay instances inside the body-property of your view, since this means that the overlay instances do not have fixed pointer values (i.e. the ObjectIdentifier is different for each run) and that means that the overlays will constantly be removed and added again for each call of the view's body. Please make sure to have them wrapped in @State and only set their values, when they actually need to be changed.

Having said that, you seem to be using Carte and CarteAnnotation, which are both not defined in this library - are those custom wrappers you wrote? It may also help to fix your annotations to a certain size, since resizing doesn't really work that well with MKMapView.

@GuillaumeGenest
Copy link
Author

I have the same issue without overlay, I just rename map and MapViewAnnotation to understand the error. I have the same issue with this code.

struct ContentView: View {
@State var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 48.861, longitude: 2.335833), latitudinalMeters: 8000, longitudinalMeters: 8000)

@State var MockedDataMapAnnotation : [Location] = [
Location(name: "Perou", cityName: "Perou", latitude: -12.046374, longitude: -77.0427934, description: "", category: .Logement, imageURL: ""),
   Location(name: "Le Louvre", cityName: "Paris", latitude: 48.861, longitude:2.335833, description: "", category: .Musee, imageURL: ""),
Location(name: "Tour eiffeul", cityName: "Paris", latitude: 48.858370, longitude:2.294481, description: "", category: .Musee, imageURL: ""),
   Location(name: "Berlin", cityName: "Berlin", latitude:52.520007, longitude:13.404954, description: "", category: .Logement, imageURL: ""),
   Location(name: "Rome", cityName: "Rome", latitude:41.902784, longitude:12.496366, description: "", category: .Bar, imageURL: "https://firebasestorage.googleapis.com/v0/b/sunny-road-2f946.appspot.com/o/user?alt=media&token=d959b262-7cdb-48d9-a720-da355b8167bc"),
   Location(name: "Barcelone", cityName: "Barcelone", latitude:41.3850639, longitude:2.1734035, description: "", category: .Vue, imageURL: "")
]

var body: some View {
        Map(coordinateRegion: $region , annotationItems: MockedDataMapAnnotation,
              annotationContent: { location in
            ViewMapAnnotation(coordinate: CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)) {
                VStack(spacing: 0) {
                    Image(systemName: "map")
                        .resizable()
                        .scaledToFit()
                        .frame(width: 15, height: 15)
                        .font(.headline)
                        .foregroundColor(Color.black)
                        .padding(6)
                        .background(Color.white)
                        .clipShape(Circle())
                    Image(systemName: "triangle.fill")
                        .resizable()
                        .scaledToFit()
                        .foregroundColor(.black)
                        .frame(width: 10, height: 10)
                        .rotationEffect(Angle(degrees: 180))
                        .offset(y: -1.5)
                        .padding(.bottom, 40)
                }
            }
        }
        ).ignoresSafeArea()
}

}

@GuillaumeGenest
Copy link
Author

@pauljohanneskraft I analyzed the problem, and it seems have an issue with the function private func updateRegion(on mapView: MKMapView, from previousView: Carte?, to newView: Carte, animated: Bool) in the coordinator ( for iOS 16). When the region is not set, the annotations don't move when you zoom.

Moreover when I tried to zoom in to the maximum, I have the error on my debugger screen : Wrapped around the polygon without finishing... :-(
[VKDefault] Building failed to triangulate!

I don't know if you have ever had this kind of problem.

@Bubba8291
Copy link

I'm having this issue as well. Has there been a fix or workaround yet?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants