Скрыть и показать аннотацию MapBox Просмотр изображений на основе уровня масштабирования - PullRequest
0 голосов
/ 04 сентября 2018

MapBox MglMapView

Как скрыть и отобразить аннотации MapBox, основанные на уровнях масштабирования

-> я использую MkMapView MkAnnotationView Скрыть и показать нормально работает

-> Но используя MapBox Скрыть и показать Не работает
-> Слушай, я пишу этот код для mapKit Работает

  func mapView(_ mapView: MGLMapView, regionDidChangeAnimated animated: Bool) {


  let mglVisiableAnnArray = self.mglMap.visibleAnnotations

                        if mglVisiableAnnArray != nil {

                            for annotation in mglVisiableAnnArray!
                            {
                                if self.mglMap.zoomLevel < 12.5
                                {
                                    self.mglMap.view(for:annotation)?.isHidden = true

                                }else{
                            self.mglMap.view(for:annotation)?.isHidden = false

                                }
                            }
                        }
}

Пожалуйста, помогите мне, как скрыть и показать MapBoxAnnotationView на основе уровня масштабирования MapBox Спасибо @ mannaiah

1 Ответ

0 голосов
/ 25 марта 2019

Вы можете попробовать добавить MGLPointAnnotations к источнику Shape, который добавит все ваши аннотации на карту.

var myAnnotations = [your annotations...]

private func configureSource(style: MGLStyle) -> MGLShapeSource {
    var annotations = [MyCustomAnnotation]()
    for annotation in self.myAnnotations {
      if let myAnnotation = annotation as? MyCustomAnnotation {
        annotations.append(myAnnotation)
        let imageName = myAnnotation.annotationImageName
        if let image = UIImage(named: imageName) {
          style.setImage(image, forName: imageName)
        }
      }
    }

    return MGLShapeSource(identifier: "myAnnotations", features: annotations, options: nil)
  }
func configureSymbolLayer(source: MGLShapeSource) -> MGLSymbolStyleLayer {
  let symbols = MGLSymbolStyleLayer(identifier: "identifier", source: source)
  symbols.iconImageName = NSExpression(forKeyPath: "annotationImageName")

  if self.mapBoxView.zoomLevel < zoomThreshold {
    symbols.iconOpacity = NSExpression(forConstantValue: "0.0")
  } else {
    symbols.iconOpacity = NSExpression(forConstantValue: "1.0")
  }

  return symbols
}

Затем необходимо добавить источник и стиль в методе делегата didFinishLoading style.

func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
  guard let style = mapView.style else { return }

  let source = configureSource(style: style)
  style.addSource(source)
  style.addLayer(configureSymbolLayer(source: source))
}
Функция стиля перезагрузки

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...