2011-08-11 12 views
0

私はあるタグを持つものを見つけるために私の地図上の注釈を踏んでいます。私はこの注釈を削除し、新しいもの(差分色)を追加しますMKMapViewでMKAnnotationsを扱うときにスローダウン

問題は非常に長い時間がかかります。理由は分かりません。それは300の注釈を通って行く、それは20秒かかる!どうすればこれをスピードアップできますか?たとえば、現在表示されているアノテーションのみを取得する方法がありますか?または、注釈がある場合は、mapView.annotations配列内のインデックスが何であるかを教えてもらえますか?そうではありません。

for (int i =0; i < [self.mapView.annotations count]; i++) 
{ 
     if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[BasicMapAnnotation class]]) 
     { 
      BasicMapAnnotation *bmaTemp =(BasicMapAnnotation*)[self.mapView.annotations objectAtIndex:i]; 
      if (bmaTemp.mapTag == pinTag) { 
       [self.mapView removeAnnotation:[self.mapView.annotations objectAtIndex:i]]; 
       self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:[shop.latitude doubleValue] andLongitude:[shop.longitude doubleValue]] autorelease]; 
       self.customAnnotation.mapTag = pinTag; 
       [self.mapView addAnnotation:self.customAnnotation]; 
      } 

     } 
} 

答えて

1

あなたが変更したい注釈が実際に表示されていることを確認している場合は、単一の指定された注釈のインデックスを知りたい場合は、あなたが

for (id annotation in [self.mapView annotationsInMapRect:self.mapView.visibleMapRect]){ 
    if([annotation isKindOfClass:[BasicMapAnnotation class]]){ 
     BasicMapAnnotation *annotationToModify = annotation; 
     if (bmaTemp.mapTag == pinTag) { 
      [self.mapView removeAnnotation:annotationToModify]; 
      self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:[shop.latitude doubleValue] andLongitude:[shop.longitude doubleValue]] autorelease]; 
      self.customAnnotation.mapTag = pinTag; 
      [self.mapView addAnnotation:self.customAnnotation]; 
     } 
    } 
} 

のようなものを使用することができます

int annotationIndex = [self.mapView.annotations indexOfObject:givenAnnotation]; 

私はこれをここに書いていますので、それが動作するかどうかは教えてください。

関連する問題