Я пытаюсь добавить расстояние от позиции пользователя к выбранному субтитрам аннотации в mapview. Механика работы работает, но фактическая выноска становится беспорядочной в первый раз, когда она отображается. Кажется, проблема с перерисованием.iOS SDK Mapview Аннотации выносят ошибку перерисовывания
Последующие краны на штифте показывают правильное расположение.
Вот соответствующий код:
// вызывается при выборе аннотаций
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
MKPointAnnotation *selectedAnnotation = view.annotation;
//attempt to add distance on annotation
CLLocation *pointALocation = [[CLLocation alloc]
initWithLatitude:selectedAnnotation.coordinate.latitude
longitude:selectedAnnotation.coordinate.longitude];
float distanceMeters = [pointALocation distanceFromLocation:locationManager.location];
//for sending info to detail
myPinTitle = selectedAnnotation.title;
[selectedAnnotation setSubtitle:[NSString stringWithFormat:@"%.2f miles away", (distanceMeters/1609.344)]];
} Я пытался дозвониться [Просмотр setNeedsDisplay], но безрезультатно.
Заранее за вашу помощь.
Решение, что работал
Вот решение, которое я наконец придумал. Кажется, это работает.
Я вырезан код дубликата от метода didSelectAnnotationView, выше, и придумал:
//called when user location changes
- (void)updatePinsDistance
{
for (int x=0; x< [[mapView annotations]count]; x++) {
MKPointAnnotation *thisPin =[[mapView annotations] objectAtIndex:x];
//attempt to add distance on annotation
CLLocation *pointALocation = [[CLLocation alloc]
initWithLatitude:thisPin.coordinate.latitude
longitude:thisPin.coordinate.longitude];
float distanceMeters = [pointALocation distanceFromLocation:locationManager.location];
NSString *distanceMiles = [NSString stringWithFormat:@"%.2f miles from you",
(distanceMeters/1609.344)];
[thisPin setSubtitle:distanceMiles];
}
}
Оригинальный субтитр добавляется при создании аннотаций, но я хочу показать расстояние от текущего местоположения пользователя до выбранной точки, поэтому я не могу добавить эту информацию. Кроме того, замещенная строка расстояния может быть фактически меньше первоначальной. –
Вместо этого вы должны пересчитать его при изменении местоположения пользователя с помощью метода mapView: didUpdateUserLocation: delegate. Честно говоря, изменение субтитров при показе выноски не является разумным делом. –
Итак, следует ли менять субтитры каждой аннотации, когда позиция пользователя изменяется, даже если она никогда не будет видна, а не только та, которая должна отображаться? Я смущен, как это разумнее. Можете ли вы уточнить? Благодарю. –