2015-09-03 55 views
0

我正在製作一個在地圖上添加一個圖釘的應用程序,到目前爲止,它已經在用戶進行長按操作的位置添加了圖釘,但是我希望將其更改並添加到用戶位置,我不知道要做什麼改變,你能糾正我的代碼,使其工作? 謝謝你,我加了我下面的代碼:如何使用UILongPressGestureRecognizer在用戶位置添加PIN?

var uilpgr = UILongPressGestureRecognizer(target: self, action: "action:") 

    uilpgr.minimumPressDuration = 2.0 

    Map.addGestureRecognizer(uilpgr) 

} 

func action(gestureRecognizer:UIGestureRecognizer) { 

    if gestureRecognizer.state == UIGestureRecognizerState.Began { 

     var touchPoint = gestureRecognizer.locationInView(self.Map) 

     var newCoordinate = self.Map.convertPoint(touchPoint, toCoordinateFromView: self.Map) 

     var location = CLLocation(latitude: newCoordinate.latitude , longitude: newCoordinate.longitude) 

這是我使用的用戶位置代碼:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 

     var userLocation:CLLocation = locations[0] as! CLLocation 

     var latitude = userLocation.coordinate.latitude 
     var longitude = userLocation.coordinate.longitude 

     var coordinate = CLLocationCoordinate2DMake(latitude, longitude) 

     var latDelta:CLLocationDegrees = 0.01 
     var lonDelta:CLLocationDegrees = 0.01 

     var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 

     var region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span) 

     self.Map.setRegion(region, animated: true) 


    } 
+0

而不是在您的action()函數中添加觸摸的位置,只需更改它添加用戶位置的位置,如果它可通過self.Map.userLocation –

+0

感謝您的回答@JoshHamet您的意思是這樣嗎? var touchPoint = gestureRecognizer.self.Map.userLocation,如果是這樣,它說UILongPressGestureRecognizer沒有一個名爲「Map」的成員 –

回答

0

當你長按被觸發時,只需要加一個註釋對象,以你的地圖,是一個輕量級的模型對象,對應於您的pin會保存的數據。

let annotation = MKAnnotation(); 
annotation.title = "My location"; 
annotation.coordinate = self.Map.userLocation.location.coordinate; 
self.Map.addAnnotation(annotation); 

後添加註釋,請確保您註冊到您的地圖視圖的代表,它會要求你提供你添加的註釋的視圖。

func mapView(_ mapView: MKMapView!, 
    viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!{ 
    if(annotation is MKUserLocation){ 
     return nil; 
    } 
    let pinView = mapView.dequeueReusableAnnotationForIdentifier("MyIdentifier"); 
    let pinAnnotationView = MKPinAnnotationView(annotation,reuseIdentifier:"MyIdentifier"); 
    return pinAnnotationView; 
} 

我敢肯定,有一些語法問題,但希望你理解邏輯。爲用戶的位置創建一個註釋。這會觸發您映射視圖的協議方法,並在其中提供附註註釋視圖。

+0

感謝您的回答,但是我確實需要一個pin,因爲我正在用這些pin之後做一些事情 –

+0

check我的編輯,也許這是你想要的更多 –

+0

這是obj-c對不對?我使用迅速 –

相關問題