2010-01-26 5 views

Respuesta

20

Siempre puede hacer su animación personalizada en el método MKMapViewDelegate.

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 

Probablemente algo así (no obtendrá la animación sombra de fantasía, si quieres que necesita para hacerlo usted mismo):

- (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    CGRect visibleRect = [mapView annotationVisibleRect]; 
    for (MKAnnotationView *view in views) { 
     CGRect endFrame = view.frame; 

     CGRect startFrame = endFrame; startFrame.origin.y = visibleRect.origin.y - startFrame.size.height; 
     view.frame = startFrame; 

     [UIView beginAnimations:@"drop" context:NULL]; 
     [UIView setAnimationDuration:1]; 

     view.frame = endFrame; 

     [UIView commitAnimations]; 
    } 
} 
+0

@gcamp: He tratar también de esta manera, pero no funciona (la imagen no cambia): MKPinAnnotationView * annView = [MAPview dequeueReusableAnnotationViewWithIdentifier: Ident]; annView = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: ident] autorelease]; annView.image = [UIImage imageNamed: @ "annotImg.png"]; annView.animatesDrop = TRUE; – Mat

+0

¡Cambié mi respuesta! – gcamp

+0

muchas gracias! .. esto es muy útil para mí! – Mat

1

Gracias @gcamp por su respuesta, funciona bien, pero puedo modificar un poco para ser exacta para dónde se colocará la vista en MAPview, compruebe el código de abajo:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
CGRect visibleRect = [mapView annotationVisibleRect]; 
for (MKAnnotationView *view in views) 
{ 
    CGRect endFrame = view.frame; 
    endFrame.origin.y -= 15.0f; 
    endFrame.origin.x += 8.0f; 
    CGRect startFrame = endFrame; 
    startFrame.origin.y = visibleRect.origin.y - startFrame.size.height; 
    view.frame = startFrame; 

    [UIView beginAnimations:@"drop" context:NULL]; 
    [UIView setAnimationDuration:0.2]; 

    view.frame = endFrame; 

    [UIView commitAnimations]; 
} 
} 
3

la misma respuesta que @gcamp sólo en Swift para los interesados ​​

func mapView(mapView: MKMapView, didAddAnnotationViews views: [MKAnnotationView]) { 
    let visibleRect = mapView.annotationVisibleRect 

    for view:MKAnnotationView in views{ 
     let endFrame:CGRect = view.frame 
     var startFrame:CGRect = endFrame 
     startFrame.origin.y = visibleRect.origin.y - startFrame.size.height 
     view.frame = startFrame; 

     UIView.beginAnimations("drop", context: nil) 
     UIView.setAnimationDuration(1) 

     view.frame = endFrame; 

     UIView.commitAnimations() 
    } 
} 
Cuestiones relacionadas