цель c - скрыть пользовательский вид аннотации - PullRequest
0 голосов
/ 13 января 2012

Я хочу иметь пользовательский вид аннотации, который ведет себя точно так же, как стандартный, но у меня должно быть изображение внутри и несколько текстов, поэтому я реализовал учебник на http://developer.apple.com/library/ios/#samplecode/WeatherMap/Introduction/Intro.html

НоМоя проблема в том, что я хочу, чтобы представление аннотации скрывало и просто показывало значок, то же самое, что и представление аннотации по умолчанию, но все аннотации отображаются, и я не могу найти способ их скрыть.

Есть идеи?

Спасибо.

[EDIT] Моя текущая реализация viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation{
NSLog(@"Item añadido");

static NSString *AnnotationViewID = @"annotationViewID";



CustomMKAnnotationView *annotationView =

(CustomMKAnnotationView *)[mapa dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

if (annotationView == nil)

{

    annotationView = [[[CustomMKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];

}



annotationView.annotation = annotation;



return annotationView;


}

Потому что мне нужен стандартный пузырь, но с изображением и парой UILabels.Но я хотел бы сохранить стандартное поведение, то есть есть значок, когда пузырь не отображается, а при нажатии на него отображается пузырь.Содержание моего пользовательского пузыря реализовано в "CustomMKAnnotationView".Что выглядит следующим образом:

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{

self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];

if (self != nil)

{

    CGRect frame = self.frame;

    frame.size = CGSizeMake(10.0, 10.0);

    self.frame = frame;

    // self. = [super pincolor];
    self.backgroundColor = [UIColor clearColor];

    self.centerOffset = CGPointMake(10.0, 10.0);

}

return self;

}
- (void)drawRect:(CGRect)rect{

CustomMKAnnotation *custom = (CustomMKAnnotation *)self.annotation;

if (custom != nil)

{   
    NSLog(@"El nombre es: %@", [custom nombre]);

    UILabel *nombre = [[UILabel alloc]init];
    UILabel *media = [[UILabel alloc]init];

    PDColoredProgressView *barrita = [[PDColoredProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleDefault];
    [barrita setTintColor:[UIColor colorWithRed:0.6 green:0.83 blue:0.91 alpha:1.0f]];


    nombre.textColor = [UIColor whiteColor];
    media.textColor = [UIColor whiteColor];
    nombre.font = [UIFont fontWithName:@"DIN-Bold" size:14];
    media.font = [UIFont fontWithName:@"DIN-Medium" size:12];
    CGSize size = [[custom nombre] sizeWithFont:nombre.font constrainedToSize:CGSizeMake(300, 20)                                                                             lineBreakMode:nombre.lineBreakMode];

    NSLog(@"el ancho es: %f y alto %f", size.width, size.height);

    nombre.backgroundColor = [UIColor clearColor];
    media.backgroundColor = [UIColor clearColor];
    nombre.text = [custom nombre];
    barrita.progress = [custom gente];

    media.text = [NSString stringWithFormat:@"Media %@ años", [custom media]];

    UIImageView *fondo = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bubble_map.png"]];


    nombre.frame = CGRectMake(10, 10, size.width, size.height);
    media.frame = CGRectMake(10, size.height + 10, size.width, size.height);
    barrita.frame = CGRectMake(10, media.frame.origin.y + 20, size.width, 10); 
    fondo.frame =  CGRectMake(-((size.width+ 20.0f)/2), -((size.height +10)*2 + 20)-10, size.width+ 20.0f, (size.height +10)*2 + 20);

    fondo.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
    nombre.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;


    [fondo addSubview:nombre];
    [fondo addSubview:media];
    [fondo addSubview:barrita];
    [self addSubview:fondo];

    [fondo release];
    [nombre release];
    [media release];

}
}

1 Ответ

1 голос
/ 13 января 2012

Если вы хотите скрыть детали вывода, пытались ли вы создать пользовательский MKPinAnnotationView и установить его свойство canShowCallout=NO;?

В вашем методе делегирования mapview:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id    <MKAnnotation>)annotation
{

 MKPinAnnotationView*pinView;

if([annotation isKindOfClass:[<yourannotationclass> class]])
{

    static NSString*annoIdentifier=@"AnnotationIdentifier";

    pinView=(MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:annoIdentifier];

    if(pinView==nil)
    {
        pinView=[[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annoIdentifier]autorelease ];
    }

    pinView.animatesDrop=NO;
    pinView.canShowCallout=NO;
    pinView.pinColor=MKPinAnnotationColorRed;


}

   return pinView;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...