2017-08-08 1 views
1

J'essaie de lancer la carte automatiquement lorsque l'écran se charge.lancer une fonction pour la carte sur le chargement de l'écran. iOS, Swift

Est-ce que cela peut être fait? Lancer cette fonction sur la vue a apparu.

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

Vous ne lanceriez pas * cette fonction *. Vous pouvez créer un élément de carte et l'ouvrir. Il serait étrange de le faire dans 'viewDidAppear' car l'expérience de l'utilisateur serait une nouvelle vue apparaissant et ensuite l'ouverture de l'application de cartes. Il serait plus judicieux d'ouvrir des cartes à partir du contrôleur de vue précédent. – Paulw11

Répondre

1

Essayez avec cette fonction, il vous suffit de passer les coordonnées et le nom lieu, cela fonctionne, je l'utiliser dans plusieurs projets

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) 
} 

Hope this helps

+1

Cela a fonctionné un charme @Reinier, Merci pour cela je pourrais implémenter ce contrôleur avant, sans avoir besoin de charger une nouvelle vue avec la carte dessus. Merci pour votre temps. –

+0

@TonyMerritt Vous n'avez besoin que d'un nom et d'une coordonnée, vous n'avez pas besoin de charger une carte ou même UIViewController, j'utilise ce code dans mon Singleton AppManager comme fonction statique comme vous pouvez le voir et fonctionne parfaitement –

+1

Oui que ce que je cherchais Il était difficile d'aller à un autre contrôleur pour charger une vue de la carte et ensuite aller à des cartes de cela. de cette façon était parfait. –

0

une version alternative à l'aide Réponse @Reinier.

cela montre comment il a été implémenté dans une action le contrôleur de vue avant avec pas besoin d'aller au contrôleur suivant pour lancer en vue a chargé. Aussi comment j'ai obtenu les coordonnées d'un code postal

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!) 
    } 
} 
}