Обновите MKAnnotationView на MKMapView

Симпсоны:

array_of_hashes.sort_by { |hsh| hsh[:zip] }

Примечание:

При использовании sort_by вам нужно присвоить результат новой переменной: array_of_hashes = array_of_hashes.sort_by{} в противном случае вы можете использовать «bang "метод для изменения на месте: array_of_hashes.sort_by!{}

29
задан cocoapriest 7 November 2009 в 22:25
поделиться

3 ответа

I haven't tried it myself, but it might work:
Получите представление для аннотации с помощью метода MKMapView - (MKAnnotationView *) viewForAnnotation: (id ) annotation и установите для него новое изображение.

Edit: Пытался сделать это Я и этот подход у меня отлично сработали:

//  Function where you got new image and want to set it to annotation view
for (MyAnnotationType* myAnnot in myAnnotationContainer){
    MKAnnotationView* aView = [mapView viewForAnnotation: myAnnot];
    aView.image = [UIImage imageNamed:@"myJustDownloadedImage.png"];
}

После вызова этого метода все изображения аннотаций были обновлены.

35
ответ дан 28 November 2019 в 01:33
поделиться

Это единственный найденный мной способ принудительной перерисовки MKAnnotationViews:

// принудительное обновление вида карты (в противном случае виды аннотаций не будут перерисовываться)

CLLocationCoordinate2D center = mapView.centerCoordinate;

mapView.centerCoordinate = center;

Кажется бесполезным, но работает.

2
ответ дан 28 November 2019 в 01:33
поделиться

Я хотел обновить пользовательский контакт местоположения с новым выбранным аватаром. Я нашел другое быстрое решение для того случая. У меня есть 2 экрана. Первый - для выбора аватара, и второе для отображения пользователя на карте.

быстрый 5 можно изменить пользовательское изображение местоположения путем создания MKAnnotationView

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation {
        let userIdentifier = "UserLocation"
        var userView = mapView.dequeueReusableAnnotationView(withIdentifier: userIdentifier)
        if userView == nil {
            userView = MKAnnotationView(annotation: annotation, reuseIdentifier: userIdentifier)
        } else {
            userView?.annotation = annotation
        }

        userView!.image = UIImage(named: "avatar1") //your image

        return userView
    }

    return nil
 }

Поэтому, если пользователь изменит аватар на что-то еще, например, на "avatar2" это не обновится.

для обновления пользовательского местоположения, отображают, я добавил этот код в viewWillAppear ()

 self.mapView.showsUserLocation = false
 self.mapView.showsUserLocation = true
-1
ответ дан 28 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: