Как разместить нижнюю часть пользовательской аннотации на определенной координате в Mapbox iOS - PullRequest
0 голосов
/ 19 ноября 2018

Я использую iOS Mapbox SDK в своем приложении. Я изменил изображение для аннотации на пользовательское изображение (выглядит как маркер карты). Когда я добавляю аннотацию к определенной координате в виде карты, она будет добавлена, но центр моего пользовательского изображения аннотации (маркер) будет установлен на координате. Мне нужно изменить положение маркера, чтобы установить нижнюю часть маркера на координате. Я нашел способ, но я не знаю, есть ли лучший способ или нет? Я преобразовал координату в точку, затем изменил положение точки y, а затем преобразовал точку в новую координату.

func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? {
    let reuseIdentifier = "annotationImage"
    var annotationImage = mapView.dequeueReusableAnnotationImage(withIdentifier: reuseIdentifier)

    if annotationImage == nil {
        annotationImage = MGLAnnotationImage(image: UIImage(named: "Orange")!, reuseIdentifier: reuseIdentifier)
    }
    return annotationImage
}

func addDestinationMarker(coordinate: CLLocationCoordinate2D) {
    guard let mapView = mapView else { return }
    if let annotations = mapView.annotations {
        mapView.removeAnnotations(annotations)
    }
    var point = mapView.convert(coordinate, toPointTo: mapView)
    point.y -= markerImageView.frame.height / 2
    let newCoordinate = mapView.convert(point, toCoordinateFrom: mapView)
    let annotation = MGLPointAnnotation()
    annotation.coordinate = newCoordinate
    mapView.addAnnotation(annotation)
}

1 Ответ

0 голосов
/ 19 ноября 2018

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

// The anchor point of an annotation is currently always the center. To
// shift the anchor point to the bottom of the annotation, the image
// asset includes transparent bottom padding equal to the original image
// height.
//
// To make this padding non-interactive, we create another image object
// with a custom alignment rect that excludes the padding.

image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: image.size.height/2, right: 0))

Это означает, что вам нужногенерировать пин-изображения, которые в два раза больше, а нижняя половина прозрачная, но это не так уж и важно.

...