2017-05-09 1 views
2

J'ai eu un problème avec les marqueurs de carte google, je veux mettre un marqueur sur le toucher mais je ne sais pas comment le gérer J'ai essayé un peu mais ça ne marche pas, rien ne se passe alors je touchez sur la carte. Il semble que quelque chose ne va pas avec pressrecognizer.Swift 3 google map ajouter des marqueurs au toucher

Mise à jour:

class MainMapController: UIViewController, CLLocationManagerDelegate { 

@IBOutlet weak var viewMap: GMSMapView! 
var makers: [GMSMarker] = [] 

var locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 


    initializeTheLocationManager() 
    self.viewMap.isMyLocationEnabled = true 
    let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress)) 
    self.viewMap.addGestureRecognizer(longPressRecognizer) 


} 

    func handleLongPress(recognizer: UILongPressGestureRecognizer) 
    { 
if (recognizer.state == UIGestureRecognizerState.began) 
{ 
    let longPressPoint = recognizer.location(in: self.viewMap); 
    let coordinate = viewMap.projection.coordinate(for: longPressPoint) 
    let marker = GMSMarker(position: coordinate) 
    marker.opacity = 0.6 
    marker.title = "Current Location" 
    marker.snippet = "" 
    marker.map = viewMap 
    makers.append(marker) 
    } 
    } 


func initializeTheLocationManager() 
{ 
    locationManager.delegate = self 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.startUpdatingLocation() 
} 


func locationManager(_ manager: CLLocationManager,  didUpdateLocations locations: [CLLocation]) { 

    var location = locationManager.location?.coordinate 

    cameraMoveToLocation(toLocation: location) 
    locationManager.stopUpdatingLocation()  
}  
func cameraMoveToLocation(toLocation: CLLocationCoordinate2D?) { 
    if toLocation != nil { 
     viewMap.camera = GMSCameraPosition.camera(withTarget: toLocation!, zoom: 15)   
    } 
    } 
+0

viewMap est un GMSMapView? –

+0

oui vous avez raison –

+0

J'ai essayé et rien ne se passe quand j'ai tapé sur la carte –

Répondre

5

Vous ne devez pas ajouter manuellement geste reconnaisseurs pour Google Maps, il gère les interactions qu'il est lui-même et a consacré les fonctions de délégué pour gérer des gestes communs.

Pour faire un appui long sur une GSMMapView assurez-vous que vous définissez le délégué

self.mapView.delegate = self 

puis câbler la fonction de délégué approprié

extension ViewController: GMSMapViewDelegate { 
    func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) { 
     // Custom logic here 
     let marker = GMSMarker() 
     marker.position = coordinate 
     marker.title = "I added this with a long tap" 
     marker.snippet = "" 
     marker.map = mapView 
    } 
} 

Le code ci-dessus ajouter un marqueur à l'emplacement Vous appuyez longuement sur, vous pouvez également ajouter un titre et un extrait comme vous pouvez le voir. la partie qui l'ajoute réellement à la carte est marker.map = mapView

+0

J'ai essayé d'ajouter ceci, mais quand je tapp sur la carte rien ne se passe. –

+0

vous faites un long robinet? J'ai un exemple de projet ici avec ce code et ça marche bien pour moi – Scriptable

+0

Oui je suis, et rien ne se passe, pourriez-vous me le montrer? –