Добавление изображения в MKAnnotationView смещает булавку

Я пытаюсь сбросить несколько булавок, которые представляют автобусные остановки с изображением, когда я добавляю изображение, оно меняет положение булавки. Когда я не устанавливаю изображение, булавка падает в правильном месте.

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

    if annotation is StopAnnotation {

        let identifier = "stopAnnotation"
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
        if pinView == nil {
            //println("Pinview was nil")
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            pinView!.canShowCallout = true
            pinView.image = UIImage(named: "stopIcon")
        }
        return pinView

    }
    return nil
}

Примеры введите здесь описание изображениявведите здесь описание изображения

Изображение, которое я пытаюсь использовать: введите здесь описание изображения

Может ли кто-нибудь сказать мне, почему это делается? Я использую точно такое же изображение в своей версии этого приложения для Obj-C, и все работает нормально.


person Clip    schedule 12.09.2014    source источник


Ответы (1)


Код создает MKPinAnnotationView с пользовательским изображением.

Класс MKPinAnnotationView следует использовать только для отображения изображений контактов по умолчанию.

Чтобы показать пользовательское изображение, лучше использовать обычный MKAnnotationView.


Поскольку в коде используется MKPinAnnotationView, к изображению автоматически применяется смещение (свойство centerOffset).

Это встроенное смещение работает для изображений булавок по умолчанию, но не для вашего пользовательского изображения.

Вместо того, чтобы пытаться переопределить это поведение по умолчанию, используйте вместо этого простой MKAnnotationView:

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

    if annotation is StopAnnotation {

        let identifier = "stopAnnotation"
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
        if pinView == nil {
            //println("Pinview was nil")

            //Create a plain MKAnnotationView if using a custom image... 
            pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)

            pinView!.canShowCallout = true
            pinView.image = UIImage(named: "stopIcon")
        }
        else {
            //Unrelated to the image problem but...
            //Update the annotation reference if re-using a view...
            pinView.annotation = annotation
        }

        return pinView          
    }
    return nil
}
person Community    schedule 12.09.2014