我想知道是否有人能告诉我如何以MKPointAnnotations的形式触摸地图上的图钉.
我想点击地图上的图钉并通过返回我预设的图钉的变量转到另一个视图.
任何人都可以在Swift中解释我这件事吗?
谢谢
使用代码编辑:
- 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)
- }
- }
- }
有几个步骤是必要的,这里有一些代码片段可以帮助您入门.
首先,您需要一个自定义类用于您的引脚注释,它包含您要使用的数据.
- import MapKit
- import Foundation
- import UIKit
- class PinAnnotation : NSObject,longitude: 0)
- var coordinate: CLLocationCoordinate2D {
- get {
- return coord
- }
- }
- var title: String = ""
- var subtitle: String = ""
- func setCoordinate(newCoordinate: CLLocationCoordinate2D) {
- self.coord = newCoordinate
- }
- }
然后你需要一个符合MKMapViewDelegate协议的MKMapView自定义类.在那里实现方法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!,calloutAccessoryControlTapped control: UIControl!) {
- if let annotation = view.annotation as? PinAnnotation {
- mapView.removeAnnotation(annotation)
- }
- }
这给你这样的东西:
- let pinAnnotation = PinAnnotation()
- pinAnnotation.setCoordinate(location)
- mapView.addAnnotation(pinAnnotation)