0

我创建了生成由注释和 MKCircle 表示的地理定位区域的代码。当用户进入和退出一个区域时,应用程序会通知用户。一切正常,但我不知道如何让应用程序保存/显示多个区域(只会显示一个注释/圆圈)这里是我的代码的一些片段:

override func viewDidLoad() {
    super.viewDidLoad( )


//setup locationManager
locationManager.delegate = self
locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()

//setup mapView
mapView.delegate = self
mapView.showsUserLocation = true
mapView.userTrackingMode = .Follow

//setup test data will need to link coredata to pass in (LocationLabel, radius, address)
    setupData("Test1", radius: 100, Address: "735 Main Rd, Clemson")
    setupData("Test2", radius: 100, Address: "821 Main Rd, Clemson")
    setupData("Test3", radius: 100, Address: "720 Main Rd, Clemson")
}

func setupData( Label: String, radius: Double, Address: String ) {
    // check if system can monitor regions
    if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion.self) {

        //region data need to put in its own class to read multiple regions
        let title = Label
        let regionRadius = radius // in meters
        let address = Address // street, city, state zip

        //takes in the address of a location and converts it into 2d coordinates (lat/long)
        let geocoder = CLGeocoder()
        geocoder.geocodeAddressString(address) { (placemarks, error) in
            if let placemarks = placemarks {
                if placemarks.count != 0 {
                    let coordinates = placemarks.first!.location
                    let coordinate = coordinates?.coordinate

        //setup region this will read an object with a saved coordinate and name
        var region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: coordinate!.latitude,
            longitude: coordinate!.longitude), radius: regionRadius, identifier: title)
        self.locationManager.startMonitoringForRegion(region)

        //setup annotation
        let annotation = MKPointAnnotation()
        annotation.coordinate = coordinate!;
        annotation.title = "\(title)";
        self.mapView.addAnnotation(annotation)

        //setup circle
        let circle = MKCircle(centerCoordinate: coordinate!, radius: regionRadius)
        self.mapView.addOverlay(circle)
    }
    else {
        print("System can't track regions")
    }
            }
        }
    }
}
4

1 回答 1

1

You have to implement the renderForOverlay function of MKMapViewDelegate to actually see those overlays that you have added. Try to increase your radius as well if you want it to see right away without zooming in.

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer
{
  if let overlay = overlay as? MKCircle
  {
    let circleRenderer = MKCircleRenderer(circle: overlay)
    circleRenderer.fillColor = UIColor.blueColor()
    return circleRenderer
  }

  return MKOverlayRenderer(overlay: overlay)
}
于 2016-11-30T00:41:57.857 回答