setRegion的速度用于MKMapView

问题描述

| 如果我将“ 0”中的区域更改为“ 1”,是否可以设置该动画更改的速度或持续时间?我浏览了文档和Google,但一无所获。     

解决方法

        这是一个易于使用的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)
    }
}
更新到Swift 5:
extension MKMapView {
    func animatedZoom(zoomRegion:MKCoordinateRegion,duration:TimeInterval) {
        MKMapView.animate(withDuration: duration,options: UIView.AnimationOptions.curveEaseIn,animations: {
            self.setRegion(zoomRegion,animated: true)
            },completion: nil)
    }
}
    ,        我可以通过编辑问题回答-设置MKMapView的缩放级别-来设置
setRegion
动画的持续时间,如下所示:
#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];
    }];
}