iOS: увеличение масштаба для некоторых маркеров не работает в iOS 7
В моем приложении я использую этот код для увеличения карты, на которой расположен мой маркер:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
count++;
if (count == arrayResults.count){
MKMapRect zoomRect = MKMapRectNull;
for (id <MKAnnotation> annotation in mapView.annotations)
{
MKMapPoint annotationP = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationP.x, annotationP.y, 0.1, 0.1);
if (MKMapRectIsNull(zoomRect)) {
zoomRect = pointRect;
} else {
zoomRect = MKMapRectUnion(zoomRect, pointRect);
}
}
[mapView setVisibleMapRect:zoomRect animated:YES];
}
}
это прекрасно работает в iOS 6, но не в iOS 7, знаете почему? Спасибо
1 ответ
Этот код основан на очень определенных последовательностях вызова делегата.
count++
подразумевает, что предполагает didAddAnnotationViews
Метод делегата будет вызываться сразу и отдельно после добавления каждой аннотации.
Это небезопасное предположение независимо от версии iOS.
Поскольку этот код масштабирования не использует аннотации для масштабирования (ему просто нужны модели аннотаций - т.е. id<MKAnnotation>
объекты), это не должно быть в didAddAnnotationViews
на первом месте.
Просто поместите код масштабирования (часть внутри if
блок), сразу после кода, который добавляет аннотации (предположительно после for
цикл, который проходит через arrayResults
). Это должно работать в любой версии iOS.
Также обратите внимание, что в iOS 7 новый метод showAnnotations: animated: делает эту ручную конструкцию прямоугольной карты ненужной. В iOS 7 вы можете просто сделать:
[mapView showAnnotations:mapView.annotations animated:YES];