Центр MKMapView на userLocation (изначально) - работает только на iPhone 4? - PullRequest
2 голосов
/ 24 февраля 2011

Я реализовал следующий метод MKMapView, который запускается после добавления аннотаций.У меня моя карта MKMapView (parishMap) установлена ​​на «Показывает местоположение пользователя» в Интерфейсном Разработчике, и после загрузки вида карты синяя точка всегда появляется в течение секунды или около того на виде карты.

Вот код, который у меня естьв моей реализации контроллера Map View:

// Center map on user location (initially)
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    for(MKAnnotationView *annotationView in views) {
        if(annotationView.annotation == parishMap.userLocation) {
            MKCoordinateRegion region;
            MKCoordinateSpan span;

            span.latitudeDelta=0.03;
            span.longitudeDelta=0.03;

            CLLocationCoordinate2D location=parishMap.userLocation.coordinate;

            location = parishMap.userLocation.location.coordinate;

            region.span=span;
            region.center=location;

            [parishMap setRegion:region animated:TRUE];
            [parishMap regionThatFits:region];
        }
    }
}

Когда я открываю вид карты на моем iPhone 4, вид карты всегда (и почти сразу) перемещается по центру точки userLocation.Однако, когда я открываю вид карты на iPhone 3Gs или iPod Touch (2010), он не центрируется на пользовательском местоположении, а просто остается с масштабом / регионом по умолчанию, который я установил для вида карты.

Любойидеи о том, почему этот код не будет работать для устройств, отличных от iPhone 4 (все они работают на последней версии iOS 4.2.x)?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Это, вероятно, проблема с количеством времени, которое требуется GPS для блокировки позиции на этих разных устройствах.

Я бы рекомендовал использовать CLLocationManager и его методы делегата для центрирования карты.

Вы можете начать обновление местоположения, создав экземпляр CLLocationManager, установив для его свойства делегата значение self и затем реализовав:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

Где вы можете соответствующим образом центрировать карту на основепоследнее обновление местоположения.

0 голосов
/ 24 февраля 2011

вы пытались использовать этот код для центрирования карты:

[mapView setCenterCoordinate:location animated:YES];

Я не уверен, почему он будет работать на iPhone 4, а не на других, но этот код я использую для настройки региона:

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(location, 0.03, 0.03);
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];

    [mapView setRegion:adjustedRegion animated:YES];

Попробуйте так и посмотрите, как это работает. То, как вы делаете метод regionThatFits, на самом деле это не то, как этот метод используется. Вы можете попробовать закомментировать последнюю строку вашего кода, это не должно иметь никакого значения. В любом случае, попробуйте метод, который я только что дал, и дайте мне знать, если у вас есть какие-либо вопросы.

...