Tutorial :showsUserLocation returns pin instead of blue dot in iPhone simulator


This is my -mapView:viewForAnnotation method which drops pins when i create annotation views. But when i set mapView.showsUserLocation = YES; in -viewDidLoad, i get a pin dropped on Infinite Loop (expected - in simulator) and not the normal blue dot.

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{       MKAnnotationView *anno = nil;       //create a pin annotation view  MKPinAnnotationView  *pin=[[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]autorelease];        [pin setPinColor:MKPinAnnotationColorRed];      pin.animatesDrop=YES;      pin.canShowCallout = YES;      pin.calloutOffset = CGPointMake(-5, 5);      anno = pin;      return anno;  }  

How can i get it to drop pins and show the blue dot as well?



Really simple to fix, although unsure if this is the correct way to do it...

if (annotation == mapView.userLocation){      return nil; //default to blue dot  }  


Similar to the other answer, here's something close:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation   {      NSString *annotationType = [NSString stringWithCString:object_getClassName(annotation)];      if ([annotationType compare:@"NSKVONotifying_MKUserLocation"] == 0)          return nil;      ...  }  

Of course, use something like this at your own risk. It could stop working tomorrow if Apple decided to change that name.


Often you use your own class of annotation to look up information related to the annotation. In that case, to only handle your own annotations, use something like

if ([annotation isKindOfClass:[MapLocation class]]) {}  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »