隐藏地图图钉注释图像

时间:2016-07-10 01:43:51

标签: swift annotations mkmapview mkpinannotationview

我正在创建一个地图应用程序,它允许将emojis附加到位置。目前,图像显示在股票苹果地图注释上方。

我希望隐藏库存图片图像,同时仍然显示用户选择的表情符号。这可能吗?

enter image description here

到目前为止我有这个代码来执行此操作:

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

    //let identifier = "MyPin"

    if annotation.isKindOfClass(MKUserLocation) {
        return nil
    }

    let dictName = arrLocation[((annotation as? MyAnnotation)?.index)!]
    let imgName = dictName.valueForKey("pin_img") as? String
    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(imgName!)
    if annotationView == nil
    {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: imgName)
        annotationView!.canShowCallout = false
        let name = dictName.valueForKey("name") as! String
        let annot = MyAnnotation(titleName:name)
        annotationView?.annotation = annot

    }
    else
    {
        annotationView!.annotation = annotation
    }

    let detailButton: UIButton = UIButton(type: UIButtonType.Custom)
    // size and placement of emoji on map
    detailButton.frame = CGRectMake(-34,-25,85,85)
    detailButton.tag = ((annotation as? MyAnnotation)?.index)!
    detailButton.addTarget(self, action:"emojiTap:", forControlEvents: UIControlEvents.TouchUpInside)
    detailButton.setBackgroundImage(UIImage(named:(dictName.valueForKey("pin_img") as? String)!), forState: UIControlState.Normal)
    annotationView!.addSubview(detailButton)

    return annotationView
}

1 个答案:

答案 0 :(得分:0)

自定义注释视图

不使用MKPinAnnotationView,而是使用其超类MKAnnotationView

回应输入

要响应用户点击注释,请执行mapView:didSelectAnnotation:委托方法。点击注释时会调用此委托方法。

请注意,您无需使用注释视图中的按钮。这意味着emojiTap:中的功能必须由mapView:didSelectAnnotationMethod:实现。

实施例

结合这些

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

    if annotation.isKindOfClass(MKUserLocation) {
        return nil
    }

    let dictName = arrLocation[((annotation as? MyAnnotation)?.index)!]
    let imgName = dictName.valueForKey("pin_img") as? String
    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(imgName!)

    if annotationView == nil
    {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: imgName)
        let name = dictName.valueForKey("name") as! String
        let annot = MyAnnotation(titleName:name)
        annotationView?.annotation = annot    
    }
    else
    {
        annotationView!.annotation = annotation
    }

    annotationView!.canShowCallout = false

    return annotationView
}

func mapView(_ mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {

    guard let annotation = view.annotation as? MyAnnotation else {
        return
    }

    print("tapped annotation: \(annotation.index)

    // Implement the code from emojiTap: here.
}