2013-11-06 4 views
1

В моем приложении я использую этот код, чтобы увеличить в моей карте, где мой маркер расположены: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, знаете ли вы, почему? thanks

ответ

0

Этот код основан на очень специфических вызывающих вызовах делегатов.

count++ подразумевает, что метод делегата didAddAnnotationViews будет вызываться немедленно и отдельно после добавления каждой аннотации.

Это небезопасное предположение, независимо от версии iOS.

Поскольку эта трансфокация код не полагаться на аннотации просмотров чтобы сделать изменение масштаба (он просто нуждается в аннотации модели -. То есть id<MKAnnotation> объектов), он не должен быть в didAddAnnotationViews в первое место.

Просто поместите код трансфокации (часть адреса внутри if блока), сразу после кода, который добавляет аннотацию (предположительно после for цикла, который проходит через arrayResults). Это должно работать в любой версии iOS.


Также обратите внимание, что в iOS 7 новый метод showAnnotations:animated: делает эту конструкцию для ручной сборки прямоугольной конструкции ненужной. В iOS 7 вы можете просто:

[mapView showAnnotations:mapView.annotations animated:YES]; 

 Смежные вопросы

  • Нет связанных вопросов^_^