2011-01-27 40 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 2011-01-27 16:49:35

+0

嗨,我嘗試了幾件事[安釋放];並用不同的變量重做代碼,並嘗試循環沒有工作的幫助嗎? – user592514 2011-01-28 01:07:12

回答

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分。 (具有相同的名稱和副標題)。

修改:顯示不同的針圖像。您必須將新字段作爲NSString *圖像添加到DisplayMap。並在循環內添加路徑圖像。

- (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; 

}