В настоящее время я учусь использовать инфраструктуру MKMapKit для iOS, но не могу найти хороших учебных пособий, поскольку большинство из них написаны на Swift (язык, который я еще не изучил) или просто слишком стары, чтобы быть актуальными. Поэтому мне было интересно, сможете ли вы, ребята, ответить на несколько конкретных вопросов, касающихся отображения местоположения пользователя и прав доступа.
В настоящее время мой код пуст, у меня инициализирован MKMapView, который прекрасно работает:
@interface ViewController () <MKMapViewDelegate>
...
mapView.frame = CGRectMake(0, 0, windowSize.width, windowSize.height);
mapView.delegate = self;
mapView.showsUserLocation = YES;
[self.view addSubview:mapView];
И способ увеличения определенного местоположения на карте:
- (void)setLocation:(CLLocationCoordinate2D)location {
float perimeter = 250.0f;
[mapView setRegion:MKCoordinateRegionMakeWithDistance(location, perimeter, perimeter) animated:YES];
}
Здесь отображается заранее определенное местоположение, координаты которого я получил из карт Google. Это все хорошо, но теперь я хотел бы добавить кнопку в свое приложение, чтобы найти текущую позицию пользователя и увеличить ее. Но здесь я заблудился. Я не могу найти ни одного хорошего учебника, который бы просто объяснил мне, как добиться этого с помощью Obj C. Некоторые говорят о CLCoreLocation и его делегатах, некоторые говорят, что это выполнимо только с MKMapKit, но пока ничего не получалось.
Кроме того, у меня возникают проблемы с запросом разрешения на использование GPS телефона. Я добавил следующую строку в файл info.plist:
Privacy - Location When In Use Usage Description
Я также добавил строку в качестве значения, но, похоже, не могу вызвать всплывающее окно, чтобы разрешить мне доступ к GPS. С одной попытки окно появилось на секунду, но затем сразу исчезло. Так что я тоже в растерянности.
Вот что я хотел бы достичь:
- Запросить разрешение на использование GPS при первом запуске приложения или когда пользователь нажимает кнопку текущего местоположения (если он или она по ошибке отказали в разрешении).
- Если есть разрешение, приложение должно по умолчанию увеличивать местоположение пользователя или, если разрешение не предоставлено, в заранее определенное местоположение (эта последняя часть фактически работает сейчас).
- Приложение не должно следовать за движением пользователя, но должно оставаться на месте, позволяя пользователю свободно перемещаться и масштабировать. Однако, если пользователь нажимает кнопку «Текущее местоположение», он должен увеличить свое местоположение, как при запуске.
Может ли кто-нибудь помочь мне с этим и, возможно, написать несколько строк о том, почему все так работает? Для Objective C не существует текущих руководств, так что я думаю, что это может быть полезно и для других.
Несколько дополнительных сведений: я использую Xcode 9.3 и делаю все программно (я не использую конструктор интерфейсов).
Спасибо большое!