2016-09-29 2 views
0

일종의 방향/GPS 앱을 만들고 있으며 지금까지 모든 것이 쉽습니다.Swift 2.0에서 iOS 앱에 MKPolyLine이 표시되지 않습니다.

  • 은 내가 (물론 그들의 허가) 사용자의 위치를 ​​찾는 방법을 알아 냈어요
  • 나는 그들을

그러나 빠르고 쉬운 방법으로 목적지를 설정할 수 있도록 관리했습니다 , 나는 작은 문제에 부딪쳤다. 내가 원하는 것은 사용자가 화면에서 목적지를 선택하는 것입니다. 앱은 거기에 도착하는 가장 빠른 방법을 제공합니다.

class ViewController: UIViewController,MKMapViewDelegate,CLLocationManagerDelegate { 

    @IBOutlet var mapOfMaps: MKMapView! 
    let locationManager = CLLocationManager() 
    var center:CLLocationCoordinate2D! 
    var SourcePM:MKPlacemark! 
    let sourcePlacemark: MKPlacemark! = nil 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.startUpdatingLocation() 
     self.mapOfMaps.showsUserLocation = true 

     let sourceAnnotation = MKPointAnnotation() 

     if let location = locationManager.location { 
      sourceAnnotation.coordinate = location.coordinate 
     } 
     let longPress = UILongPressGestureRecognizer(target: self, action: #selector(CardioViewController.action(_:))) 
     longPress.minimumPressDuration = 1.0 
     mapOfMaps.addGestureRecognizer(longPress) 

     //directionRequest 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let location = locations.last 
     center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 
     let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.003, longitudeDelta: 0.003)) 
     self.mapOfMaps.setRegion(region, animated: true) 
     self.locationManager.stopUpdatingLocation() 
     SourcePM = MKPlacemark(coordinate: center, addressDictionary: nil) 
    } 
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     print("ERROr " + error.localizedDescription) 
    } 

    func action(gestureRecognizer:UIGestureRecognizer) { 
     let touchPoint = gestureRecognizer.locationInView(self.mapOfMaps) 
     let newCoord:CLLocationCoordinate2D = mapOfMaps.convertPoint(touchPoint, toCoordinateFromView: self.mapOfMaps) 

     let newAnotation = MKPointAnnotation() 
     newAnotation.coordinate = newCoord 
     newAnotation.title = "Your Destination" 
     mapOfMaps.addAnnotation(newAnotation) 
     let anotPM = MKPlacemark(coordinate: newAnotation.coordinate, addressDictionary: nil) 


     let source = MKMapItem(placemark: SourcePM) 
     let dstn = MKMapItem(placemark: anotPM) 

     let directionRequest = MKDirectionsRequest() 
     directionRequest.source = source 
     directionRequest.destination = dstn 
     directionRequest.transportType = .Automobile 

     // Calculate the direction 
     let directions = MKDirections(request: directionRequest) 

     // 8. 
     directions.calculateDirectionsWithCompletionHandler() { 
      (response, error) in 
      if(error == nil && response != nil) { 
       for route in response!.routes { 
        var r: MKRoute = route as! MKRoute 
        self.mapOfMaps.addOverlay(r.polyline, level: MKOverlayLevel.AboveRoads) 
       } 
      } 

      let route = response!.routes[0] 
      self.mapOfMaps.addOverlay((route.polyline), level: MKOverlayLevel.AboveLabels) 


      let rect = route.polyline.boundingMapRect 
      self.mapOfMaps.setRegion(MKCoordinateRegionForMapRect(rect), animated: true) 
     } 

    } 
    func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 
     let renderer = MKPolylineRenderer(overlay: overlay) 
     renderer.strokeColor = UIColor.orangeColor() 
     renderer.alpha = 1 
     renderer.lineWidth = 4.0 

     return renderer 
    } 
} 

하는 내 코드를 안내하는 데 도움 :

여기 내의 ViewController입니다. 내 사용자가지도에서 목적지를 길게 누르면 앱에서 주석을 추가하고 으로 경로를 지정해야합니다. 그러나 주석은지도에 추가되고지도는 두 위치 (사용자 위치 및 주석 위치)를 표시하도록 조정되지만 경로는 표시되지 않습니다.

답변

0

이것은 '이상적인'해결책이 아니지만, locationManager 기능이 동시에 작동 할 수 없다는 점에 유의해야합니다. 내가 밖으로 locationManager 기능 중 하나를 코멘트를 시도하고 완벽하게 다른 일을 보라.

관련 문제