IOS:将图像添加到自定义MKAnnotationview

我想将自定义图像添加到地图中的注释中。 我做了以下自定义MapAnnotationView:

#import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @class POI; @interface MapAnnotation : MKAnnotationView <MKAnnotation > @property (nonatomic) CGFloat lat; @property (nonatomic) CGFloat lon; @property (nonatomic) CGFloat altitude; @property (nonatomic, copy) NSString * title; @property (nonatomic, copy) NSString * subtitle; @property (nonatomic,retain) NSString *source; @property (nonatomic,retain) UIImage *image; @end @implementation MapAnnotation @synthesize coordinate; @synthesize lat=_lat,lon=_lon,altitude= _altitude; @synthesize subtitle= _subtitle, title= _title, source=_source, image =_img; - (CLLocationCoordinate2D)coordinate;{ CLLocationCoordinate2D position; if (_lat != 0.0 && _lon != 0.0) { position.latitude = _lat; position.longitude = _lon; }else { position.latitude=0.0; position.longitude=0.0; } return position; } @end -(void) mapDataToMapAnnotations{ NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:10]; for (id annotation in _map.annotations) if (annotation != _map.userLocation) [toRemove addObject:annotation]; [_map removeAnnotations:toRemove]; [_data removeAllObjects]; [_data addObjectsFromArray:[UDdelegate naturArray]]; if(_data != nil){ MapAnnotation * tmpPlace; //for(NSDictionary * poi in _data){ for(POI* poi in _data){ tmpPlace = [[MapAnnotation alloc]init]; tmpPlace.title = [poi title]; tmpPlace.lat = [poi lat]; tmpPlace.lon = [poi lon]; tmpPlace.subtitle = [poi dist]; tmpPlace.image = [poi poiIcon]; [self.map addAnnotation:tmpPlace]; [_map setNeedsLayout]; } } } 

问题是,引脚是标准的redPin ….我相信,图标不为空,检查了。

谢谢

您必须为自定义视图提供MapKit委托方法mapView:viewForAnnotation: :。

 - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation { static NSString *annotationViewReuseIdentifier = @"annotationViewReuseIdentifier"; MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewReuseIdentifier]; if (annotationView == nil) { annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewReuseIdentifier] autorelease]; } annotationView.image = [UIImage imageNamed:@"pin_image.png"]; annotationView.annotation = annotation; return annotationView; } 

要封装更多,你应该像创build一个自定义的注释视图,并为你的类提供上面的委托方法。

我build议你重命名MapAnnotation类,因为它很混乱。 iOS中也有注释,这些注释视图的数据持有者。 为了解决这个问题,我宁愿编写inheritance类的types,在这种情况下MKAnnotationView在您的自定义类的末尾。 例如CustomPinAnnotationView