2016-11-29 7 views
0

Ich habe einen Code erstellt, der einen Geotargeting-Bereich erzeugt, der durch eine Annotation und MKCircle dargestellt wird. Die App benachrichtigt den Benutzer, wenn er eine Region betreten und verlassen hat. Alles funktioniert gut, aber ich kann nicht herausfinden, wie die App bekommen zu halten/Anzeige mehrerer Regionen (nur eine Anmerkung/Kreis zeigen) sind hier ein paar Schnipsel von meinem Code:Codierung mehrerer Anmerkungen swift 2

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

Antwort

1

Sie haben die implementieren renderForOverlay-Funktion von MKMapViewDelegate, um die von Ihnen hinzugefügten Überlagerungen zu sehen. Versuchen Sie auch, Ihren Radius zu vergrößern, wenn Sie möchten, dass er sofort angezeigt wird, ohne zu zoomen.

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

Vielen Dank! – bgibers

Verwandte Themen