Domanda

Sto cercando di aggiungere un'immagine dietro un MKPinAnnotationView. Sembra che dovrebbe essere piuttosto facile da fare proprio questo qui:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
 for (MKAnnotationView *aView in views)
  [[aView superview] addSubview:imageView];
}

Ma il problema che sto avendo a farlo è che la visualizzazione secondaria bambino al pin renderà su di esso non è dietro di esso.

Ho anche provato:

 for (MKAnnotationView *aView in views)
  [[aView superview] insertSubview:imageView atIndex:1];

Il problema di questo è che, mentre è dietro il perno, non appena la mappa viene riposizionato, l'immagine galleggia fuori dallo schermo.

Qualche suggerimento? Grazie

È stato utile?

Soluzione

Grazie per l'ingresso, ecco fondamentalmente ciò che ho finito per fare, senza la creazione di sottoclassi:

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

    MKAnnotationView *annView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];

    UIImage *image = [UIImage imageNamed:@"image.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [annView addSubview:imageView];
    [imageView release];

    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];     
    [annView addSubview:pinView];
    [pinView release];

    return annView;
}

necessario un unico perno, così imposto reuseIdentifier a nil.

Altri suggerimenti

Ho sottoclasse il MKAnnotatonView e sovrascritto metodi initWithAnnotation:resueIdentifier e drawRect per aggiungere un'altra immagine dietro l'immagine "fronte".

Sembra che questo è ciò che ci sta suggerendo di riferimento di classe MKAnnotationView di Apple di fare.

Solo che è difficile. Se si sottoclasse il MKAnnotationView, c'è ancora la proprietà immagine esistente. Hanno fatto qualcosa per il correttamente in modo che esso è collegato con il disegno. Forse, hanno ignorato il drawRect per disegnare l'immagine dopo l'inizializzazione è fatta.

Inoltre, se non si imposta la proprietà delle immagini, la struttura del vostro annotationView personalizzato è impostato su 0 dimensioni, e il metodo drawRect non viene chiamato.

Infine, Apple dice che le immagini dovrebbero essere totalmente riempiti, vale a dire usa un colore trasparente per lo sfondo dei disegni.

Quindi: nella sottoclasse:

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
{
    self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
    if (self) 
    {       
        UIButton *rightButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
        [rightButton addTarget:self 
                        action:@selector(myShowAnnotationAddress:) 
              forControlEvents:UIControlEventTouchUpInside];
        self.rightCalloutAccessoryView = rightButton;

        self.canShowCallout = YES; 
        self.multipleTouchEnabled = NO;

        self.frame = CGRectMake(0, 0, 65, 100);
        self.backgroundColor = [UIColor clearColor];        

        return self;
    }
    return nil;
}

- (void)drawRect:(CGRect)rect
{
        CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGPoint drawPoint = CGPointMake(0.0f, 0.0f);

    UIImage *shadowImage = [UIImage imageNamed:@"shadow_image.png"];
    [shadowImage drawAtPoint:drawPoint];

    UIImage *frontImage = [UIImage imageNamed:@"front_image.png"];
        [frontImage drawAtPoint:drawPoint];

    CGContextRestoreGState(context);
}

Dopo che ho fatto la risposta, mi rendo conto che in realtà voleva disegnare dietro MKPinAnnotationView. La mia risposta non è così, anche se mostra dove il disegno, forse dovrebbe essere fatto. Ovviamente MKPinAnnottions ha il proprio metodo di disegno per presentare una Pin e la sua ombra.

Credo che, probabilmente, è possibile recuperare l'immagine Pin dalla proprietà self.image. Per quanto riguarda l'ombra, io non sono certo ... Si può utilizzare il metodo di disegno GL OPEN per aggiungere l'ombra, o semplicemente combinando immagine un'ombra.

Infine, l'immagine viene fornito con animazione. Sto indovinando che è qui che viene eseguito l'animazione. In questa fase, però, non ho ancora testato.

Crea un nuovo annotationview composito che aggiunge prima l'immagine e poi la MKAnnotationView attuale:

@implementation MyCustomAnnotationView

- (void) viewDidLoad 
{   
    // First add the image to our subviews
    UIImageView *view = [[UIImageView alloc] initWithImage: myImageProperty];
    [self.view addSubview: view];
    [view release];

    // Then add the MKAnnotationView on top of it
    MKAnnotationView *annotation = [[MKAnnotationView alloc] init]; 
    [self.view addSubview: annotation]; 
    [annotation release];
}                        

@end  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top