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



Question:

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?

Thanks


Solution:1

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  }  


Solution:2

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.


Solution:3

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
Previous
Next Post »