iOS MKMapView-остановить отображение карты от повторного центрирования к местоположению пользователя, если пользователь развернул / перетащил представление карты


У меня есть MKMapView, в котором я установил:

[self.mapView setShowsUserLocation:YES];

Я хочу показать местоположение пользователя и обновить местоположение, если он/она перемещается. Когда didUpdateUserLocation вызывается, кажется, что карта переориентируется на местоположение пользователя, даже если пользователь развернул приложение, чтобы увидеть другой регион. Я хочу, чтобы вы могли отслеживать положение пользователя, но также позволяли ему исследовать карту. Мой didUpdateUserLocation в настоящее время выглядит так:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {

    _currentLocation = userLocation;

    [self.mapView setRegion:MKCoordinateRegionMake(CLLocationCoordinate2DMake(self.currentLocation.coordinate.latitude + 0.0015, self.currentLocation.coordinate.longitude), MKCoordinateSpanMake(0.01, 0.01)) animated:NO];

    [...]
}
Есть какие-нибудь идеи о том, что я должен сделать, чтобы достичь того, чего я хочу?
2 2

2 ответа:

Пока вы устанавливаете свойство showsUserLocation вашего MKMapView как YES, расположение пользователя автоматически обновляется (cf Apple Docs).

Следует удалить строку "setRegion", поскольку эта строка центрирует представление на местоположении пользователя.

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

- (IBAction)beStill:(UIButton *)sender {
_mapView.showsUserLocation = NO;
}

- (IBAction)moveOn:(UIButton *)sender {
_mapView.showsUserLocation = YES;
}

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

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

Таким образом, мне не нужно было ничего делать с setRegion