bgibers
bgibers

Reputation: 200

Coding multiple annotations swift 2

I have created code that produces a geotargeting area represented by an annotation and MKCircle. The app notifies the user when they have entered and exited a region. Everything is working fine but I cannot figure out how to get the app to hold/display multiple regions (only one annotation/circle will show) here are a few snippets of my code:

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")
    }
            }
        }
    }
}

Upvotes: 0

Views: 78

Answers (1)

Christian Abella
Christian Abella

Reputation: 5797

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)
}

Upvotes: 1

Related Questions