【问题标题】:Tapping polyline does nothing - Google Maps IOS SDK点击折线没有任何作用 - Google Maps IOS SDK
【发布时间】:2026-01-23 09:35:01
【问题描述】:

阅读过类似的帖子并尝试了他们的解决方案,但对我没有任何效果。通过 XCode 6.x 在 IOS 模拟器上运行超级简单的 Google Maps SDK 1.9.x 示例,当我点击(好的,真的在模拟器中点击,这有什么不同吗?)没有任何记录,因为代码会让我相信它会,所以看起来 didTapOverlay 永远不会被调用。

#import "ViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@interface ViewController ()

@end

@implementation ViewController {
    GMSMapView *mapView_;

}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // Create a GMSCameraPosition that tells the map to display the
    // coordinate -33.86,151.20 at zoom level 6.
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:43.5157
                                                            longitude:-114.2933
                                                                 zoom:14];
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView_.myLocationEnabled = YES;
    mapView_.settings.compassButton = YES;
    mapView_.settings.myLocationButton = YES;


    GMSMutablePath *path2 = [GMSMutablePath path];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50618099,-114.34367)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50624301,-114.343572)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50635399,-114.343333)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50644602,-114.34312)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50655801,-114.342884)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50667996,-114.342642)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.506801,-114.342368)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50693896,-114.342054)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50707299,-114.341756)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50719796,-114.341476)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50731196,-114.341215)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.507419,-114.340978)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.50751396,-114.340759)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.507607,-114.340546)];
    [path2 addCoordinate:CLLocationCoordinate2DMake(43.507736,-114.340248)];

    GMSPolyline *rectangle2 = [GMSPolyline polylineWithPath:path2];
    rectangle2.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
    rectangle2.tappable = true;
    rectangle2.strokeWidth = 10.f;

    rectangle2.map = mapView_;

    NSLog(@"The code runs through here!");

    self.view = mapView_;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

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

任何想法表示赞赏。

-- 贝斯

【问题讨论】:

    标签: ios objective-c xcode google-maps google-polyline


    【解决方案1】:

    首先,如果您可以将相机启动到以下位置,将会更容易:

     GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:43.5157
                                                                longitude:-114.34367
                                                                     zoom:14];
    

    这样您就可以在相机附近轻松看到您的折线。

    然后在您的ViewController.h 头文件中,将您的界面更改为以下内容:

    @interface ViewController : UIViewController<GMSMapViewDelegate>
    

    所以你的视图控制器将是一个 GMSMapViewDelegate。

    最后,在您的 self.view = mapView_; 下方添加以下行:

    mapView_.delegate = self;
    

    这一行会将您的视图控制器(即 GMSMapViewDelegate)分配给您的 mapView_ 的 delgate,以便您的 mapView_ 的委托将是 GMSMapViewDelegate,并且会调用 didTapOverlay 方法。

    【讨论】:

    • 完美,谢谢,这正是我所需要的。仍然习惯于代表。