2015-06-25 2 views
1

Я пытаюсь отобразить булавку в центре карты, к сожалению, что-то не так, и штырь появляется в середине справа от экрана.Center map on pin location

это мой код

// Single annotation 
[geocoder geocodeAddressString:self.detailsAnnotation completionHandler:^(NSArray* placemarks, NSError* error){ 
    for (CLPlacemark* aPlacemark in placemarks) 
    { 
     // Process the placemark. 
     self.latitudeOfPlaceFromTable = aPlacemark.location.coordinate.latitude; 
     self.longitudeOfPlaceFromTable = aPlacemark.location.coordinate.longitude; 
     MKCoordinateRegion viewRegion; 

     // 1 Center 
     CLLocationCoordinate2D zoomLocation; 
     zoomLocation.latitude = self.latitudeOfPlaceFromTable; 
     zoomLocation.longitude = self.longitudeOfPlaceFromTable; 

     // Span 
     MKCoordinateSpan span; 
     span.latitudeDelta = 0.01f; 
     span.longitudeDelta = 0.01f; 

     // 2 Region 
     viewRegion.center = zoomLocation; 
     viewRegion.span = span; 

     // 3 Add an annotation 
     MKPointAnnotation * point = [[MKPointAnnotation alloc] init]; 
     point.coordinate = zoomLocation; 
     point.title = self.titleAnnotation; 
     point.subtitle = self.detailsAnnotation; 
     [self.mapView addAnnotation:point]; 

     // 4 Center the map on pin 
     [self.mapView setRegion:viewRegion animated:YES]; 
    } 
}]; 

Может кто-то дает некоторую помощь? Благодаря

+0

У меня была аналогичная проблема, это может звучать глупо, но попробуйте установить центр после установки пролета. Это помогает? – scott

+0

нет, штырь всегда находится в правой части экрана, а не в центре ... – Dev790

ответ

2

Попробуйте изменить свою последнюю строку кода с этим:
[self.mapView setRegion:[self.mapView regionThatFits:viewRegion] animated:YES];

Обычно MapView не может отобразить точную область, что вы пытаетесь установить, потому что карта не является плоской.
яблочной документации по regionThatFits методы:

Настройка соотношения сторон указанной области для того, чтобы она вписывается в рамке вида карты в. Вы можете использовать этот метод для нормализации значений области перед их отображением на карте. Этот метод возвращает новую область, которая содержит указанную область и аккуратно вписывается в рамку представления карты.

Обновление: Другое предложение: убедитесь, что ширина карты не больше фактической ширины экрана. В другом случае рамка просмотра карты может выходить за пределы правой границы экрана, что приведет к неправильной центральной точке.

+0

: ((такие же результаты. – Dev790

+0

@ Dev790 Я обновил свой ответ. См. Раздел «Обновление» –

+0

Я думаю, что вы правы, я просто щелкните в раскадровке «Добавить отсутствующие противопоказания» для MapView, и теперь все в порядке. Я тоже изменился в раскадровке для mapView, режим «Центр» (я не уверен, что это необходимо). Спасибо всем! – Dev790