ios - 当我点击 MapKit 中的图钉时如何执行操作? ios9, swift 2

标签 ios swift mapkit

我创建了一张 map ,上面布满了很多图钉,点击图钉会弹出默认的“气泡”,现在没问题。

我真正想做的是完全不弹出气泡,而是调用一个不同的函数。我的所有搜索结果都导致人们想要创建具有不同 View 的新自定义注释等,我只想调用一个函数,但我不确定我会尝试从哪里调用它。我是 ios 开发的新手,这看起来应该非常简单,但我发现通常情况并非如此。

最佳答案

首先,值得注意的是,标准 UX 是显示一个标注气泡,向用户显示足够的信息以确认这是预期的注释 View ,然后标注包括左和/或右附件 View (例如按钮标注的左侧和/或右侧),这样用户就可以使用该注释执行一些额外的任务。参见 Creating Callouts位置和 map 编程指南中。

Golden Gate Bridge

但是,如果您想在用户点击注释时立即执行其他操作,请设置您的注释 View ,以便 (a) 它没有标注;然后 (b) 实现 MKMapViewDelegate方法 didSelectAnnotationView当用户点击注释 View 时执行您想要的任何任务。


例如,假设您已经为 map View 指定了 delegate,您可以在 Swift 3/4 中执行类似以下操作:

private let reuseIdentifier = "MyIdentifier"

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation { return nil }

    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier) as? MKPinAnnotationView
    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
        annotationView?.tintColor = .green                // do whatever customization you want
        annotationView?.canShowCallout = false            // but turn off callout
    } else {
        annotationView?.annotation = annotation
    }

    return annotationView
}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    // do something
}

或者在 Swift 2 中:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation { return nil }

    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView
    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
        annotationView?.tintColor = UIColor.greenColor()  // do whatever customization you want
        annotationView?.canShowCallout = false            // but turn off callout
    } else {
        annotationView?.annotation = annotation
    }

    return annotationView
}

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
    // do something
}

关于ios - 当我点击 MapKit 中的图钉时如何执行操作? ios9, swift 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247220/

相关文章:

ios - 使用 swift 和 market 查找附近的酒吧

ios - MapKit 避开某些路线(高速公路、收费站等)

ios - 我遇到 TAP 付款问题

ios - 我的 phonegap 应用程序未安装 'iPad Air' 设备

ios - 将 DT 设置为 iOS5 的 ios7 上的应用程序崩溃( UIKeyAutomaticallyAdjustsScrollViewInsets -不是整数)

ios - Rx swift : Connect to Connectable Observable multipe times

swift - 扩展 SkShapeNode 以获取 n x m 矩阵中的矩形位置

python - Apple通过Python登录

ios - 我如何使用 prepare segue 和 tableview 单元格?

iphone - 我得到 : Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException' , 原因: 'Could not instantiate class named MKMapView'