2017-07-21 48 views
0

我无法弄清楚如何使用用户输入从提示询问半径来创建我正在创建的圆。我从另一个类继承userMapView,但不对该类中的overlay渲染做任何事情,所以直到现在我才使用rendererForOverlay函数。我是否需要在父类中添加该函数,还是我不正确地执行其他操作?在地图上画一个圆圈不会出现

@IBAction func addGeoFencePushed(_ sender: Any) { 
    let alertController = UIAlertController(title: nil, message: "How large would you like the geofence to be?", preferredStyle: .alert) 
    let confirmAction = UIAlertAction(title: "Confirm", style: .default) { (_) in 
     if let field = alertController.textFields?[0] { 
      // store your data 
      ALGlobal.sharedInstance.globalDefaults.set(field.text! as String, forKey: "geoFenceSize") 
      let rad = field.text! 
      self.drawGeoFence(radius: rad) 
     } else { 
      // user did not fill field 
     } 
    } 
    self.present(alertController, animated: true, completion: nil) 
} 

func drawGeoFence(radius: String){ 
    let bagList = ALGlobal.sharedInstance.bagLists 
    let bag = bagList?[0] 
    let center = CLLocationCoordinate2D(
     latitude: CLLocationDegrees.init(bag!.latitude), 
     longitude: CLLocationDegrees.init(bag!.longitude)) 
    let circle = MKCircle(center: center, radius: Double(radius)!) 

    userMapView.add(circle) 
} 

func mapView(mapView: MKMapView,rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 

    let circleRenderer = MKCircleRenderer(overlay: overlay) 
    circleRenderer.fillColor = UIColor.blue.withAlphaComponent(0.1) 
    circleRenderer.strokeColor = UIColor.blue 
    circleRenderer.lineWidth = 1 
    return circleRenderer 
} 

回答

1

您的渲染器函数未被调用,因为它具有错误的签名。在斯威夫特3,正确的签名是

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 

你也需要确保self是地图视图的委托。

+0

我很惊讶你没有得到编译器的警告。 – matt