MKPointAnnotations在swift中触摸事件

时间:2014-11-18 10:02:27

标签: swift view mapkit mkpointannotation

我想知道是否有人可以告诉我如何以map的形式触及MKPointAnnotations上的图钉。

我想点击pin上的map,然后返回另一个视图,返回我预设的variables的{​​{1}}。

任何人都可以在pin解释我这件事吗?

感谢

使用代码编辑:

Swift

2 个答案:

答案 0 :(得分:20)

有几个步骤是必要的,这里有一些代码片段可以帮助您入门。

首先,您需要一个自定义类来固定您想要使用的数据。

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

然后,您需要符合MKMapView协议的MKMapViewDelegate自定义类。在那里实施方法viewForAnnotation

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

这给你这样的东西:

enter image description here

要在地图中添加新注释,请在代码中的某处使用:

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

mapView.addAnnotation(pinAnnotation)

答案 1 :(得分:4)

致力于工作!但.. 我只是复制过去,我不得不添加一些更改。我将与你们分享这些变化。

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

我希望它会有所帮助:D