2016-05-13 19 views
0

Ich versuche, Geo-Targeting-Funktionalität mit CLRegion zu implementieren. Aber wenn ich diese App starte, taucht der MKCircle nicht auf, kann mir jemand sagen, welcher Teil falsch ist?Erstellen eines Geo-Targeting in Swift

func setupData(){ 
    if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion.self){ 

    let tripspotRegion = [ 
     tripSpot(title: "一中商圈", coordinate: CLLocationCoordinate2DMake(24.149062, 120.684891), regionRadius: 300.0, location: "台中一中", type: "food"), 
     tripSpot(title: "逢甲夜市", coordinate: CLLocationCoordinate2DMake(24.180407, 120.645086), regionRadius: 300.0, location:"台中逢甲", type: "food"), 
     tripSpot(title: "東海商圈", coordinate: CLLocationCoordinate2DMake(24.181143, 120.593158), regionRadius: 300.0, location: "東海商圈", type: "food")] 
    //set annotation 
    let coordinate = CLLocationCoordinate2D() 
    let regionRadius = 300.0 
    let title = "title" 
    let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: coordinate.latitude,longitude: coordinate.longitude), radius: regionRadius, identifier: title) 
    //set annotation 
    let tripSpotAnnotation = MKPointAnnotation() 

    tripSpotAnnotation.coordinate = coordinate 
    tripSpotAnnotation.title = "\(title)" 
    mapView.addAnnotations(tripspotRegion) 
    locationManager.startMonitoringForRegion(region) 
    // draw a circle 
     let circle = MKCircle(centerCoordinate: coordinate, radius: regionRadius) 

     mapView.addOverlay(circle) 
    } 
    // check if can monitor region 
     else{ 

      print("system can't track regions") 



      } 
} 
+0

Haben Sie implementiert 'mapView (mapView: MKMapView, rendererForOverlay Overlay: MKOverlay)'? Außerdem haben Sie keinen Längen- oder Breitengrad für 'coordinate' angegeben. – Paulw11

+0

ja ich habe mapView implementiert (mapView: MKMapView, rendererForOverlay overlay: MKOverlay), aber annotation zeige gerade so wie soll ich jetzt einen Längen- und Breitengrad für Koordinaten angeben? –

+0

Sie haben in Ihrem Array 'tripspotRegion' drei Koordinaten definiert. Vielleicht könntest du eines davon als Zentrum benutzen? Sonst wird Ihre Region bei 0,0 – Paulw11

Antwort

1

Sie haben drei Koordinaten in ein Array eingegeben, aber dann machen Sie nichts mit ihnen. Sie erstellen ein neues coordinate, initialisieren es aber nicht, sodass Ihre Region und Ihr Overlay auf (0,0) liegen. Ich denke, dass Sie die tripspotArray verwenden soll, um die Regionen/Overlays hinzufügen:

func setupData(){ 
    if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion.self) { 

     let tripspotRegion = [ 
      tripSpot(title: "一中商圈", coordinate: CLLocationCoordinate2DMake(24.149062, 120.684891), regionRadius: 300.0, location: "台中一中", type: "food"), 
      tripSpot(title: "逢甲夜市", coordinate: CLLocationCoordinate2DMake(24.180407, 120.645086), regionRadius: 300.0, location:"台中逢甲", type: "food"), 
      tripSpot(title: "東海商圈", coordinate: CLLocationCoordinate2DMake(24.181143, 120.593158), regionRadius: 300.0, location: "東海商圈", type: "food")] 

     for aSpot in tripspotRegion { 
      //set annotation 
      let coordinate =aSpot.coordindate 
      let regionRadius = aSpot.regionRadius 
      let title = aSpot.title 
      let region = CLCircularRegion(center: coordinate, radius: regionRadius, identifier: title) 
//set annotation 
      let tripSpotAnnotation = MKPointAnnotation() 

      tripSpotAnnotation.coordinate = coordinate 
      tripSpotAnnotation.title = title 
      mapView.addAnnotations([tripSpotAnnotation]) 
      locationManager.startMonitoringForRegion(region) 
// draw a circle 
      let circle = MKCircle(centerCoordinate: coordinate, radius: regionRadius) 
      mapView.addOverlay(circle) 
     } 
    } else{ 
     print("system can't track regions") 
    } 
} 
+0

Wow! vielen herzlichen Dank! das ist genau das, was ich will! wichtiger ist mir jetzt das Hauptideal davon. Schätzen ! –