yandex / mapkit-ios-demo

MapKit iOS demo
Other
84 stars 27 forks source link

Z - Index Placemark's text #224

Closed esplusnin closed 8 months ago

esplusnin commented 9 months ago

Подскажите как я могу решить проблему с позиционированием текста, который относится к плейсмарку. Сейчас, если несколько марок находятся рядом, то их текст наслаивается друг на друга.

Снимок экрана 2024-03-07 в 11 10 15

Z-index самого плейсмарка вопрос не решает. Кластеризация в данном случае мне тоже не подходит, потому что необходимо отобразить маршрут с достаточно высокой плотностью точек

YandexMapKit commented 8 months ago

Уточните, пожалуйста, чем именно вам не подходит работа с Z-index. Аналогичная ситуация в issue #357 была решена именно так.

Если по какой-то причине у вас такая схема не работает, пожалуйста, пришлите нам минимальный рабочий пример вашего кода. Вы можете выложить его проектом на GitHub, прикрепить к переписке в архиве или загрузить на Яндекс Диск и указать ссылку.

esplusnin commented 8 months ago

Уточните, пожалуйста, чем именно вам не подходит работа с Z-index. Аналогичная ситуация в issue #357 была решена именно так.

Если по какой-то причине у вас такая схема не работает, пожалуйста, пришлите нам минимальный рабочий пример вашего кода. Вы можете выложить его проектом на GitHub, прикрепить к переписке в архиве или загрузить на Яндекс Диск и указать ссылку.

Z - index позволяет позиционировать сами метки, но не текст, который к ним относится. Допустим в этом примере я указываю индекс 1000 для первой метки и всё работает, да. Но при этом текст так же наслаивается друг на друг

`func addTourLocations() { guard let placemarkCollection else { return }

    locations.enumerated().forEach { (index, location) in
        let placemark = placemarkCollection.addPlacemark()
        placemark.geometry = YMKPoint(from: location)
        placemark.setIconWith(index == 0 ? Images.targetMapPoint.image : Images.restMapPoint.image)
        placemark.zIndex = index == 0 ? 1000 : 1
        placemark.userData = location
        placemark.addTapListener(with: mapObjectTapListenter)

        placemark.setTextWithText("\(index + 1)", style: {
            let style = YMKTextStyle()
            style.size = placemarkTextSize

            if index == 0 {
                style.placement = .top
                style.offset = index == 0 ? placemarkTextOffset : 0
            }

            return style
        }())
    }
}`
Снимок экрана 2024-03-11 в 10 26 35
YandexMapKit commented 8 months ago

Для ситуации как на скриншоте текст нужно встроить в картинку.

Технически мы отображаем сначала все иконки в соответствии с Z-index, далее все подписи в соответствии с Z-index. Перемешивать отображения не можем из соображений быстродействия.