iphone – 如何在我的每个地图注释中添加“地图”应用链接
有一些关于此的教程和问题,但我还不够了解如何将它们实现到我的特定应用程序中.我从URL获取
JSON注释数据并解析它并在for循环中添加每个注释.我想在每个注释上添加一个链接,以打开地图的方向.
这是我的ViewController.H #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> #import <MapKit/MapKit.h> //MAP Setup @interface ViewController : UIViewController <MKMapViewDelegate> //map setup @property (weak,nonatomic) IBOutlet MKMapView *mapView; @property (nonatomic,strong) NSMutableData *downloadData; //- (IBAction)refreshTapped:(id)sender; @end 和我的ViewController.m - (void)viewDidLoad { //////////////////////// //Connection to download JSON map info //////////////////////// self.downloadData = [NSMutableData new]; NSURL *requestURL2 = [NSURL URLWithString:@"http:OMITTED"]; NSURLRequest *request = [NSURLRequest requestWithURL:requestURL2]; NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; //scroller [scroller setScrollEnabled:YES]; [scroller setContentSize:CGSizeMake(320,900)]; [super viewDidLoad]; //Map [self.mapView.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.downloadData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { id parsed = [NSJSONSerialization JSONObjectWithData:_downloadData options:kNilOptions error:nil]; //////////////////////// //Iterating and adding annotations //////////////////////// for (NSDictionary *pointInfo in parsed) { NSLog([pointInfo objectForKey:@"name"]); double xCoord = [(NSNumber*)[pointInfo objectForKey:@"lat"] doubleValue]; double yCoord = [(NSNumber*)[pointInfo objectForKey:@"lon"] doubleValue]; CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(xCoord,yCoord); MKPointAnnotation *point = [MKPointAnnotation new]; point.coordinate = coords; point.title = [pointInfo objectForKey:@"name"]; [self.mapView addAnnotation:point];// or whatever your map view's variable name is } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } //centers map on user loc and then allows for movement of map without re-centering on userlocation check. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([self.mapView showsUserLocation]) { MKCoordinateRegion region; region.center = self.mapView.userLocation.coordinate; MKCoordinateSpan span; span.latitudeDelta = .50; // Change these values to change the zoom span.longitudeDelta = .50; region.span = span; [self.mapView setRegion:region animated:YES]; self.mapView.showsUserLocation = NO;} } - (void)dealloc { [self.mapView.userLocation removeObserver:self forKeyPath:@"location"]; [self.mapView removeFromSuperview]; // release crashes app self.mapView = nil; } @end 解决方法
Launching the Maps App位置感知编程指南说:
所以,你应该: >确保将视图控制器定义为地图视图的委托; - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) return nil; MKAnnotationView* annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyCustomAnnotation"]; annotationView.canShowCallout = YES; annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; return annotationView; } >然后编写一个 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { id <MKAnnotation> annotation = view.annotation; CLLocationCoordinate2D coordinate = [annotation coordinate]; MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]; MKMapItem *mapitem = [[MKMapItem alloc] initWithPlacemark:placemark]; mapitem.name = annotation.title; [mapitem openInMapsWithLaunchOptions:nil]; } 我不知道您的KML中有哪些其他地理信息,但您可以根据需要填写地址字典. 在回答有关如何使用MKPlacemark初始化方法 NSDictionary *addressDictionary = @{(NSString *)kABPersonAddressStreetKey : street,(NSString *)kABPersonAddressCityKey : city,(NSString *)kABPersonAddressStateKey : state,(NSString *)kABPersonAddressZIPKey : zip}; 为此,您必须将add the appropriate framework,AddressBook.framework添加到您的项目并导入.m文件中的标头: #import <AddressBook/AddressBook.h> 但真正的问题是如何设置MKMapItem的名称,以便它不会在地图应用程序中显示为“未知位置”.这就像设置name属性一样简单,可能只是从注释中抓取标题: mapitem.name = annotation.title; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |