Как добавить изображение для каждой индивидуальной аннотации в MapView?
У меня есть класс Picture
который содержит latitude
а также longitude
а также image
каждого места. Я хочу добавить их в качестве аннотации к MapView
и показать его изображение вместо булавки для этих мест.
У меня есть индивидуальная аннотация, которая:
@interface Annotation : MKAnnotationView <MKAnnotation>
@property (nonatomic,assign) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *subtitle;
@property (nonatomic,retain) UIImage *image;
@end
А также
@implementation Annotation
@synthesize title,subtitle,coordinate,image;
@end
Теперь в основном коде я пытаюсь это:
CLLocationCoordinate2D location;
Annotation *myAnn;
for(Pictures *pic in picturesFromDB)
{
myAnn = [[Annotation alloc] init];
location.latitude = [pic.langT doubleValue];
location.longitude = [pic.longT doubleValue];
myAnn.coordinate = location;
myAnn.title = pic.descript;
myAnn.image = [UIImage imageWithData:pic.image]; //Not sure about this line!
[self.mapView addAnnotation:myAnn];
}
Мне все еще нужен делегат и он должен вызывать "viewForAnnotation"? Поскольку это не сработало, я сделал это для делегата:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// If it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// Handle any custom annotations.
if ([annotation isKindOfClass:[Annotation class]])
{
// Try to dequeue an existing pin view first.
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
//pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"image.png"];
pinView.calloutOffset = CGPointMake(0, 4);
} else {
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
Это работает нормально, но добавляет одно и то же изображение во все места. Но у меня есть конкретное изображение, чтобы показать вместо image.png
выше для каждого места.
Номер местоположения является переменным, а также динамическим.
Как я могу передать это изображение делегату. Я попытался найти поле изображения в переданной аннотации, но оно не существует! Я ценю любое предложение.
1 ответ
Вам нужно привести аннотацию к вашему пользовательскому классу, чтобы вы могли получить доступ к его свойствам -
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// Handle any custom annotations.
if ([annotation isKindOfClass:[Annotation class]])
{
Annotation *myAnn=(Annotation *)annotation;
// Try to dequeue an existing pin view first.
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
//pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.calloutOffset = CGPointMake(0, 4);
} else {
pinView.annotation = annotation;
}
pinView.image = myAnn.image;
return pinView;
}
return nil;
}