Как пометить маркеры карты в Google Maps iOS

У меня есть несколько маркеров на карте, и каждый из них представляет путь с другой темой. Я хочу, чтобы пользователь мог видеть каждую из тем перед выбором маркера, поэтому я планировал добавить простую текстовую метку над каждой из них. Похоже, это не встроенная функция в картах Google для iOS. Есть ли способ обойти это?


person CSStudent    schedule 04.04.2013    source источник


Ответы (2)


Настройте UILabel, настройте его, отрендерите в UIImage и установите в качестве значка маркера.

//setup label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 20)];
label.text = @"test";
label.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.5];

//grab it
UIGraphicsBeginImageContextWithOptions(label.bounds.size, NO, [[UIScreen mainScreen] scale]);
[label.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * icon = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//prepare options
GMSMarkerOptions *options = [GMSMarkerOptions options];
options.position = CLLocationCoordinate2DMake(latitude, longitude);
options.title = [NSString stringWithFormat:@"#%d", count_];
options.icon = icon;
person Daij-Djan    schedule 04.04.2013
comment
если вам нужна метка и булавка, сделайте их одним изображением, вы можете захватить любой вид, который вам нравится - person Daij-Djan; 04.04.2013
comment
Вау, спасибо за полный ответ, попробую прямо сейчас. Я думал об этом, но я не знал, что renderInContext был вариантом - person CSStudent; 05.04.2013
comment
Только что попробовал, работает отлично, хотя я добавил [label sizeToFit]; сразу после строки, где вы устанавливаете текст для проверки - person CSStudent; 05.04.2013
comment
Это здорово! Спасибо. Плохо только то, что с большим количеством маркеров (например, 300 маркеров) он тормозит. - person Jorge Wander Santana Ureña; 11.10.2016
comment
ну.. они действительно разные? и на карте одновременно? Я использую его в сочетании с кешем и могу обрабатывать 1000 маркеров. - person Daij-Djan; 11.10.2016

Я новичок в быстрой работе, но мне удалось преобразовать ответ Дайджа-Джана:

let label = UILabel()
label.frame = CGRect(x:0, y:0, width: 50, height: 20)
label.text = "test"
label.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5)
label.textColor = UIColor.whiteColor()
label.adjustsFontSizeToFitWidth = true
UIGraphicsBeginImageContextWithOptions(label.frame.size, false, UIScreen.mainScreen().scale)
if let currentContext = UIGraphicsGetCurrentContext()
{
    label.layer.renderInContext(currentContext)
    let imageMarker = UIImage()
    imageMarker = UIGraphicsGetImageFromCurrentImageContext()
    let marker = GMSMarker(position: CLLocationCoordinate2DMake(lat, long))
    marker.icon = imageMarker
    marker.map = mapView
}
UIGraphicsEndImageContext()
person jordan314    schedule 04.03.2016