我想将带有叠加层的开始和结束图像放在 iPhone/iPad 应用程序中。我有起点和终点纬度和经度值,想在起点和终点之间绘制叠加层,并将起点图像放在起点上,将终点图像放在终点上。
我用谷歌搜索,但我发现 MapKit 获取一张图像并将其设置在起点和终点,找不到第二张图像的任何帮助。
像
annotationView.image=[UIImage imageNamed:@"parkingIcon.png"];
它只为起点和终点设置一个图像。但我想为这两点放置不同的图像。
请帮忙。
我想将带有叠加层的开始和结束图像放在 iPhone/iPad 应用程序中。我有起点和终点纬度和经度值,想在起点和终点之间绘制叠加层,并将起点图像放在起点上,将终点图像放在终点上。
我用谷歌搜索,但我发现 MapKit 获取一张图像并将其设置在起点和终点,找不到第二张图像的任何帮助。
像
annotationView.image=[UIImage imageNamed:@"parkingIcon.png"];
它只为起点和终点设置一个图像。但我想为这两点放置不同的图像。
请帮忙。
我明白了......感谢所有试图帮助我的人。完整的解决方案是
创建一个类
@interface MyAnnotationClass : NSObject <MKAnnotation> {
NSString *_name;
NSString *_description;
CLLocationCoordinate2D _coordinate;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
-(id) initWithCoordinate:(CLLocationCoordinate2D) coordinate;
ViewDidLoad 方法代码:
mapView.delegate = self;
//Initialize annotation
MyAnnotationClass *commuterLotAnnotation=[[MyAnnotationClass alloc] initWithCoordinate:CLLocationCoordinate2DMake( 39.047752, -76.850388)];
commuterLotAnnotation.name = @"1";
MyAnnotationClass *overflowLotAnnotation=[[MyAnnotationClass alloc] initWithCoordinate:CLLocationCoordinate2DMake( 39.047958, -76.852520)];
overflowLotAnnotation.name = @"2";
//Add them to array
self.myAnnotations=[NSArray arrayWithObjects:commuterLotAnnotation, overflowLotAnnotation, nil];
//Release the annotations now that they've been added to the array
[commuterLotAnnotation release];
[overflowLotAnnotation release];
//add array of annotations to map
[mapView addAnnotations:_myAnnotations];
viewFor注解代码:
-(MKAnnotationView *)mapView:(MKMapView *)MapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *parkingAnnotationIdentifier=@"ParkingAnnotationIdentifier";
if([annotation isKindOfClass:[MyAnnotationClass class]]){
//Try to get an unused annotation, similar to uitableviewcells
MKAnnotationView *annotationView=[MapView dequeueReusableAnnotationViewWithIdentifier:parkingAnnotationIdentifier];
//If one isn't available, create a new one
if(!annotationView){
annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:parkingAnnotationIdentifier];
if([((MyAnnotationClass *)annotation).name isEqualToString: @"1"]){
annotationView.image=[UIImage imageNamed:@"passenger.png"];
}
else if([((MyAnnotationClass *)annotation).name isEqualToString: @"2"]){
annotationView.image=[UIImage imageNamed:@"place.png"];
}
}
return annotationView;
}
return nil;
}
这就是您可以为 MapKit 上的每个点添加单独图像的方法。
您必须使用-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation;
MKAnnotation 委托方法
它允许您在地图上设置给定的注释。
每个注释都会返回此方法,您只需找到结束和开始注释并将图像设置为它
首先,您必须实现 MKMapViewDelegate 协议并将委托类设置为您的地图。
在 MKMapView 委托中,声明方法:
- (MKAnnotationView *)mapView:(id)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if (annotation == [mapView userLocation]) // The user's blue point : no customisation.
return nil;
MKAnnotationView * annView = [mapView dequeueReusableAnnotationViewWithIdentifier:/* your specific identifier */];
if (annView == nil) {
annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:/* your specific identifier */] autorelease];
}
annView.image = /* your image */;
return annView
}
但是您必须检测注释是开始注释还是结束注释。您可以设置特定标题以轻松检索它(如@“start”)或通过添加区分属性来子类化您的 MKAnnotations。