скорость setRegion для MKMapView

Если я изменю регион в setRegion на MKMapView, есть ли способ установить скорость или продолжительность этого изменения анимации? Я просмотрел документацию и Google, но ничего не нашел.


person thekevinscott    schedule 15.06.2011    source источник
comment
Нет, изменить их невозможно.   -  person Deepak Danduprolu    schedule 15.06.2011
comment
Вы проверили это: Управление скоростью анимации MKMapView в iOS6   -  person theaob    schedule 16.08.2013


Ответы (2)


И вот простое в использовании расширение 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, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 10, options: UIView.AnimationOptions.curveEaseIn, animations: {
            self.setRegion(zoomRegion, animated: true)
            }, completion: nil)
    }
}
person kernelpanic    schedule 02.09.2015
comment
Идеальное решение! Спасибо! - person beseder; 20.07.2016
comment
@beseder Согласен! - person AamirR; 12.03.2018

Я смог установить продолжительность анимации 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];
    }];
}
person Josh Gafni    schedule 28.07.2014