AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola buenas, me gustaría cambiar algún pin de color en mi mapa. El código que tengo es el siguiente.

En mi archivo mapas.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface mapas : UIViewController <MKMapViewDelegate>{
    BOOL _doneInitialZoom;
    IBOutlet MKMapView *Localizacion;
}
@property (nonatomic, retain) IBOutlet MKMapView *Localizacion;
@end

En el archivo Mapas.m

#import "mapas.h"
#import <MapKit/MapKit.h>

@implementation mapas

-(IBAction)mapa:(id)sender{
    //Localizacion.showsUserLocation=YES;
}

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

- (void)viewWillAppear:(BOOL)animated {

    CLLocationCoordinate2D Pin1;
    Pin1.latitude = 32.27693;
    Pin1.longitude = -6.08851;
    MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];

    annotationPoint.coordinate = Pin1;
    annotationPoint.title = @"Pin uno";
    annotationPoint.subtitle = @"este es el uno";
    [Localizacion addAnnotation:annotationPoint];

    /*------------- PIN 2 -------------------------*/

    CLLocationCoordinate2D pin2;
    pin2.latitude = 33.27695;
    pin2.longitude = -4.04853;
    MKPointAnnotation *annotationPoint2 = [[MKPointAnnotation alloc] init];
    annotationPoint2.coordinate = pin2;
    annotationPoint2.title = @"Pin 2";
    annotationPoint2.subtitle = @"cerca del uno";
    [Localizacion addAnnotation:annotationPoint2];

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(Pin1, 680, 680);
    MKCoordinateRegion adjustedRegion = [Localizacion regionThatFits:viewRegion];                
    [Localizacion setRegion:adjustedRegion animated:YES];

}
@synthesize Localizacion;
@end

Me gustaría saber si existe alguna forma de poder cambiar el pin de color o bien por alguna imagen de una forma parecida a cambiar el título y el subtítulo.

Por ejemplo algo parecido a:

annotationPoint.image = @"icono.png";
annotationPoint.color = Green;

Gracias y espero que podáis echar una mano.

preguntado 19 Mar '12, 22:25

Ignacioo's gravatar image

Ignacioo
141141922

editó 19 Mar '12, 22:27


Buenos días eneakao,

Tienes que establecer tú clase como delegada de MKMapViewDelegate. Ya tienes el protocolo indicado en tú código, así que nada.

Si quieres cambiar tús anotaciones por imágenes, añade este método para controlar cada una de tús anotaciones en el mapa. Cada vez que se añada una anotacion en tú mapa se procesará este código:

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
    {   
     static NSString *SFAnnotationIdentifier = @"SFAnnotationIdentifier";
        MKPinAnnotationView *pinView =
            (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
        if (!pinView)
        {
            MKPinAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                           reuseIdentifier:SFAnnotationIdentifier] autorelease];

            annotationView.image = flagImage;
            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
}

Pero si quieres utilizar "pins" de colores, puedes añadir este método en vez del anterior:

    - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
    {

     static NSString *SFAnnotationIdentifier = @"SFAnnotationIdentifier";
        MKPinAnnotationView *pinView =
            (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
        if (!pinView)
        {
            MKPinAnnotationView *annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation
                                                                           reuseIdentifier:SFAnnotationIdentifier] autorelease];
            annotatinView.pinColor=MKPinAnnotationColorRed; 
            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
}

Ahora mismo no puedo probar si funciona, pero debería ser algo así.

Clase MKPinAnnotationView, aquí tienes su documentación.

Si quieres aprender lo que puedes hacer con MapKit en iOS te recomiendo que te estudies este tutorial, esta muy bien de introducción.

enlace permanente

respondido 20 Mar '12, 07:43

resident's gravatar image

resident
721253239

editó 21 Mar '12, 09:37

Gracias por tu respuesta resident.

Pero no entiendo bien lo que quieres decirme. Yo tengo estos dos archivos que te he puesto ahí. ¿Dónde tendría que poner esto que me indicas y de qué forma? Soy novato en este tipo de programación y la verdad no se implementarlo. Te agradezco si me indicas las modificaciones que tengo que hacer en cada archivo.

(20 Mar '12, 21:45) Ignacioo

Que sepas que si pones una imagen propia, ya no se puede hacer el efecto ese que cae el pin del cielo...

(21 Mar '12, 00:13) LightMan

eneakao, he editado mi respuesta haber si así esta más claro. Lo único que tienes que hacer con tú codigo es utilizar el método delegado "- (MKAnnotationView )mapView:(MKMapView )theMapView viewForAnnotation:(id <mkannotation>)annotation" para procesar tús anotaciones.

(21 Mar '12, 09:39) resident

Hola eneakao,

He probado tú código y me funciona perfectamente. Creo lo que te falta es que no le has indicado el delegado al objeto MKMapView, que en tú código lo llamas "Localizacion".

Yo lo suelo hacer desde el "Inteface builder". Botón derecho sobre el objeto de Mapa y desde la etiqueta "delegate" lo conectamos con "File's Owner".

También se puede hacer programáticamente desde el código, ejem: localizacion.delegate=self;

Espero que esto te ayude,

enlace permanente

respondido 21 Mar '12, 19:13

resident's gravatar image

resident
721253239

Me faltaba hacer eso. Por fin se han puesto verde. Muchísimas gracias!!

(21 Mar '12, 19:48) Ignacioo

Gracias por vuestras respuestas LightMan y resident.

Resident, todavía no consigo mostrar el pin verde o una imagen. Ya tengo colocado (creo que bien) el código que me has puesto antes.

¿Que me falta para que se vea verde?

#import "mapas.h"
#import <MapKit/MapKit.h>

@implementation mapas

-(IBAction)mapa:(id)sender{

    //Localizacion.showsUserLocation=YES;

}

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{

    static NSString *SFAnnotationIdentifier = @"SFAnnotationIdentifier";
    MKPinAnnotationView *pinView =
    (MKPinAnnotationView *)[Localizacion dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
    if (!pinView)
    {
        MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
                                                                               reuseIdentifier:SFAnnotationIdentifier];
        annotationView.pinColor=MKPinAnnotationColorGreen; 
        return annotationView;
    }
    else
    {
        pinView.annotation = annotation;
    }
    return pinView;
}

- (void)viewWillAppear:(BOOL)animated {

    CLLocationCoordinate2D PinUno;
    PinUno.latitude = 34.264143;
    PinUno.longitude = -6.340118;
    MKPointAnnotation *annotationPoint1 = [[MKPointAnnotation alloc] init];
    annotationPoint1.coordinate = PinUno;
    annotationPoint1.title = @"Pin uno";
    annotationPoint1.subtitle = @"A ver si sale verde";
    [Localizacion addAnnotation:annotationPoint1];

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(ConilCentro, 950, 950);
    MKCoordinateRegion adjustedRegion = [Localizacion regionThatFits:viewRegion];                
    [Localizacion setRegion:adjustedRegion animated:YES];

}

@synthesize Localizacion;
@end
enlace permanente

respondido 21 Mar '12, 13:40

Ignacioo's gravatar image

Ignacioo
141141922

Tu respuesta:
Activar/desactivar vista previa

Sobre esta pregunta

Etiquetas de la pregunta:

×28
×24
×5
×2
×2

Pregunta realizada el: 19 Mar '12, 22:25

Pregunta visitada: 2,045 veces

Última modificación: 21 Mar '12, 19:48

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Realizar Donación