MKPointAnnotation как скрыть изображение маркера

У меня есть MKPointAnnotation, который я настроил, и он отображается там, где я хотел бы, однако он поставляется с большим красным значком булавки по умолчанию над точкой, и я хотел бы скрыть это изображение и вместо этого ничего не отображать. Я попытался работать с разделом, который я прокомментировал ниже, с помощью «*****», и я подумал, что может сработать установка view.image=nil, и это ничего не изменило, и я также попробовал view.frame.size=CGSize(width: 0, height: 0), что не дало никакого эффекта. Любые другие предложения о том, как это сделать?

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

      let annotation = annotation

      let identifier = "marker"
      var view: MKMarkerAnnotationView


      if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
        as? MKMarkerAnnotationView {
        dequeuedView.annotation = annotation
        view = dequeuedView
      } else {
        //************************
        view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        view.frame.size=CGSize(width: 0, height: 0)
        view.canShowCallout = true
        view.calloutOffset = CGPoint(x: -5, y: 5)
        view.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)



      }
      return view
    }

person ez4nick    schedule 15.10.2019    source источник


Ответы (2)


Вот документация Apple по этому вопросу:

https://developer.apple.com/documentation/mapkit/mapkit_annotations/annotating_a_map_with_custom_data

Кажется, они рекомендуют кодировать пользовательскую аннотацию, как показано:

class SanFranciscoAnnotation: NSObject, MKAnnotation {

// This property must be key-value observable, which the `@objc dynamic` attributes provide.
@objc dynamic var coordinate = CLLocationCoordinate2D(latitude: 37.779_379, longitude: -122.418_433)

// Required if you set the annotation view's `canShowCallout` property to `true`
var title: String? = NSLocalizedString("SAN_FRANCISCO_TITLE", comment: "SF annotation")

// This property defined by `MKAnnotation` is not required.
var subtitle: String? = NSLocalizedString("SAN_FRANCISCO_SUBTITLE", comment: "SF annotation") }

Вы можете попробовать создать пользовательскую аннотацию таким образом, используя чистый цвет или размер (0,0). Назначьте свой вид пользовательской аннотации, которую вы кодируете.

var view: SanFranciscoAnnotation

Если это не сработает, я откопаю старый код из написанного мной приложения с пользовательскими аннотациями и поделюсь им.

person ekrenzin    schedule 15.10.2019
comment
Спасибо за предложения, я начал с этого, и, поиграв с ним, я на самом деле нашел гораздо более простое решение. все, что мне действительно нужно было сделать, это установить markerTintColor на любой цвет с альфа-значением 0, и это помогло. - person ez4nick; 16.10.2019
comment
Потрясающая находка! Я собираюсь добавить ваше решение в свой комментарий. Извините, мой ответ не сработал для вас! Неважно, я вижу, вы сами опубликовали ответ, поэтому я воздержусь от его добавления ~ - person ekrenzin; 16.10.2019

Это было на самом деле проще решить, чем я ожидал, все, что мне нужно было сделать, это установить markerTintColor на цвет с альфой 0.

view.markerTintColor=UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0,alpha:0.5).withAlphaComponent(0)

это то, что решило это для меня в этом случае.

person ez4nick    schedule 15.10.2019