MKPointAnnotations 快速触摸事件
Posted
技术标签:
【中文标题】MKPointAnnotations 快速触摸事件【英文标题】:MKPointAnnotations touch event in swift 【发布时间】:2014-11-18 10:02:26 【问题描述】:我想知道是否有人可以告诉我如何以MKPointAnnotations
的形式触摸map
上的针。
我想点击map
上的pin
并通过带回我预设的pin
的variables
转到另一个视图。
任何人都可以在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)
【问题讨论】:
如果注解的标题为空白,点击时不会显示标注。 我添加了注释和一个书面文本,弹出窗口正常但什么也没做..你知道为什么吗? 也许地图视图的代理出口没有连接/设置。 我确认它已连接,最重要的是,我想知道我在哪里匹配 MapView 方法,是语言新手,如果你不调用,他无法理解他如何离开这个方法。 ..谢谢 【参考方案1】:需要几个步骤,这里有一些代码 sn-ps 可以帮助您入门。
首先,您需要一个自定义类来保存您要使用的数据。
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 coordinate: CLLocationCoordinate2D
get
return coord
func setCoordinate(newCoordinate: CLLocationCoordinate2D)
self.coord = newCoordinate
var title: String?
get
return _title
set (value)
self._title = value!
var subtitle: String?
get
return _subtitle
set (value)
self._subtitle = value!
那么您需要为您的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)
这给了你这样的东西:
要向地图添加新注释,请在代码中的某处使用:
let pinAnnotation = PinAnnotation()
pinAnnotation.setCoordinate(location)
mapView.addAnnotation(pinAnnotation)
【讨论】:
您好,在 viewDidLoad 中将地图上的点加载为隔膜?我不知道如何告诉地图添加图钉 我已经编辑了我的答案以显示如何向地图添加新图钉。 我用我的代码编辑了我的问题,现在我在地图上看到了图钉,但是如果我点击什么都不做,没有工具提示出现,我该如何解决? 它是自动调用的,因为它是一个委托函数。确保您的自定义类设置为地图视图的委托。 我将 MKMapView 的代理设置为指向我的 ViewController,我还扩展了该类,如您在上面的代码中所见。我还忘记了什么?该方法不会自动 MapView【参考方案2】:干得好!!!但.. 我只是复制过去,我必须添加一些更改。我将与你们分享这些变化。
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
【讨论】:
以上是关于MKPointAnnotations 快速触摸事件的主要内容,如果未能解决你的问题,请参考以下文章