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 ответа:
Пока вы устанавливаете свойство showsUserLocation вашего MKMapView как YES, расположение пользователя автоматически обновляется (cf Apple Docs).
Следует удалить строку "setRegion", поскольку эта строка центрирует представление на местоположении пользователя.
Я знаю, что этот пост давно ушел, но я хотел бы поделиться тем, что сработало для меня во время поиска ответов на многие подобные вопросы. Многие из них вообще не работали. Я хотел переместить свое местоположение в одну сторону, пока я отправлял по электронной почте скриншот аннотаций, иначе мне пришлось бы уменьшить масштаб, чтобы область под моими пинами занимала ровно четверть доступной области.
- (IBAction)beStill:(UIButton *)sender { _mapView.showsUserLocation = NO; } - (IBAction)moveOn:(UIButton *)sender { _mapView.showsUserLocation = YES; }
Пока я все еще разбирался с этим, я поместил две кнопки на экран, но затем изменил пользовательский интерфейс так, что независимо от того, что было последним элементом управления, к которому прикоснулся пользователь, было также безопасно определить, хочет ли он его включить или выключить. Затем я просто вставил инструкции в соответствующие методы и удалил кнопки beStill и moveOn.
Это важно, потому что при запуске приложения вы сначала хотите, чтобы функция была включена, если только вы не находитесь в Атлантическом океане у западного побережья Африки
Таким образом, мне не нужно было ничего делать с setRegion