2011-06-15 24 views
6

Si cambio la región en setRegion por MKMapView, ¿hay alguna manera de establecer la velocidad o la duración de esa animación? Revisé la documentación y los Googles, pero no encontré nada.velocidad de setRegion para MKMapView

+3

No, no es posible cambiarlos. –

+0

Ha comprobado esto: [Controlando la velocidad de animación de MKMapView en iOS6] (http://stackoverflow.com/questions/12785529/controlling-the-animation-speed-of-mkmapview-in-ios6) – theaob

Respuesta

5

que fue capaz de establecer la duración de la setRegion animación mediante la edición de la respuesta a la pregunta - Setting the zoom level for a MKMapView - de la siguiente manera:

#import <MapKit/MapKit.h> 

@interface MKMapView (ZoomLevel) 

- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate 
        zoomLevel:(NSUInteger)zoomLevel 
        animated:(BOOL)animated; 
@end 



#import "MKMapView+ZoomLevel.h" 

@implementation MKMapView (ZoomLevel) 

#define ANIMATION_DURATION 0.5 
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate 
         zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated { 
    MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2,zoomLevel)*self.frame.size.width/256); 
    [MKMapView animateWithDuration:ANIMATION_DURATION animations:^{ 
     [self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:YES]; 
    }]; 
} 
+0

buen trabajo. ¡Gracias! – boraseoksoon

11

Y aquí es una herramienta fácil de utilizar la extensión Swift en caso de que alguien se topa con esto en el futuro

import MapKit 

extension MKMapView { 
    func animatedZoom(zoomRegion zoomRegion:MKCoordinateRegion, duration:NSTimeInterval) { 
     MKMapView.animateWithDuration(duration, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: UIViewAnimationOptions.CurveEaseIn, animations: { 
     self.setRegion(zoomRegion, animated: true) 
     }, completion: nil) 
    } 
} 

UPD: Swift versión 3

extension MKMapView { 
    func animatedZoom(zoomRegion:MKCoordinateRegion, duration:TimeInterval) { 
     MKMapView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: UIViewAnimationOptions.curveEaseIn, animations: { 
      self.setRegion(zoomRegion, animated: true) 
      }, completion: nil) 
    } 
} 
+0

¡La solución perfecta! ¡Gracias! – beseder