Отображение нескольких аннотаций с расположением пользователя в центре

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

MKMapRect zoomRect = MKMapRectNull;

int i = 0;
for (Post *post in _allPostsToList) {
    if (((post.location2D.latitude == 0.0f)&&(post.location2D.longitude == 0.0f))||(!CLLocationCoordinate2DIsValid(post.location2D))) {
        i++;
        continue;
    }
    MyAnnotation *annotation = [[MyAnnotation alloc] initWithpost:post];
    annotation.tag = i++;
    [mapView addAnnotation:annotation];

    MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
    MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
    zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
}
[mapView setVisibleMapRect:zoomRect animated:YES];

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

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        MKMapRect zoomRect = mapView.visibleMapRect;
        MKMapPoint annotationPoint = MKMapPointForCoordinate(newLocation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
        zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
        [mapView setVisibleMapRect:zoomRect animated:YES];
        [manager stopUpdatingLocation];

   }

Он работает, но не центрирует местоположение пользователя. Может кто-нибудь решить эту проблему

2 ответа

В didUpdateToLocation вы получаете текущий видимый Rect (zoomRect), затем, если он не равен нулю, вы присоединяете его с помощью pointRect и масштабируете / панорамируете к нему. Как это в конечном итоге будет сосредоточено на pointRect? Это случилось бы, если бы у них обоих был точно такой же центр.

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

Просто пари; как насчет доступа к региону вашего mapView и попытаться установить новый центр:

MKCoordinateRegion region = mapView.region;
region.center = newLocation.coordinates;
[mapView setRegion:region animated:YES];
Другие вопросы по тегам