Можно ли расположить вид карты таким образом, чтобы текущее положение пользователя не находилось в центре вида?


Я рисую карту в виде, охватывающем все пространство экрана устройства.

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

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

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

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

1 2

1 ответ:

Самое простое решение состоит в том, чтобы применить смещение к координате, чтобы немного сдвинуть карту, используя преимущество диапазона области MKMapView.

CLLocationCoordinate2D newCenter = userCoordinate;
newCenter.latitude -= _mapView.region.span.latitudeDelta * 0.50;
[self.mapView setCenterCoordinate:newCenter animated:YES];

Значение 0.50 существует только для того, чтобы дать вам пример. Изменяя его, вы можете регулировать смещение.

Вы также можете взять текущее положение центра, преобразовать его в CGPoint, затем добавить желаемое смещение в пикселях к CGPoint и преобразовать его обратно в CLLocationCoordinate2D:

UIOffset offset = UIOffsetMake(30.0f, 40.0f);
         offset.horizontal
         offset.vertical

CGPoint point = [_mapView convertCoordinate:userCoordinate
                              toPointToView:_mapView];
point.x += offset.horizontal;
point.y += offset.vertical;

CLLocationCoordinate2D newCenter = [_mapView convertPoint:point            
                                     toCoordinateFromView:_mapView];
[_mapView setCenterCoordinate:newCenter animated:YES];

Надеюсь, что это помогает.