MKMapView
автоматически помещает аннотацию класса MKUserLocation
, когда вы устанавливаете mapView.showsUserLocation = YES
.
Вы можете заменить представление по умолчанию для этой аннотации на любое представление по умолчанию, которое вы хотите, выполнив это в mapView:viewForAnnotation:
:
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
// replace the following with code to generate and return custom user position annotation view
return customAnnotationView;
}
//*** other code ***//
}
Обновление:
Если все, что вы хотите сделать, это установить (сначала) пин-код в месте пользователя при загрузке представления, то вам придется подождать, пока телефон сможет получить нужные вам данные, поскольку это занимает некоторое время. Добавьте свою аннотацию в mapView:didUpdateUserLocation
при первом вызове, и это должно помочь:
- (void) mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation {
static BOOL annotationAdded = NO;
if (!annotationAdded) {
annotationAdded = YES;
//*** add annotation to mapView ***//
}
}
Заключительный комментарий:
Как правило, я бы не стал устанавливать статический вывод в местоположении пользователя при первом вызове этого метода, а вместо этого решил бы просто использовать стандартную синюю точку по умолчанию. Это связано с тем, что службам определения местоположения в телефоне требуется время, чтобы найти точные данные о местонахождении пользователя, но в интересах времени он отправит вам обновления местоположения как можно скорее. Это означает, что первое обновление местоположения может быть не очень точным, но последующие обновления могут быть гораздо более точными. Вот почему стандартная синяя точка иногда часто меняет положение в течение первых нескольких минут появления на карте.
Просто предостережение. Очевидно, что вы выбираете, зависит от цели вашего приложения.