Подтвердить что ты не робот

Смещение изображения MKAnnotation с пользовательским изображением

У меня есть MKAnnotation с пользовательским пин-изображением. Однако штырь (MKAnnotationView) центрирует изображение относительно заданной координаты. Я хочу установить точку координаты в нижней части изображения, а не в центре.

Я пробовал использовать annView.centerOffset = CGPointMake(-12, -28);. Но проблема в том, что centerOffset не имеет отношения к уровню масштабирования карт.

Это можно сделать как в JS API, так и в Android. Есть ли возможность сделать это в objective-c?

.. Фредрик

4b9b3361

Ответ 1

Ваш UIAnnotationView всегда рисуется в том же масштабе, уровень масштабирования карты не имеет значения. Поэтому centerOffset не связан с уровнем масштабирования.

annView.centerOffset - это то, что вам нужно. Если вы видите, что ваш контакт не находится в хорошем месте (например, нижний центр немного перемещается, когда вы изменяете уровень масштабирования), это потому, что вы не установили правильное значение centerOffset.

Кстати, если вы хотите установить точку координаты в нижнем центре изображения, координата x вашего centerOffset должна быть 0.0f, поскольку annotationView центрирует изображение по умолчанию. Поэтому попробуйте:

annView.centerOffset = CGPointMake(0, -imageHeight / 2);

Ответ 2

Настройка centerOffset часто перемещает изображение вокруг, когда пользователь поворачивает или масштабирует карту, поскольку опорная точка по-прежнему установлена ​​в центре изображения вместо его нижнего центра.

Вы можете установить опорную точку аннотации в нижний центр пользовательского изображения следующим образом:

yourAnnotation.layer.anchorPoint = CGPointMake(0.5f, 1.0f);

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

Ответ 3

Вы можете использовать это руководство для определения смещения центра.

MKAnnotationView centerOffset guide

Ответ 4

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

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

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

Надеюсь, это поможет!