GMSMapView пользовательское изображение моего местоположения кнопки

Я хотел бы знать, возможно ли изменить мое изображение кнопки местоположения из GMSMapView на пользовательское изображение.

2 ответа

1) Знайте кнопку расположения кадра:

   for (UIView *object in self.mapView.subviews) {
    if([[[object class] description] isEqualToString:@"GMSUISettingsView"] )
    {
        for(UIView *view in object.subviews) {
            if([view.accessibilityIdentifier isEqual:@"my_location"] ) {

                frame = view.frame;

            }
        }

    }
   }

Используйте отладку, чтобы увидеть правильный кадр!!!

2) Не используйте self.mapView.settings.myLocationButton = YES;

3) Создайте собственную кнопку для этого кадра:

    UIButton *buttonLocation = [UIButton buttonWithType:UIButtonTypeRoundedRect];
buttonLocation.frame = CGRectMake([UIScreen mainScreen].bounds.size.width - 66, [UIScreen mainScreen].bounds.size.height - frame.size.height, frame.size.width, frame.size.height);
[buttonLocation addTarget:self
           action:@selector(bLocations:)
 forControlEvents:UIControlEventTouchUpInside];
[buttonLocation setImage:[[UIImage imageNamed:@"image.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];

[self.mapView addSubview:buttonLocation];

Следуя предыдущим ответам (используя метод получения ссылки UIButton из GMSMapView), вот обновленный ответ в Swift. Он заменяет значок "Мое местоположение" по умолчанию на ваше собственное изображение.

private func setupMyLocationButton() {
  let locationButton = mapView.subviews
    .filter { $0.description.contains("GMSUISettingsPaddingView") }
    .flatMap { $0.subviews }
    .flatMap { $0.subviews }
    .filter { $0.description.contains("GMSx_QTMButton") }
    .first
  let customImage = UIImage(imageLiteralResourceName: "yourCustomIconFilename")
  let myLocationButton = locationButton as? UIButton
  myLocationButton?.setImage(customImage, for: .normal)
}

Для этого вы можете получить ссылку UIButton на эту кнопку из GMSMapView. После этого вы просто используете стандартный [UIButton setImage:] для всех различных состояний. Я создал категорию для получения этой кнопки UIB из элемента управления GMSMapView:

https://github.com/trant/GMSMapView-Additions

Другие вопросы по тегам