如何获取一对纬度,经度浮点数并让MKMapView放下一个引脚并显示位置?

时间:2010-05-08 21:04:08

标签: iphone ipad mapkit

给定一对纬度和经度浮点数以及MapView,如何让MapView在该位置放置一个引脚并“缩放”屏幕以显示位置?

我已经阅读了一些SO帖子,他们似乎都是关于这方面的具体方面,但我无法将它们“放在一起”。

非常感谢! -Frank

1 个答案:

答案 0 :(得分:1)

示例应用WorldCities显示了如何放大到给定位置,但不会在那里放置引脚。另一个名为MapCallouts的示例应用程序确实会丢弃引脚,但它不会缩放。

缩放部分很简单(参见WorldCities中的didChooseWorldCity方法)。

要删除引脚,您必须将addAnnotation消息发送到mapview并向其发送一个实现MKAnnotation协议的对象。首先,您需要创建一个实现MKAnnotation的类。这是一个名为MyMapPin的例子:

//MyMapPin.h...
#import <MapKit/MapKit.h>
@interface MyMapPin : NSObject <MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *subtitle; 
    NSString *title; 
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic,retain) NSString *title;
- (id) initWithCoords:(CLLocationCoordinate2D) coords;
@end

//MyMapPin.m...
#import "MapPin.h"
@implementation MyMapPin
@synthesize coordinate;
@synthesize subtitle;
@synthesize title;
- (id) initWithCoords:(CLLocationCoordinate2D) coords {
    self = [super init];
    if (self != nil) {
        coordinate = coords; 
    }
    return self;
}
- (void) dealloc
{
    [title release];
    [subtitle release];
    [super dealloc];
}
@end

现在,您可以通过在animateToPlace方法的开头添加此代码来修改WorldCities示例:

MyMapPin *pin = [[MyMapPin alloc] initWithCoords:worldCity.coordinate];
[mapView addAnnotation:pin];
[pin release];
WorldCities应用程序中的worldCity.coordinate只是CLLocationCoordinate2D类型的属性,它有两个字段纬度和经度。这两个花车会进去。

请注意,addAnnotation只会在城市放置一个引脚。要获得动画丢弃引脚,还必须实现viewForAnnotation方法并将animatesDrop设置为YES。请参阅MapCallouts中的MapViewController.m中的示例。还要将mapview的委托设置为实现viewForAnnotation方法的任何位置(通常是self / File的所有者)。