2014-11-18 33 views
7

map aracılığıyla MKPointAnnotations biçiminde bir pime nasıl dokunabileceğimi söyleyebilir miyim?MKPointAnahtarlıklar hızlı bir şekilde dokunma olayını

Ben map üzerine pin tıklayın ve ben önceden var pin ait variables geri getirerek başka görünüme dönmek istiyorum

.

Swift da bu şeyi bana açıklayan var mı?

sayesinde koduyla

Düzenleme:

class ViewController: UIViewController, MKMapViewDelegate { 


@IBOutlet weak var mappa: MKMapView! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    var location : CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 44.648590, longitude: 10.918794) 

    let pinAnnotation = PinAnnotation() 
    pinAnnotation.setCoordinate(location) 

    self.mappa.addAnnotation(pinAnnotation) 

} 

class PinAnnotation : NSObject, MKAnnotation { 
    private var coord: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0, longitude: 0) 

    var coordinate: CLLocationCoordinate2D { 
     get { 
      return coord 
     } 
    } 

    var title: String = "test" 
    var subtitle: String = "test" 

    func setCoordinate(newCoordinate: CLLocationCoordinate2D) { 
     self.coord = newCoordinate 
    }   
} 

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
    if annotation is PinAnnotation { 
     let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin") 

     pinAnnotationView.pinColor = .Purple 
     pinAnnotationView.draggable = true 
     pinAnnotationView.canShowCallout = true 
     pinAnnotationView.animatesDrop = true 

     let deleteButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
     deleteButton.frame.size.width = 44 
     deleteButton.frame.size.height = 44 
     deleteButton.backgroundColor = UIColor.redColor() 
     deleteButton.setImage(UIImage(named: "trash"), forState: .Normal) 

     pinAnnotationView.leftCalloutAccessoryView = deleteButton 


     return pinAnnotationView 
    } 

    return nil 
} 

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { 
    if let annotation = view.annotation as? PinAnnotation { 
     self.mapView.removeAnnotation(annotation) 
    } 
} 
} 
+0

ek açıklamanın başlığı boşsa bunu vurduğunuzda, çizgisi göstermez. – Anna

+0

Ek açıklama ekledim ve yazılı bir metin, pop-up düzgün çıkıyor ama hiçbir şey yapmıyor .. neden biliyor musun? –

+0

Belki de harita görünümünün temsilci çıkışı bağlı/ayarlanmamış. – Anna

cevap

20

Çeşitli adımlar burada, gerekli olan başlangıç ​​için bazı kod parçacıkları bulunmaktadır.

Önce üzerinde çalışmak istediğiniz verileri içeren pin notunuz için özel bir sınıfa ihtiyacınız var.

import MapKit 
import Foundation 
import UIKit 

class PinAnnotation : NSObject, MKAnnotation { 
    private var coord: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0, longitude: 0) 

    var coordinate: CLLocationCoordinate2D { 
     get { 
      return coord 
     } 
    } 

    var title: String = "" 
    var subtitle: String = "" 

    func setCoordinate(newCoordinate: CLLocationCoordinate2D) { 
     self.coord = newCoordinate 
    }   
} 

Sonra MKMapViewDelegate protokole uyan sizin MKMapView için özel bir sınıf gerekir.

import MapKit 
import CLLocation 
import Foundation 
import UIKit 

class MapViewController: UIViewController, MKMapViewDelegate { 

    ... 

    func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
     if annotation is PinAnnotation { 
      let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin") 

      pinAnnotationView.pinColor = .Purple 
      pinAnnotationView.draggable = true 
      pinAnnotationView.canShowCallout = true 
      pinAnnotationView.animatesDrop = true 

      let deleteButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
      deleteButton.frame.size.width = 44 
      deleteButton.frame.size.height = 44 
      deleteButton.backgroundColor = UIColor.redColor() 
      deleteButton.setImage(UIImage(named: "trash"), forState: .Normal) 

      pinAnnotationView.leftCalloutAccessoryView = deleteButton 

      return pinAnnotationView 
     } 

     return nil 
    } 

    func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { 
     if let annotation = view.annotation as? PinAnnotation { 
      mapView.removeAnnotation(annotation) 
     } 
    } 

size böyle bir şey verir:

let pinAnnotation = PinAnnotation() 
pinAnnotation.setCoordinate(location) 

mapView.addAnnotation(pinAnnotation) 
+0

Merhaba, noktayı haritada septum olarak yüklemek için viewDidLoad? Haritayı pime eklemek için nasıl söyleyeceğimi anlayamıyorum. –

+0

Haritaya yeni bir pimin nasıl ekleneceğini göstermek için cevabımı düzenledim. – zisoft

+0

Sorumu kodumla düzenledim, şimdi haritadaki pini görüyorum, ancak hiçbir şeyi tıklatmazsa hiçbir araç ipucu görünmez, nasıl giderilirim? MapView işlevini çağırdığınızda –

3
:

enter image description here

kodunuzda Bunu biryere kullanın Haritaya yeni açıklama ekle orada yöntemini viewForAnnotation uygulayın

Greate work !!! AMA .. Sadece bunu geçmiş kopyalayın ve birkaç değişiklik eklemek zorunda kaldım. Sizlerle bu değişiklikleri paylaşacağım.

import MapKit 
import Foundation 
import UIKit 

class PinAnnotation : NSObject, MKAnnotation { 
private var coord: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0, longitude: 0) 
private var _title: String = String("") 
private var _subtitle: String = String("") 

var title: String? { 
    get { 
     return _title 
    } 
    set (value) { 
     self._title = value! 
    } 
} 

var subtitle: String? { 
    get { 
     return _subtitle 
    } 
    set (value) { 
     self._subtitle = value! 
    } 
} 

var coordinate: CLLocationCoordinate2D { 
    get { 
     return coord 
    } 
} 

func setCoordinate(newCoordinate: CLLocationCoordinate2D) { 
    self.coord = newCoordinate 
} 
} 

Ben yardımcı olacağını umuyoruz: D

İlgili konular