MKMapView的setRegion速度

the*_*ott 7 iphone region mkmapview ipad ios

如果我改变该地区的setRegion一个MKMapView,有没有一种方法来设置速度,或持续时间,该动画的变化?我查看了文档和谷歌,但一无所获.

ker*_*nic 19

这是一个易于使用的Swift扩展,以防将来有人偶然发现

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

UPD:Swift 3版本

extension MKMapView {
    func animatedZoom(zoomRegion:MKCoordinateRegion, duration:TimeInterval) {
        MKMapView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: UIView.AnimationOptions.curveEaseIn, animations: {
            self.setRegion(zoomRegion, animated: true)
            }, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*fni 6

我可以setRegion通过编辑问题的响应来设置动画的持续时间- 设置MKMapView的缩放级别 - 如下所示:

#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];
    }];
}
Run Code Online (Sandbox Code Playgroud)