点按活动时自定义信息框

时间:2016-08-07 18:12:44

标签: ios objective-c google-maps google-maps-sdk-ios

我试图在点击我的折线时出现一个与标记标准相同的信息框。点击该行时,我已经输出NSLog,但现在我需要显示信息框,而不是NSLog。我已经看过一些Javascript示例,但没有客观的例子。

- (void)loadView {

// Create a GMSCameraPosition
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:37.551927
                                                        longitude:-77.456292
                                                             zoom:18];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(37.551709, -77.456510);
mapView.settings.myLocationButton = YES;
mapView.myLocationEnabled = YES;
self.view = mapView;
mapView.delegate = self;

GMSMutablePath *path = [GMSMutablePath path];
[path addCoordinate:CLLocationCoordinate2DMake(37.552243, -77.457415)];
[path addCoordinate:CLLocationCoordinate2DMake(37.551054, -77.455443)];

GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];

UILabel *myLabel = [[UILabel alloc] init];

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self      action:@selector(labelTapped)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[myLabel addGestureRecognizer:tapGestureRecognizer];
 myLabel.userInteractionEnabled = YES;

polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor greenColor]]];
polyline.strokeWidth = 5.f;
polyline.tappable = true;
polyline.map = mapView;

}

- (void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay
{
    NSLog(@"in didTapOverlay");
}

@end

1 个答案:

答案 0 :(得分:0)

查看iOS地图教程中的Events指南。 这是Objective-C中的一个片段:

- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285
                                                          longitude:103.848
                                                               zoom:12];
  GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView.delegate = self;
  self.view = mapView;
}

#pragma mark - GMSMapViewDelegate

- (void)mapView:(GMSMapView *)mapView
    didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
  NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude);
}

这里有一个SO thread,展示GMSMapViewDelegate的使用:

1.符合GMSMapViewDelegate协议。

@interface YourViewController () <GMSMapViewDelegate>
// your properties
@end
2.set your mapView_ delegate.

mapView_.delegate = self;
3.implement the GMSMapViewDelegate method

- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
    // your code
}

添加:marker.userData非常有用。您可以将所需数据设置到其中,并在- mapView:didTapInfoWindowOfMarker:

中使用它