2011-01-27 19 views
1

私はiPhone SDK開発の初心者です。私はMapKitでアプリケーションを作ろうとしています。最初のビットを行いました。アプリケーションに複数のピンと注釈を追加したいのですが、ここで失われています。続きIPhone SDK MapKIt複数のポイントと注釈

は、私はあなただけの複数のポイントを作るためにあなたのコードを再利用し、すでに正しい軌道に乗っている

-(void)viewDidLoad{ 
[super viewDidLoad]; 

[mapView setMapType:MKMapTypeStandard]; 
[mapView setZoomEnabled:YES]; 
[mapView setScrollEnabled:YES]; 
    MKCoordinateRegion region={{0.0,0.0,},{0.0,0.0}}; 
region.center.latitude = 26.438047; 
region.center.longitude = 50.116422; 
region.span.latitudeDelta=0.01f; 
region.span.longitudeDelta=0.01f; 
[mapView setRegion:region animated:YES]; 
[mapView setDelegate:self]; 

DisplayMap *ann = [[DisplayMap alloc] init]; 
ann.title = @"Corporate Office"; 
ann.subtitle [email protected]"King Khalid Street"; 
ann.coordinate=region.center; 
[mapView addAnnotation:ann]; 
} 

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: 
(id <MKAnnotation>) annotation{ 
MKPinAnnotationView *pinView=nil; 
if (annotation != mapView.userLocation) { 
    static NSString *defaultPinID = @"com.invasivecode.pin"; 
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinView ==nil) pinView = [[[MKPinAnnotationView alloc] 
      initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 
    pinView.pinColor=MKPinAnnotationColorRed; 
    pinView.canShowCallout=YES; 
    pinView.animatesDrop=YES; 
    pinView.calloutOffset= CGPointMake(-5, 5); 
    } 
else { 
    [mapView.userLocation setTitle:"I am here"]; 
} 
return pinView; 
} 
+0

同じように。どうしたの?ちなみに、addAnnotationの後に '[ann release];を実行してください。 – Anna

+0

こんにちは、私はいくつかのことを試しました[ann release];別の変数を使用してコードをやり直してみてください。 – user592514

+0

試したfor-loopを表示します(質問に追加してください)。 – Anna

答えて

2

このコードに複数のピンを追加する方法のコードです。例えば :結果で

DisplayMap *ann = [[DisplayMap alloc] init]; 


for(int i =1;i<=5;i++){ 
    region.center.latitude = 26.438047+i; 
    region.center.longitude = 50.116422+i; 
    ann.title = [NSString stringWithFormat:@"title %d",i)]; 
    ann.subtitle =[NSString stringWithFormat:@"subtitle %d",i)]; 
    ann.image = [NSString [email protected]"image_%d.png",i]; 

    ann.coordinate=region.center; 
    [mapView addAnnotation:ann]; 
    } 
[ann release]; 

、座標異なる5点を表示します。 (同じ名前とサブタイトルで)。

編集:異なるピン画像を表示します。 DisplayStringにNSString *イメージとして新しいフィールドを追加する必要があります。 forループ内にパスイメージを追加します。あなたが最初にピンを追加している

- (MKAnnotationView *) mapView:(MKMapView *)amapView viewForAnnotation:(id  <MKAnnotation>) annotation 
    { 
NSLog(@"pinnview before release %d",[pinView retainCount]); 

if (pinView !=nil) { 
    pinView =nil; 
    [pinView release]; 
} 
NSLog(@"pinnview after release %d",[pinView retainCount]); 

// if it's the user location, just return nil. 
if ([annotation isKindOfClass:[MKUserLocation class]]) 
    return nil; 

if(annotation != map.userLocation) 
{ 

    static NSString *defaultPinID = @"your-pin"; 

    pinView = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 

    if (counting < [map.annotations count]) 
    { 
     counting++; 

     pinView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 


     for(DisplayMap* a in map.annotations) 
     { 
      if (annotation == a){ 
       pinView.image = 
       [UIImage imageWithContentsOfFile: 
       [[NSBundle mainBundle] pathForResource:a.image ofType:nil]]; 
      } 
     } 
     pinView.centerOffset= CGPointMake(0,-10); 
     pinView.canShowCallout = YES; 


    } 

} 

return pinView; 

}

+0

こんにちは、このようにしていただきありがとうございますが、ピンを表示しなくなりました。私の質問を更新するこのアプローチを試しました – user592514

+0

(int i = 1; i <5; i ++){[mapView setMapType:MKMapTypeStandard]; [mapView setZoomEnabled:YES]; [mapView setScrollEnabled:YES]; MKCoordinateRegion領域= {{0.0,0.0、}、{0.0,0.0}}; region.center.latitude = 26.438047 + i; region.center.longitude = 50.116422 + i; region.span.latitudeDelta = 0.01f; region.span.longitudeDelta = 0.01f; [mapView setRegion:地域アニメーション:はい]; [mapView setDelegate:self]; DisplayMap * ann = [[DisplayMap alloc] init]; ann.title = @ "Corporate Office"; ann.subtitle = @ "King Khalid Street"; ann.coordinate = region.center; [mapView addAnnotation:ann]; } [release ann];} – user592514

+0

@tlikyu:複数のピンを作成するために、アノテーションごとに新しいインスタンスを作成する必要があります(例:user592514)。 – Anna

関連する問題