3 votes

Comment redimensionner MKCircle de manière fluide

J'essaie d'implémenter un MKCircle dont le rayon augmente ou diminue en fonction de la modification d'un curseur. Le problème que je rencontre est que lorsque le cercle est redessiné, il n'est pas du tout lisse. J'ai lu quelques autres articles qui semblent indiquer qu'il faut créer une sous-classe de MKCircle et y faire quelque chose, mais à chaque fois que je regarde des exemples de code, j'ai du mal à suivre car ils ne sont généralement pas en Swift 3. Quelqu'un pourrait-il me montrer comment faire ? Voici mon code pour quand le curseur est modifié :

func sliderValueChanged(_ sender:UISlider!) {
    if (!map.selectedAnnotations.isEmpty) {
        for overlay in map.overlays {
            var temp : MKAnnotation = (map.selectedAnnotations.first)!
            if (overlay.coordinate.latitude == temp.coordinate.latitude && overlay.coordinate.longitude == temp.coordinate.longitude) {
                let newCirc : MKCircle = MKCircle(center: temp.coordinate, radius: CLLocationDistance(Float(sender.value*1000)))
                let region: MKCoordinateRegion = MKCoordinateRegionForMapRect(newCirc.boundingMapRect)
                let r: MKCoordinateRegion = map.region
                if (region.span.latitudeDelta > r.span.latitudeDelta || region.span.longitudeDelta > r.span.longitudeDelta){
                    map.setRegion(region, animated: true)
                }
                map.add(MKCircle(center: temp.coordinate, radius: CLLocationDistance(Float(sender.value*1000))))
                map.remove(overlay)
                break
            }
        }

    }
}

Image de ce que j'ai jusqu'à présent

0voto

Mariam Points 417

Je l'ai résolu comme suit :

let currentLocPin = MKPointAnnotation()
var circle:MKCircle!

    func sliderValueDidChange(sender: UISlider) {

            map.remove(circle)

            circle = MKCircle(center: currentLocPin.coordinate, radius: CLLocationDistance(sender.value))
            map.add(circle)
    }

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X