Мне удалось нарисовать числа внутри пользовательских цветных аннотаций (основанных на это ).Я хочу сделать некоторые оптимизации для своего пользовательского класса аннотаций, и я прочитал о повторном использовании.Моя проблема в том, что если я сделаю материал повторно используемым, аннотации будут смешаны на карте, что является большой проблемой.Пользовательские нарисованные аннотации нельзя использовать повторно?Или это как-то связано с аннотацией представления?Я имею в виду, что в аннотации хранится число, которое нужно нарисовать на его виде, практически это отношение 1 к 1 между аннотацией и ее видом.
Вот мой соответствующий код: init пользовательского представления аннотации:
-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageType:(int)imageType {
self = [super initWithAnnotation: annotation reuseIdentifier: reuseIdentifier];
if (self != nil)
{
if ([annotation isKindOfClass:[CircleMarker class]])
{
// custom annotation class with some extra fields
CircleMarker * clm = (CircleMarker * )annotation;
self.locationMarker = clm;
// ... setting frame and other stuff
self.image = [self getImage]; /* this method DRAWS image based on clm */
self.canShowCallout = NO;
}
...
}
И делегат:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
static NSString *reuseId_small = @"smallcircle";
static NSString *reuseId_big = @"bigcircle";
CircleAnnotationView * nca = nil;
if ((int)[self.mapView getZoomLevel] < ZOOM_LEVEL_FOR_NUMBERS)
{
nca = (CircleAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseId_small];
if (nca == nil )
nca = [[[CircleAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId_small imageType:2] autorelease];
}
else
{
nca = (CircleAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseId_big];
if ( nca == nil )
nca = [[[CircleAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId_big imageType:1] autorelease];
}
return nca;
}
Я пытался заменить часть self.image =
напользовательская функция drawRect
, но результат был тот же.
Спасибо.