Простая реализация MKCircle в местоположении пользователя - PullRequest
0 голосов
/ 01 декабря 2018

Настоящий новичок в IOS и SWIFT.Попытка наложить круг на текущее местоположение.Следующий код генерирует вид карты, помещает синюю точку в местоположение пользователя, но НЕ рисует оверлейный круг. Помогите.

//
//  ViewController.swift
//  userLocation
//

//

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    //Map outlet
    @IBOutlet weak var map: MKMapView!
    @IBOutlet weak var zoomFactorStepper: UIStepper!

    let manager = CLLocationManager()
    var zoomFactor = 0.01

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations[0]
        let span:MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: zoomFactor, longitudeDelta: zoomFactor)
        let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
        let region:MKCoordinateRegion = MKCoordinateRegion(center: myLocation, span: span)
        map.setRegion(region, animated: true)
        self.map.showsUserLocation = true
        map.removeOverlays(map.overlays)
        let circle = MKCircle(center: location.coordinate, radius: 100)
        map.addOverlay(circle)

    }

Эта функция выполняет основную работу.

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()

    }

    @IBAction func zoomFactorStepperAction(_ sender: Any) {
        zoomFactor = zoomFactorStepper.value * 0.01
        //map.setNeedsDisplay()
    }

    func map(_ map: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        guard let circelOverLay = overlay as? MKCircle else {return MKOverlayRenderer()}

        let circleRenderer = MKCircleRenderer(circle: circelOverLay)
        circleRenderer.strokeColor = .blue
        circleRenderer.fillColor = .blue
        //circleRenderer.alpha = 0.2
        return circleRenderer
    }

}

1 Ответ

0 голосов
/ 02 декабря 2018

Этого не хватало, как только я добавил это, круг, как и ожидалось, упал.

map.delegate = self

...