Смещение изображения MKAnnotation с пользовательским изображением булавки - PullRequest
49 голосов
/ 17 ноября 2011

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

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

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

.. fredrik

Ответы [ 4 ]

135 голосов
/ 17 ноября 2011

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

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

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

annView.centerOffset = CGPointMake(0, -imageHeight / 2);
43 голосов
/ 17 апреля 2014

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

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

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

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

17 голосов
/ 05 ноября 2014

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

MKAnnotationView centerOffset guide

1 голос
/ 06 марта 2017

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

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

Единственная проблема, о которой я могу подумать, заключается в том, что увеличится также площадь для этого штифта.

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

...