自定义MKAnnotationView的标注未显示

时间:2014-12-03 22:09:27

标签: ios objective-c swift map

我已经研究过这个问题,遗憾的是我没有得到任何针对这个问题的解决方案。

问题是:

我有一个自定义的MKAnnotationView,其中drawRect被覆盖。我无法使用image属性,因为我有一个名为dotColor的属性会影响注释视图的绘制。

代码:

class CustomAnnotationView: MKAnnotationView {

    var dotColor: UIColor!

    init(annotation: CustomAnnotation, color: UIColor) {
        super.init(annotation: annotation, reuseIdentifier: "CustomAnnotationView")

        self.annotation = annotation
        frame.size = CGSize(width: 20, height: 20)
        dotColor = color
        opaque = false
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func drawRect(rect: CGRect) {
        if annotation != nil && dotColor != nil {
            let context = UIGraphicsGetCurrentContext()

            let circleFrame = CGRectInset(rect, 2, 2)//Needs the inset to show the stroke completely

            CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
            CGContextSetStrokeColorWithColor(context, dotColor.CGColor)
            CGContextSetLineWidth(context, 3)

            CGContextFillEllipseInRect(context, circleFrame)
            CGContextStrokeEllipseInRect(context, circleFrame)
        }
    }

}

但是当我点击地图上的注释视图时,它并没有显示标注(我很确定MKAnnotation有标题。你可以查看这个主题的答案:{{3} })

1 个答案:

答案 0 :(得分:-1)

第一件事是colorDot = color所以,如果你想在mapview' viewForAnnotation函数中让你的标注显示。

以下是示例代码,您可以查看:

v = MKAnnotationView(annotation: annotation, reuseIdentifier: "here put your identifier") v!.canShowCallout = true

我不明白你想要改变什么?标注背景颜色或文字或其他东西?

更改标注中元素的正确方法是addSubview(以编程方式创建UIView或使用xib)

如果在标注中有许多无法访问的内容,添加内容的最佳方式不是框架。尝试先添加图层或UIImage添加您的资料