Анимированный зум до местоположения / метки карты при открытии карты iOS

Я видел это в других приложениях, например, в ios 6 starbucks, когда открывается мой картограф, я хочу, чтобы он отображал регион как весь Британский / Британский острова, а затем я хочу, чтобы он увеличивал мои указанные точки региона.,

Обновленный код:

- (void)viewDidLoad
{

[super viewDidLoad];
// Do any additional setup after loading the view.
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = 54.5;
region.center.longitude = -3.5;
region.span.longitudeDelta = 10.0f;
region.span.latitudeDelta = 10.0f;
[mapView setRegion:region animated:NO];

[self performSelector:@selector(zoomInToMyLocation)
           withObject:nil
           afterDelay:2]; //will zoom in after 1.5 seconds
}

-(void)zoomInToMyLocation
{
MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = 51.502729 ;
region.center.longitude = -0.071948;
region.span.longitudeDelta = 0.19f;
region.span.latitudeDelta = 0.19f;
[mapView setRegion:region animated:YES];

[mapView setDelegate:self];

[self performSelector:@selector(selectAnnotation)
           withObject:nil
           afterDelay:0.5]; //will zoom in after 0.5 seconds

}

-(void)selectAnnotation
{

DisplayMap *ann = [[DisplayMap alloc] init];
ann.title = @"Design Museum";
ann.subtitle = @"Camberwell, London";
ann.coordinate = region.center;
[mapView addAnnotation:ann];

}

Не знаю, если это правильно, потому что ошибка этой строки

ann.coordinate = region.center;

2 ответа

Решение

Если вы хотите начать с показа одного региона, а затем увеличить, вы должны выпустить два или более setRegion звонит, потому что setRegion сам по себе не позволяет контролировать начальную область или скорость анимации.

В viewDidLoadустановить начальный регион span так что вся Великобритания видна (попробуйте дельты 10.0 вместо 0.15). Вы также можете установить animated в NO для начального региона.

Потом до конца viewDidLoadзапланируйте увеличение на несколько секунд позже:

- (void)viewDidLoad
{
    ...

    [self performSelector:@selector(zoomInToMyLocation) 
               withObject:nil 
               afterDelay:5]; //will zoom in after 5 seconds
}

zoomInToMyLocation Метод может выглядеть так:

-(void)zoomInToMyLocation
{
    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = 51.502729 ;
    region.center.longitude = -0.071948;
    region.span.longitudeDelta = 0.15f;
    region.span.latitudeDelta = 0.15f;
    [mapView setRegion:region animated:YES];
}


Одна вещь, о которой вам, возможно, придется позаботиться при использовании performSelector - отменить ожидающий вызов, если представление закрыто или освобождено до запланированного запуска вызова. Например, если пользователь закрывает вид через две секунды после его загрузки. Три секунды спустя запланированный метод все еще может быть вызван, но потерпит крах, так как представление исчезло. Чтобы избежать этого, отмените все ожидающие исполнения в viewWillDisappear: или где это уместно:

[NSObject cancelPreviousPerformRequestsWithTarget:self];
MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = Your Latitude ;
region.center.longitude = Your Longitude;
region.span.longitudeDelta =  0.01f;
region.span.latitudeDelta =  0.01f;
[map setRegion:region animated:YES];
[map addAnnotation:ann];
Другие вопросы по тегам