2017-08-08 43 views
1

我試圖在屏幕加載時自動啓動地圖。在屏幕加載時啓動地圖功能。 iOS,Swift

可以這樣做嗎?在視圖確實出現時啓動此功能。

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

    if let anno = view.annotation { 
     let place = MKPlacemark(coordinate: anno.coordinate) 
     let destination = MKMapItem(placemark: place) 
     destination.name = "Vehicle Sighting" 
     let regionDistance: CLLocationDistance = 1000 
     let regionSpan = MKCoordinateRegionMakeWithDistance(anno.coordinate, regionDistance, regionDistance) 

     let options = [MKLaunchOptionsMapCenterKey: NSValue (mkCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span), MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving] as [String : Any] 

     MKMapItem.openMaps(with: [destination], launchOptions: options) 
    } 
} 
+0

您不會啓動*該功能*。你可以創建一個地圖項並打開它。在'viewDidAppear'中執行會很奇怪,因爲用戶體驗會出現一個新的視圖,然後地圖應用程序打開。從前一個視圖控制器打開地圖會更明智。 – Paulw11

回答

1

嘗試使用此功能,您只需要通過座標和地名,這個工作,我在幾個項目中使用這個

static func openMapsAppWithLocation(coordinates:CLLocationCoordinate2D,placeName:String) 
{ 
    let regionDistance:CLLocationDistance = 10000 
    let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) 
    let options = [ 
     MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), 
     MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span) 
    ] 
    let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) 
    let mapItem = MKMapItem(placemark: placemark) 
    mapItem.name = placeName 
    mapItem.openInMaps(launchOptions: options) 
} 

希望這會使用幫助

+1

這工作的魅力@Reinier,謝謝你,我可以實現這個int eh控制器之前,無需加載一個新的視圖與地圖上。感謝您的時間。 –

+0

@TonyMerritt你只需要一個名稱和一個座標,你不需要加載地圖,甚至UIViewController,我在我的AppManager單例中使用這個代碼作爲靜態函數,你可以看到並且工作得很完美 –

+1

是的這是一個更好的結果比我所尋找的要麻煩的是去另一個控制器加載地圖視圖,然後從那裏去地圖。這種方式是完美的。 –

0

的替代版本@Reinier回答。

這顯示了它如何實現到視圖控制器的操作之前,無需轉到下一個控制器以在視圖中啓動執行加載。另外我如何從郵政編碼獲得座標

var addressCode = [[String: Double]]() 


@IBAction func onMapPressed(_ sender: Any) { 

    let address = postCode 
     let geocoder = CLGeocoder() 
     geocoder.geocodeAddressString(address) { 
      placemarks, error in 
      let placemark = placemarks?.first 
      let lat = placemark?.location?.coordinate.latitude 
      let lon = placemark?.location?.coordinate.longitude 
      //   let locationTitle = self.places] 
      let latLon = ["latitude":lat!, "longitude": lon!] 
      self.addressCode.append(latLon) 

      for location in self.addressCode { 
       let annotation = MKPointAnnotation() 
       annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"]!, longitude: location["longitude"]!) 


       self.openMapsAppWithLocation(coordinates: annotation.coordinate, placeName: self.makeLabel.text!) 
    } 
} 
}