2017-10-18 6 views
0

Donc j'utilise Swift 4 et j'aimerais qu'une épingle tombe, puis quand l'utilisateur touche la broche, je voudrais aussi qu'elle trouve le texte de cette position actuelle ... Quand je la lance, la broche tombe bien mais après que je ne peux pas taper sur la broche, n'ayant donc aucune interaction avec ce point marqué. Je devrais noter que j'utilise Mapbox.Swift: Comment faire une vue de titre personnalisée de l'endroit où la broche a été déposée?

import Foundation 
import UIKit 
import CoreLocation 
import Mapbox 
import MapKit 

class SecondViewController: UIViewController, CLLocationManagerDelegate, MGLMapViewDelegate { 

@IBOutlet var mapView: MGLMapView! 
     let manager = CLLocationManager() 

override func viewDidLoad() { 
      super.viewDidLoad() 
      manager.delegate = self 
      manager.desiredAccuracy = kCLLocationAccuracyBest 
      manager.requestWhenInUseAuthorization() 

     } 

     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 

} 
     @IBAction func markStuff(_ sender: Any) { 
} 
     @IBAction func refLocation(_ sender: Any) { 
       manager.startUpdatingLocation() 

} 

     func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
      let location = locations[0] 

      let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 

      mapView.setCenter(center, zoomLevel: 10, animated: true) 

      let annotation = MGLPointAnnotation() 

      annotation.coordinate = location.coordinate 

      annotation.title = "\(annotation.coordinate)" 

      self.mapView.addAnnotation(annotation) 

      manager.stopUpdatingLocation() 

    } 

} 
+0

Vous devez vérifier les méthodes de délégation de mapView. Commencez avec self.mapView.delegate = self. Normalement, vous devez utiliser la méthode didTapAtMarker et implémenter ce que vous voulez, il est probablement similaire avec MapBox – PoolHallJunkie

Répondre

0

Essayez cette méthode pour gérer prise sur la broche

func mapView(mapView: MGLMapView, tapOnCalloutForAnnotation annotation: MGLAnnotation) 
{ 

    // Do something here 
     print("Do Something here You Want) 
} 

Voir aussi la documentation MapBox https://www.mapbox.com/ios-sdk/api/3.0.0/Protocols/MGLMapViewDelegate.html#//api/name/mapView:tapOnCalloutForAnnotation

+0

Bonjour, merci de répondre mais j'ai une question où exactement j'implémenterais cela dans mon code? Désolé je suis un débutant chez Swift ... –

+0

placez cette méthode n'importe où dans votre classe ViewController il sera automatiquement appelé lorsque vous appuyez sur la broche. – Zee

1

Si vous souhaitez afficher le nom de l'emplacement dans un texte associé, vous devriez avoir -mapView:annotationCanShowCallout: retourner vrai.

func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { 
    return true 
} 

Ceci permet à l'annotation d'afficher une légende. Vous pouvez également accéder aux propriétés de cette annotation (telles que le titre ou le sous-titre) dans cette méthode. Vous pouvez trouver cet exemple utile: https://www.mapbox.com/ios-sdk/examples/marker/