gpt4 book ai didi

ios - 如何检测在 MapView 中选择了哪个注释

转载 作者:IT王子 更新时间:2023-10-29 05:41:15 25 4
gpt4 key购买 nike

我在 map 中做了一些注释,当我点击它们时,我看到了一些信息,我有一个按钮可以打开 map ,并带有我无法接受的正确信息,它应该会给我画出我的路线。

这是我的代码:

我的纬度和经度有 2 个 double 组,我从查询中填充了它们。

 var lat = [Double]()
var lon = [Double]()

这些行用于填充注释

self.annot = Islands(title: object["name"] as! String, subtitle: object["address"] as! String,  coordinate: CLLocationCoordinate2D(latitude: (position?.latitude)!, longitude: (position?.longitude)!), info: object["address"] as! String)

self.map.addAnnotations([self.annot])

这是创建注解的地方:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

let identifier = "pin"

if annotation.isKindOfClass(MKUserLocation) {
return nil
}

let image = UIImage(named: "car")
let button = UIButton(type: .Custom)
button.frame = CGRectMake(0, 0, 30, 30)
button.setImage(image, forState: .Normal)
button.addTarget(self, action: #selector(Map.info(_:)), forControlEvents:UIControlEvents.TouchUpInside)

var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
annotationView!.canShowCallout = true
annotationView!.image = UIImage(named: "annotation")
annotationView!.rightCalloutAccessoryView = button

}
else {
annotationView!.annotation = annotation
}

return annotationView

}

最后这是按钮的功能,我应该在其中传递正确的信息(以及问题出在哪里)

   func info(sender: UIButton)
{

let latitute:CLLocationDegrees = lat[sender.tag]
let longitute:CLLocationDegrees = lon[sender.tag]

let regionDistance:CLLocationDistance = 10000
let coordinates = CLLocationCoordinate2DMake(latitute, longitute)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [
MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center),
MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span)
]
let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = name[sender.tag]
print(sender.tag)
mapItem.openInMapsWithLaunchOptions(options)
}

如您所见,我尝试使用发件人标签但没有成功。

编辑:我的自定义注释类

class Islands: NSObject, MKAnnotation {

var title: String?
var addr: String?
var coordinate: CLLocationCoordinate2D
var info: String?
var subtitle: String?

init(title: String, subtitle: String, coordinate: CLLocationCoordinate2D, info: String) {
self.title = title
self.coordinate = coordinate
self.info = info
self.subtitle = subtitle

}

}

最佳答案

为此,您可以使用从 didSelectAnnotationView 中选择的 Annotation,然后将该注释存储到实例变量,然后在您的 Button 操作中使用注释方法。

var selectedAnnotation: MKPointAnnotation?

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
self.selectedAnnotation = view.annotation as? MKPointAnnotation
}

func info(sender: UIButton) {
print(selectedAnnotation?.coordinate)
}

编辑:因为您有自定义的 MKAnnotation 类,所以您需要使用它。

var selectedAnnotation: Islands?

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
self.selectedAnnotation = view.annotation as? Islands
}

关于ios - 如何检测在 MapView 中选择了哪个注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com