Как показать представление информации наложения с двумя кнопками больше, когда я нажимаю на маркер на Google в iOS

Я пытаюсь показать пользовательский вид наложения из Карт Google через API Карт Google для iOS. Это наложение просмотра информации о содержании маркера и двух моих кнопок. Но я не могу найти никаких ссылок для этого. Мой желаемый вид наложения как изображение с ссылкой ниже:

http://i1121.photobucket.com/albums/l515/dungnlh_khtn07/NguoiMoCay/overlayinfoview_zps8110b7ed.jpg

Пожалуйста, дайте мне руководство для этого!

5 ответов

Решение

Лучший способ добиться этого - передать вашему GMSMapView собственное представление для ваших информационных окон через GMSMapViewDelegate. mapView:markerInfoWindow: метод.

Для этого установите себя в качестве делегата для вашего экземпляра GMSMapView, например так:

self.mapView.delegate = self;

Затем верните пользовательский UIView при запросе:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id<GMSMarker>)marker
{
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    customView.backgroundColor = [UIColor redColor];

    return customView;
}

Вы можете найти немного больше информации, заглянув в заголовок GMSMapView, в котором говорится:

/**
 * Called when a marker is about to become selected, and provides an optional
 * custom info window to use for that marker if this method returns a UIView.
 * If you change this view after this method is called, those changes will not
 * necessarily be reflected in the rendered version.
 *
 * The returned UIView must not have bounds greater than 500 points on either
 * dimension.  As there is only one info window shown at any time, the returned
 * view may be reused between other info windows.
 *
 * @return The custom info window for the specified marker, or nil for default
 */

Возможно, как официально упоминается в документации по Google Maps Android API, нижеприведенное ограничение, касающееся информационных окон, также применимо к Google Maps iOs SDK:

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

Таким образом, щелчок по любой части информационного окна вызовет только "didTapWindowOfMarker"

Хорошо, но кто-то может уточнить, как заставить UIButton на этом UIView реагировать на прикосновения? Как две кнопки на прикрепленном изображении Дунг Нгуен Ле Хоанг. Например, если я добавлю такую ​​кнопку:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id<GMSMarker>)marker
{
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    customView.backgroundColor = [UIColor redColor];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    [button setFrame:CGRectMake(0, 0, 30, 30)];

    [customView addSubview:button];

    return customView;
}

и, конечно, есть кнопка

- (void)buttonPressed
{
    NSLog(@"Hello");
}

это не называется. Если я добавил кнопку в качестве подпредставления к self.mapView, то она появляется в mapView, а не в InfoWindow и, конечно, реагирует на прикосновения. Я предполагаю, что это из-за некоторых неустановленных кадров, но не совсем понимаю. Может кто-нибудь уточнить, пожалуйста?

  • (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *) маркер

Вы можете отобразить AlertView или ActionSheet с двумя кнопками, когда пользователь нажимает на маркер InfoContents

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