我设法使用以下内容在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函数:
- (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,以使整个工作起作用.