我正在为餐厅设计一个应用程序(也主要是与iOS Dev一起练习)。
对于此餐厅信息页面(地址,电话号码等),我在底部添加了一张较小的地图,以显示餐厅所在的地方:
- 我该如何制作这张小地图以显示餐厅位置(我知道坐标)和
- 如何对用户单击地图进行编码,它将用相同的坐标切换到Apple Map应用。
谢谢
您必须在viewcontroller.h
文件中使用MKMapViewDelegate
并使用MA代表的方法处理地图。
尝试下面的代码添加餐厅的别针并将地图放在其上。
MKAnnotationView *point = [[MKAnnotationView alloc] initWithAnnotation:_station reuseIdentifier:@"restaurant"];
[map addAnnotation:point.annotation];
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.002;
span.longitudeDelta = 0.002;
region.span = span;
region.center = location.coordinate;
[map setRegion:region animated:YES];
之后,实现didSelectAnnotationView
方法以识别按下的引脚。在其中,您可以在餐厅的坐标上打开Apple地图:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
NSString *title = @"title";
float latitude = ...;
float longitude = ...;
int zoom = 13;
NSString *stringURL = [NSString stringWithFormat:@"http://maps.apple.com?q=%@@%1.6f,%1.6f&z=%d", title, latitude, longitude, zoom];
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
}
编辑:
我正在处理类似于您的应用程序,但就我而言是关于站的。 MDStationController
是视图的控制器,该视图包含顶部的地图(像您一样)。MDStation
是站。
// MDStationController.h
#import <UIKit/UIKit.h>
#import "MDStation.h"
#import <MapKit/MapKit.h>
@interface MDStationController : UIViewController <MKMapViewDelegate>
@property (nonatomic, retain) MDStation* station;
@end
// MDStationController.m
@implementation MDStationController
@synthesize station=_station;
[...]
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = _station.name;
stationView.map.delegate = self;
[self addAndcenterMapOnLocation:_station.location];
}
- (void) addAndcenterMapOnLocation:(CLLocation*)location {
MKAnnotationView *point = [[MKAnnotationView alloc] initWithAnnotation:_station reuseIdentifier:@"station"];
[stationView.map addAnnotation:point.annotation];
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.002;
span.longitudeDelta = 0.002;
region.span = span;
region.center = location.coordinate;
[stationView.map setRegion:region animated:YES];
}
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
static NSString *defaultID = @"station";
MKAnnotationView *pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultID];
pinView.image = [UIImage imageNamed:@"bike_gray"];
return pinView;
}
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
NSString *title = _station.name;
float latitude = _station.location.latitude;
float longitude = _station.location.longitude;
int zoom = 13;
NSString *stringURL = [NSString stringWithFormat:@"http://maps.apple.com?q=%@@%1.6f,%1.6f&z=%d", title, latitude, longitude, zoom];
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
}