有幾個教程和關於此的問題,但我還沒有足夠的知識,以瞭解如何將它們實現到我的特定應用程序。我從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
感謝;正是我需要的。 – Adama 2013-02-15 21:02:28
你能爲我解釋一下addressDictionary嗎?我將它保留爲零,並且註釋仍顯示並允許我在地圖中路由,但顯示「未知位置」作爲引腳名稱。我假設,可能不正確,這與地址詞典有關?我用一個字典在另一個方法上迭代我的註釋的值;我想在這個方法中引用相同的字典嗎? – Adama 2013-02-15 21:21:01
@ user2051879 ['MKMapItem'](http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapItem_class/Reference/Reference.html#//apple_ref/occ/cl/MKMapItem)有一個一系列有趣的屬性。使用'annotation'的'title'來設置'MKMapItem'的'name'。 (請參閱修訂後的答案)['initWithCoordinate'的'addressDictionary'](http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKPlacemark_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40008322-CH1-SW3)用於地址構成組件(街道,城市,州等)。這取決於您的KML有什麼。 – Rob 2013-02-15 21:54:15