Определить, вышел ли пользователь MKCircle | MapKit

Вещи, которые мне нужны (более простое объяснение):

  1. [Готово] Получить местоположение пользователей и показать его в UIMapView
  2. [Готово] Добавить круг вокруг пользователя в UIMapView
  3. Определить, покидает ли пользователь этот круг

Это мой код для 1 и 2:

import UIKit 
import MapKit 
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var myMap: MKMapView!

    let manager = CLLocationManager()
    var addedCircle = false


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let location = locations[0]

        let span: MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
        let myLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude,
                                                                        location.coordinate.longitude)
        let region: MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)

        myMap.setRegion(region, animated: true)



        self.myMap.showsUserLocation = true

        if !addedCircle {
            self.addRadiusCircle(location: location)
            putted = true
        }

    }



    func addRadiusCircle(location: CLLocation){
        self.myMap.delegate = self
        let circle = MKCircle(center: location.coordinate, radius: 100)
        self.myMap.add(circle)
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is MKCircle {
            let circle = MKCircleRenderer(overlay: overlay)
            circle.strokeColor = UIColor.red
            circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
            circle.lineWidth = 1
            return circle
        } else {
            return MKPolylineRenderer()
        }
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()

    }


}

И это результат этого кода: введите описание изображения здесь

Этот круг не перемещается вместе с пользователем, и я хотел знать, как определить, вышел ли пользователь из этого красного круга, заранее спасибо за ответ

1 ответ

Решение

Вы можете использовать distance(from:) метод CLLocation определить расстояние между текущим местоположением пользователя и центром круга.

let location = CLLocation()
let circleCenter = CLLocation()

if location.distance(from: circleCenter) > circleRadius {
    // User is outside of circle.
}
Другие вопросы по тегам