Быстро добавить один контакт в MKMapView? - PullRequest
61 голосов
/ 27 марта 2012

У меня есть координата GPS (широта, долгота), и я хочу быстро разместить один вывод на MKMapView, показывающий эту позицию. Все работает просто отлично, но так как мне нужен только один пин без вызова, есть ли более быстрый способ сделать это или что у меня ниже того, что нужно сделать?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation {
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"DETAILPIN_ID"];
    [pinView setAnimatesDrop:YES];
    [pinView setCanShowCallout:NO];
    return pinView;
}

Примечание: мне не нужно проверять многократно используемые аннотации, поскольку я использую булавку только для отображения позиции в подробном виде (который уничтожается и воссоздается при следующем запросе подробного вида).

Ответы [ 6 ]

122 голосов
/ 27 марта 2012

Вместо использования метода -mapView:viewForAnnotation: просто поместите код для MKPointAnnotation в ваш метод -viewDidLoad.Это не оживит падение, но это очень просто.

// Place a single pin
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:centerCoordinate];
[annotation setTitle:@"Title"]; //You can set the subtitle too
[self.mapView addAnnotation:annotation];

Swift версия:

let annotation = MKPointAnnotation()
let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29)
annotation.coordinate = centerCoordinate
annotation.title = "Title"
mapView.addAnnotation(annotation)
37 голосов
/ 19 марта 2014

Вы можете установить точку, а также регион следующим образом:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon);

MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
MKCoordinateRegion region = {coord, span};

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coord];

[self.staticMapView setRegion:region];
[self.staticMapView addAnnotation:annotation];
6 голосов
/ 25 сентября 2016

Быстрая версия добавления пин-кода в MKMapView:

func addPin() {
    let annotation = MKPointAnnotation()
    let centerCoordinate = CLLocationCoordinate2D(latitude: 20.836864, longitude:-156.874269)
    annotation.coordinate = centerCoordinate
    annotation.title = "Lanai, Hawaii"
    mapView.addAnnotation(annotation)
}

Быстрая версия фокусировки области или булавки

func focusMapView() {
    let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269)
    let span = MKCoordinateSpanMake(0.1, 0.1)
    let region = MKCoordinateRegionMake(mapCenter, span)
    mapView.region = region
}

Чтобы узнать больше, посетите страницу " Загрузка MKMapView с помощью Swift ".

6 голосов
/ 21 января 2014

Самый простой и простой способ удаления булавки и отображения текущего местоположения в представлении карты - просто добавить этот код в метод viewDidLoad. (Предполагая, что текущее местоположение пользователя уже выбрано вами).

NSString *display_coordinates=[NSString stringWithFormat:@"Latitude is %f and Longitude is %f",coordinate.longitude,coordinate.latitude];

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coordinate];
[annotation setTitle:@"Click Labs"];            
[annotation setSubtitle:display_coordinates];
[mapView addAnnotation:annotation];
5 голосов
/ 09 марта 2018

Просто вы можете добавить это как:

    mapView.mapType = MKMapType.standard

    let location = CLLocationCoordinate2D(latitude: 23.0225,longitude: 72.5714)

    let span = MKCoordinateSpanMake(0.05, 0.05)
    let region = MKCoordinateRegion(center: location, span: span)
    mapView.setRegion(region, animated: true)

    let annotation = MKPointAnnotation()
    annotation.coordinate = location
    annotation.title = "Javed Multani"
    annotation.subtitle = "Surat, India"
    mapView.addAnnotation(annotation)

Это выглядит как:

image

4 голосов
/ 27 марта 2012

Поскольку вы хотите анимировать перетаскивание, вам нужно будет реализовать viewForAnnotation, как вы сделали, потому что это свойство NO по умолчанию.

Если вам не нужно анимировать отбрасывание, вы можете полностью исключить реализацию метода viewForAnnotation и отключить выноску, установите аннотацию title на ноль или пустую при добавлении аннотации.

Если вам нужна анимация сбрасывания булавки, и вы также показываете местоположение пользователя (синяя точка), вам также нужно проверить MKUserLocation в viewForAnnotation и вернуть nil.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...