2017-02-26 93 views
0

我現在正在進行一個項目,並被卡在最後一部分。我設計了一個包含20個自定義註釋的應用程序,供我們的婚禮客人使用,以查找附近的餐館,酒吧,咖啡廳等。有各種自定義註釋來標識每個位置。它還要求用戶當前的位置,以便他們可以找到附近的東西。我希望能夠點擊註釋並讓我們的朋友和家人能夠從他們的當前位置獲得路線到註釋。看起來最好的方法是在我的自定義點註釋中打開蘋果地圖應用程序以及我的緯度和經度座標。我的代碼雖然似乎並沒有打開地圖應用程序。我已經添加了一個正確的呼叫,我仔細查看了每一個新老問題,並且無法找到解決方案。任何意見將不勝感激,因爲這是我第一個真正的快速應用程序。以下是我目前的開放方向功能。提前感謝您的幫助或見解。打開方向func不能以編程方式打開蘋果地圖

func openDirections(_ address :String?) { 

    self.geocoder.geocodeAddressString(address!, completionHandler: { (placemarks :[CLPlacemark]?, error :NSError?) -> Void in 

     let placemark = placemarks![0] as CLPlacemark 

     let destinationPlacemark = MKPlacemark(coordinate: placemark.location!.coordinate, addressDictionary: placemark.addressDictionary as? [String:NSObject]) 

     let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: placemark.location!.coordinate, addressDictionary:nil)) 
     mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving]) 

     let startingMapItem = MKMapItem.forCurrentLocation() 
     let destinationMapItem = MKMapItem(placemark: destinationPlacemark) 

     let directionsRequest = MKDirectionsRequest() 
     directionsRequest.transportType = .automobile 
     directionsRequest.source = startingMapItem 
     directionsRequest.destination = destinationMapItem 

     let directions = MKDirections(request: directionsRequest) 

     directions.calculate(completionHandler: { (response :MKDirectionsResponse?, error :NSError?) -> Void in 

      let route = response!.routes[0] as MKRoute 

      if route.steps.count > 0 { 

       for step in route.steps { 

        print(step.instructions) 

       } 
      } 

      self.mapView!.add((route.polyline), level: MKOverlayLevel.aboveRoads) 
      } as! MKDirectionsHandler) 
     } as! CLGeocodeCompletionHandler) 
} 
+0

爲什麼要打開地圖應用程序?你有一個'MKMapView'的權利?您可以使用它並製作自定義註釋。您可以使用'CoreLocation'框架來獲取並更新當前用戶的位置。我想我不明白爲什麼你會想要強制用戶從你的應用程序去蘋果地圖應用程序,當它不是必要的。 – Pierce

+0

@Pierce我也會對這個選項感到滿意,但是在搜索到關於SO的多個教程/問題之後,我們很難弄清楚。我似乎無法找到一個很好的解決方案,在具有多個註釋的應用程序中執行此操作。任何有關解決這個問題的最佳方法的建議將不勝感激。 – Jacquedes

+0

你知道什麼是要學習的東西,並且比我在評論或回答中可以告訴你的方式要多得多。看看這個免費的教程。它應該覆蓋您可能需要的所有內容https://www.raywenderlich.com/136165/core-location-geofencing-tutorial – Pierce

回答

0

繼續前進,刪除您寫下的所有內容,並對如何編寫新的,更好,更清晰的函數進行一些研究。這是爲我工作,我希望它可以幫助別人。

func mapView(_ mapView: MKMapView, annotationView view:MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 

    let placemark = MKPlacemark(coordinate: view.annotation!.coordinate, addressDictionary: nil) 
    let mapItem = MKMapItem(placemark: placemark) 
    let launchOptions = [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeTransit] 
    self.title = title 
    mapItem.name = title 
    mapItem.openInMaps(launchOptions: launchOptions) 
}