2014-12-03 5 views
1

Я изучил эту проблему, к сожалению, у меня не было никаких решений, специфичных для проблемы.Выноска для пользовательского MKAnnotationView не отображается

Проблема такова:

У меня есть пользовательский MKAnnotationView с DrawRect преодолено. Я не могу использовать свойство изображения, потому что у меня есть это свойство, называемое 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 имеет название Вы можете проверить ответ этого потока.: "If the title is nil, the callout...")

+1

Если бы вы могли указать на некоторые ошибки, сделанные в коде, я был бы очень признателен. – Blip

+0

Установлен ли 'canShowCallout' в значение' true'? После 'opaque = false', попробуйте сделать' canShowCallout = true'. – Anna

+0

@ Анна Спасибо за ваш ответ, потому что это сработало! Вы сделали мой день. – Blip

ответ

-1

Первое, что нужно сделать colorDot = color, так что если вы хотите сделать вызывать выступление в mapview's viewForAnnotation функции.

Ниже приведен пример кода, вы можете проверить:

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

Я не понимаю, что вы хотите изменить именно? Цвет фона текста или текст или что-то еще?

Правильный способ изменить элемент в условном обозначении является addSubview (либо создания UIView программно или с помощью XIB)

Если у вас есть много недоступных вещей в условном обозначении, лучший способ, чтобы добавить что-то не с рамкой. Попробуйте добавить слой сначала или UIImage со своими вещами