IOS/MapKit:通过单击 MKPlacemark 启动本机地图应用程序
Posted
技术标签:
【中文标题】IOS/MapKit:通过单击 MKPlacemark 启动本机地图应用程序【英文标题】:IOS/MapKit: Launch Native Map App by Clicking on MKPlacemark 【发布时间】:2015-05-05 23:49:22 【问题描述】:ios 新手刚学 Mapkit。我使用 MKPlacemark 在我的应用程序中加载地图。但是,有些用户可能想要使用更高级的功能,例如行车路线,为此,我认为,他们最好在我的顶部启动本机应用程序(当他们完成常规地图时,我的应用程序仍然在后台打开应用程序)
我知道如何使用 MKMapItem 从我的应用程序启动本机应用程序。但是,有一种方法可以在用户触摸地标后启动本机应用程序。
这是我正在使用的代码。
-(void) geoCodeAndMapIt
NSString* location = @"156 University Ave, Palo Alto, CA 94301";
NSLog(@"going to map this address: %@",location);
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:location
completionHandler:^(NSArray* placemarks, NSError* error)
if (placemarks && placemarks.count > 0)
CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc]
initWithPlacemark:topResult];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(placemark.coordinate, 5000, 5000);//5000 is meters
region.span.longitudeDelta /= 8.0;
region.span.latitudeDelta /= 8.0;
[self.mapView setRegion:region animated:YES];
[self.mapView addAnnotation:placemark];
// The following MKMapItem class launches the full blown native app. Commenting it out causes the map to load in the app. Otherwise, it fires up the native map app immediately in place of the previous app.
MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:placemark];
mapItem.name = self.contact.first;
mapItem.phoneNumber = self.contact.tel;
NSDictionary *options = @
MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsMapTypeKey:
[NSNumber numberWithInteger:MKMapTypeSatellite],
MKLaunchOptionsShowsTrafficKey:@YES
;
[mapItem setName:@"Name of your location"];
[mapItem openInMapsWithLaunchOptions:options];*/
];
[mapItem openInMapsWithLaunchOptions:options];
感谢您的任何建议。
【问题讨论】:
【参考方案1】:只有当在 didSelectAnnotation 上调用 MKMapViewDelegate 时才应该调用 openInMaps:例如。
https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapViewDelegate_Protocol/index.html#//apple_ref/occ/intf/MKMapViewDelegate
要打开地图应用,您还可以使用以下内容自行构建 URL:
UIApplication.sharedApplication().openURL(...)
在此处查看此文档以了解其余内容:
https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
【讨论】:
那么让地图视图页面订阅那个mapviewdelegate协议,成为自己的代理,监听didselectannotate,然后在didselectannotate方法中调用openinmaps? 将mapView委托设置为管理mapView的控制器。 self.mapView.delegate = 自我;然后在管理控制器中实现委托协议,特别是 didSelectAnnotation: 方法 好的。将其标记为正确但意识到我想做一些不同的事情,当用户单击触摸注释后出现的弹出窗口时打开本机地图应用程序。像 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id以上是关于IOS/MapKit:通过单击 MKPlacemark 启动本机地图应用程序的主要内容,如果未能解决你的问题,请参考以下文章