2011-05-20 8 views
7

Estoy desarrollando un pines personalizados en un MapView en mi aplicación de iPhone. Aquí está el código:muestra la ubicación de los usuarios punto azul en iPhone MKMapView

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *AnnotationViewID = @"annotationViewID"; 

    MKAnnotationView *annotationView = (MKAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID]; 

    if (annotationView == nil) 
    { 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
    } 

    if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")]) { 

     MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
     //pin.pinColor = MKPinAnnotationColorRed; 
     annotationView = pin; 
    } 
    else 
    { 
     NSString *pin = [NSString stringWithFormat:@"pin%i.png",[[annotation imgNumber] intValue]]; 
     annotationView.image = [UIImage imageNamed:pin];//Canviar la chincheta per numero 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     [annotationView setRightCalloutAccessoryView:button]; 
     annotationView.annotation = annotation; 
     annotationView.canShowCallout = YES; 

    /********* Imagen a la izquierda en la burbuja *********/ 
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    // Set up the Left callout 
    UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    myDetailButton.frame = CGRectMake(0, 0, 23, 23); 
    myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
    myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    // Set the image for the button 
    //[myDetailButton setImage:[UIImage imageNamed:@"botocorreu.png"] forState:UIControlStateNormal]; 
    NSString *detailButton = [NSString stringWithFormat:@"%i",[[annotation imgNumber] intValue]]; 
    [myDetailButton setImage:[UIImage imageNamed:detailButton] forState:UIControlStateNormal]; 
    // Set the button as the callout view 
    annotationView.leftCalloutAccessoryView = myDetailButton; 
    annotationView.canShowCallout = YES; 
    } 
    return annotationView; 
    } 

Esto funciona bien, pero me muestra la ubicación del usuario con un pin rojo. Yo verifico "mostrar ubicación de usuario" en el IB. me gustaría utilizar el punto azul predeterminado que lo moverá automáticamente cuando el usuario se está moviendo, ¿no es correcto? ¿Cómo puedo hacer eso?

Muchas gracias.

Respuesta

22

añadir esto a la superior del viewForAnnotation método:

if ([annotation isKindOfClass:[MKUserLocation class]]) 
    return nil; 

La anotación especial ubicación del usuario es de tipo MKUserLocation y volviendo a cero en ese caso le dice a la vista del mapa para dibujar la vista predeterminada para que los que es el punto azul

También puede quitar estas líneas puesto que ya no serán necesarios:

if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")]) { 
    MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
    //pin.pinColor = MKPinAnnotationColorRed; 
    annotationView = pin; 
} 
else 
+0

funciona bien, Thnks. La única cosa es que el punto azul que muestra la ubicación del usuario, hace un círculo muy grande a su alrededor, ¿es costumizable? – ValentiGoClimb

+0

El tamaño del círculo indica la precisión de la ubicación (más pequeño significa más preciso). No estoy seguro de si esto se puede controlar en MKMapView usando CLLocationManager. – Anna

+0

bien, gracias. Y sabes cómo introducir manualmente por código la ubicación del usuario. Necesito poner al usuario en un solo lugar. thnks – ValentiGoClimb

Cuestiones relacionadas