Вы должны предоставить метод делегата 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;
}
Чтобы инкапсулировать больше, вы должны создать собственное представление аннотации, как вы делали, и обслуживать метод делегата выше с вашим классом..
Советую переименовать класс MapAnnotation
, потому что это сбивает с толку.В iOS также есть аннотации, которые являются держателями данных для этих видов аннотаций.Чтобы решить эту проблему, я бы предпочел написать тип унаследованного класса, в данном случае MKAnnotationView
в конце вашего пользовательского класса.Например CustomPinAnnotationView
.