2010-10-29 67 views
2

我在MapKit一個新手的iPhone,並試圖實現這一點,出於某種原因,我不能看到當前位置的藍色小點,其他人有這個問題????MapKit不顯示藍點的當前位置

#import "DetailMapViewController.h" 
#import "mapAnnotations.h" 

@implementation DetailMapViewController 

@synthesize inStock; 

-(void)getlocation:(CLLocationCoordinate2D)loc 
{ 
    location = loc; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationItem.title = @"Street View"; 
    mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; 
    mapView.delegate=self;  
    //MKCoordinateRegion region; 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 5000, 5000); 

    mapAnnotations *ann = [[mapAnnotations alloc] init]; 
    ann.title = @""; 
    ann.subtitle = @""; 
    ann.coordinate = region.center; 

    mapView.showsUserLocation = YES; 
    [mapView addAnnotation:ann]; 
    [mapView setRegion:region animated:TRUE]; 
    [mapView regionThatFits:region]; 
    [self.view insertSubview:mapView atIndex:0]; 
} 


- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; 

    if (annotation == mapView.userLocation) 
    { 

     annView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"blueDot"]; 
     if (annView != nil) 
     { 
      annView.annotation = annotation; 
     } 
     else 
     { 
      annView = [[[NSClassFromString(@"MKUserLocationView") alloc] initWithAnnotation:annotation reuseIdentifier:@"blueDot"] autorelease]; 


     } 
    } 

    if([inStock isEqual:@"yes"]){ 
     annView.pinColor = MKPinAnnotationColorGreen; 
    } 
    if([inStock isEqual:@"no"]){ 
     annView.pinColor = MKPinAnnotationColorRed; 
    } 
    if([inStock isEqual:@"unknown"]){ 

     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]]; 
     [annView addSubview:imageView]; 




    } 
    annView.animatesDrop=TRUE; 
    annView.canShowCallout = YES; 
    annView.calloutOffset = CGPointMake(-5, 5); 
    return annView; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 


@end 
+0

我看到你有showsUserLocation =是的,這應該做的伎倆,除非你沒有連接XIB文件到mapview控制到控制器? – pdiddy 2010-10-29 21:23:35

+0

你確保你的當前位置是上面'location'5000米內? – bosmacs 2010-10-29 21:26:43

+0

我AVE不能保證我在5000米 - 我從來沒有使用過XIB文件。 – vivianaranha 2010-10-29 21:30:04

回答

8

的viewForAnnotation目前正在寫的,試圖顯示當前位置,因爲「藍點」的註解視圖不具備pinColor或animatesDrop屬性時,就應該真正崩潰的方式。

嘗試將其更改爲以下:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    if ([annotation isKindOfClass:MKUserLocation.class]) { 
     //user location view is being requested, 
     //return nil so it uses the default which is a blue dot... 
     return nil; 
    } 

    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; 

    if([inStock isEqual:@"yes"]){ 
     annView.pinColor = MKPinAnnotationColorGreen; 
    } 
    if([inStock isEqual:@"no"]){ 
     annView.pinColor = MKPinAnnotationColorRed; 
    } 
    if([inStock isEqual:@"unknown"]){ 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]]; 
     [annView addSubview:imageView]; 
    } 
    annView.animatesDrop=TRUE; 
    annView.canShowCallout = YES; 
    annView.calloutOffset = CGPointMake(-5, 5); 
    return annView; 
} 

在模擬器上,用戶的位置將是加利福尼亞州Cupertino,美國(舊金山往南一點)。如果你自己的註釋不在5000米範圍內,你將看不到藍點。您必須縮小才能看到它。

+0

不工作...謝謝 – vivianaranha 2010-10-30 06:15:03

+1

它爲我工作謝謝 – JonLOo 2010-12-06 13:19:38

+0

這是主題,無論我的問題是,我能看到我的模擬器當前位置? – Emon 2012-01-18 10:57:34

2
self.mapView.showsUserLocation = YES; 
+0

如果你仔細閱讀這個問題,你會看到他已經使用這個屬性。 – psycho 2012-09-25 07:36:12