Как показать представление информации наложения с двумя кнопками больше, когда я нажимаю на маркер на 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