如何使整个MKPinAnnotationView可以兼容,而不仅仅是正确的附件视图

时间:2016-07-26 11:57:03

标签: ios swift mapkit

以下MKMapViewDelegate的方法:

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

    let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
    pinAnnotationView.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
    pinAnnotationView.canShowCallout = true

    return pinAnnotationView
}

如果我像上面那样做,那么整个视图都可以点亮:

enter image description here

否则:

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

        let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
        let accessoryView = UIButton(frame: CGRectMake(0, 0, 25, 25))
        accessoryView.setImage(UIImage(named: "icon-menu"), forState: .Normal)

        pinAnnotationView.rightCalloutAccessoryView = accessoryView
        pinAnnotationView.canShowCallout = false

        return pinAnnotationView
}

只有右侧附件视图被点击,为什么?

  

问题是。怎样做才能使整个MKPinAnnotationView整合-match而不仅仅是正确的披露?

1 个答案:

答案 0 :(得分:3)

我仍在搜索为什么它适用于第一个代码块中的完整标注视图但不适用于第二个代码块。

我找到了如何使整个MKPinAnnotationView标注视图可以应用的答案。

基本上我们可以通过两种方法实现这一目标。

<强> 1。使用常规方法。

这里我使用的是 rightCalloutAccessoryView 的图片,但在声明按钮时发生了一些小变化。

std::istringstream

在这里声明按钮时我指定为 DetailDisclosure 类型。

<强> 2。第二种方法是使用UITapGestureRecognizer

这里我实现了两个callout委托方法,如下所示。

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    let reuseIdentifier = "pin"
    var pin = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView
    if pin == nil {
        pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
        pin!.pinTintColor = UIColor.redColor()
        pin!.canShowCallout = true
        let button = UIButton(type: .DetailDisclosure)
        button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        button.setBackgroundImage(UIImage(named: "img.png"), forState: .Normal)
        pin!.rightCalloutAccessoryView = button
    } else {
        pin!.annotation = annotation
    }
    return pin
}