Frage

Ich versuche, ein Bild hinter einem MKPinAnnotationView hinzuzufügen. Scheint, wie es recht einfach sein sollte, gerade dies zu tun hier:

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

Aber das Problem das ich habe, das zu tun, ist, dass das Kind subview mit dem Stift auf es nicht dahinter machen wird.

Ich habe auch versucht:

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

Das Problem dabei ist, dass, während es hinter dem Stift ist, sobald die Karte neu positioniert wird, schwimmt weg das Bild auf den Bildschirm.

Irgendwelche Vorschläge? Dank

War es hilfreich?

Lösung

Danke für den Input, hier ist im Grunde, was ich ohne Subclassing tun endete:

- (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;
}

Ich brauchte nur einen Stift, so dass ich reuseIdentifier nil.

Andere Tipps

Ich habe die MKAnnotatonView und überwog die initWithAnnotation:resueIdentifier und drawRect Methoden subclassed ein anderes Bild hinter dem „Front“ Bild hinzuzufügen.

Es scheint, dass das ist, was Apples MKAnnotationView Klassenreferenz uns darauf hindeutet, zu tun.

Nur, dass es schwierig. Wenn Sie die MKAnnotationView sind Subklassen, gibt es noch die Bildeigenschaft vorhanden ist. Sie haben etwas über die richtig gemacht, so dass es mit Zeichnung verknüpft ist. Vielleicht haben sie die drawRect außer Kraft gesetzt, das Bild zu zeichnen, nachdem die Initialisierung durchgeführt wird.

Auch wenn Sie die Bildeigenschaft nicht festgelegt, wird der Rahmen der benutzerdefinierten annotationView Größe 0 gesetzt und die drawRect Methode nicht aufgerufen wird.

Schließlich sagt Apple, dass die Bilder sollten vollständig gefüllt werden, das heißt verwendet eine transparente Farbe für den Hintergrund der Zeichnungen.

So: In der Unterklasse:

- (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);
}

Nachdem ich die Antwort gemacht, merke ich, dass Sie tatsächlich hinter MKPinAnnotationView ziehen wollten. Meine Antwort ist nicht, dass, obwohl es zeigt, wo die Zeichnung vielleicht getan werden soll. Offensichtlich MKPinAnnottions hat seine eigenen Ziehverfahren einen Pin und seinen Schatten zu präsentieren.

Ich denke, dass wahrscheinlich können Sie die Pin Bild aus der self.image Eigenschaft abrufen. In Bezug auf die Schatten, bin ich nicht sicher ... Es kann OPEN GL Ziehverfahren wird mit dem Schatten hinzuzufügen, oder einfach nur ein Schattenbild kombiniert werden.

Schließlich kommt das Bild mit Animation. Ich vermute, dass das ist, wo die Animation ausgeführt wird. In dieser Phase haben aber ich nicht getestet.

Erstellen Sie eine neue Verbund AnnotationView, die zuerst Ihr Bild addiert und dann die tatsächliche MKAnnotationView:

@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  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top