如何将Google Maps地图添加到OS X Cocoa应用程序

前端之家收集整理的这篇文章主要介绍了如何将Google Maps地图添加到OS X Cocoa应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用XCode 4开发一个 Cocoa应用程序.其中一个窗口有一个标签视图.其中一个标签显示某个位置的Google地图地图.我在选项卡中添加了一个WebView(WebKit框架)并将其定义为插座,以便我可以使用窗口控制器对其进行操作.

我设法使用以下内容在Web视图中显示URL(maps.google.com):

[[mapView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://maps.google.com"]]];

然而,这不是我正在寻找的结果.理想情况下,我想要一个类似于iPhoto的地图视图.从this教程我知道你必须在服务器上有一个HTML文件才能使工作正常.由于我的应用程序是本地OS X应用程序(不涉及任何服务器),我想知道是否有任何方式以不同的方式执行此操作并在应用程序的de目录中具有HTML本地(不确定这将如何与所需的一起工作与Google绑定的Google Maps API密钥)?

编辑:

我已经解决了部分问题.您实际上可以在本地存储HTML文件(我把它放在我项目的“Supporting Files”文件夹中).然后,您可以使用以下代码访问此文件

NSString *pagePath;
NSBundle *aBundle = [NSBundle mainBundle];
pagePath = [aBundle pathForResource:@"test2" ofType:@"html"];
// make a file: URL out of the path
NSURL *pageURL = [NSURL fileURLWithPath: pagePath];

下一步是使用以下内容显示地图:

[[mapView mainFrame] loadRequest:[NSURLRequest requestWithURL: pageURL]];

这将在我的WebView中显示地图.作为起点,我使用了Google Maps API教程here中的示例.此特定示例显示了一个以瑞典斯德哥尔摩为中心的地图.

我还没有设法解决的一件事是如何访问显示地图的Javascript函数(在上面的例子中,这将是使用body onload调用的initialize()函数).对于我的情况,我想调整这个函数来接受两个参数,一个经度和一个纬度,然后从显示地图的Objective-C对象中调用它.根据Apple的文档,可以使用可通过WebView实例访问的WebScriptObject实例从Objective-C中调用Javascript:

id wso = [mapView windowScriptObject];

然后使用callWebScriptMethod:withArguments:一个应该能够执行Javascript函数.但是,如果我删除body标签的onload并使用WindowScriptInstance调用Javascript initialize()函数,则地图不会显示.有人知道我做错了什么吗?

解决方法

最后一块拼图是正确的时机.在完成WebView加载之前,您无法使用Javascript做任何事情.通过向您的控制器发送webView:didFinishLoadForFrame:将此信号发送回您的控制器.查看WebFrameLoadDelegate协议参考 here上的Apple文档.您的控制器应实现其中一些方法,具体取决于所需的行为(协议方法是可选的).

运行此方法后,WebView即可开始工作,您可以在其中访问Javascript函数

- (void) webView:(WebView *) webView didFinishLoadForFrame:(WebFrame *) frame {
    NSArray *args = [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat: 59.325225],[NSNumber numberWithFloat:18.0700],nil];

    [[webView windowScriptObject] callWebScriptMethod:@"initialize" withArguments:args];
}

一个很好的参考点是我解剖的CallJS sample app,以使整个工作起作用.

猜你在找的cocoa相关文章