Симпсоны:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
Примечание:
При использовании sort_by
вам нужно присвоить результат новой переменной: array_of_hashes = array_of_hashes.sort_by{}
в противном случае вы можете использовать «bang "метод для изменения на месте: array_of_hashes.sort_by!{}
I haven't tried it myself, but it might work:
Получите представление для аннотации с помощью метода MKMapView - (MKAnnotationView *) viewForAnnotation: (id
и установите для него новое изображение.
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"];
}
После вызова этого метода все изображения аннотаций были обновлены.
Это единственный найденный мной способ принудительной перерисовки MKAnnotationViews:
// принудительное обновление вида карты (в противном случае виды аннотаций не будут перерисовываться)
CLLocationCoordinate2D center = mapView.centerCoordinate;
mapView.centerCoordinate = center;
Кажется бесполезным, но работает.
Я хотел обновить пользовательский контакт местоположения с новым выбранным аватаром. Я нашел другое быстрое решение для того случая. У меня есть 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