Una costumbre AnnotationView se actualiza con nuevas coordenadas. Pero el problema es que visualmente actualizaciones sólo después de algunas manipulaciones con MKMapView, por ejemplo, el zoom o mover.
¿Qué debo hacer para actualizar manualmente visual de posición en un mapa?

PS. He intentado cambiar la región a la mapa actual de la región. Pero sí cambia el zoom. Es extraño.

[mapView setRegion:[mapView region] animated:YES];
Amablemente ver mi respuesta en el siguiente enlace: stackoverflow.com/a/24564868/665961

OriginalEl autor slatvick | 2009-07-27

7 Comentarios

  1. 19

    Estoy un poco shoked después de horas de investigación. La respuesta es simplemente:

    [mapView setCenterCoordinate:mapView.region.center animated:NO];

    No me pregunten por qué, pero las actualizaciones de un mapview y es lo que se necesita.

    UPD: no ayuda con el SDK 3.1. Todavía en investigación.
    No funciona en 3.1.2.
    Esto acaba de arreglar mi error! Gracias!!!!!

    OriginalEl autor slatvick

  2. 12

    MKMapView observa las coordenadas de la propiedad de las anotaciones a través de KVO. Usted necesita simplemente para observar la correcta KVO protocolo y enviar la anotación willChangeValueForKey: y didChangeValueForKey: con la ruta de acceso clave de @"coordinate" antes y después de la actualización de las coordenadas.

    Asimismo title y subtitle también son observadas por MKMapView. así que si usted actualización de los y desea que el valor de la llamada a cambiar de forma automática sin ningún esfuerzo de su parte, acaba de hacer el mismo: llamar willChangeValueForKey: y didChangeValueForKey:

    Eso es muy bueno saber, gracias.
    Mientras que el setCenterCoordinate:animated: obras, la KVO manera aquí también funciona y es definitivamente más adecuada y permite la MKMapView para coordinar las actualizaciones de múltiples observaciones, mejor.

    OriginalEl autor freespace

  3. 9

    si la adición de su annoations de un hilo no lo puedo trabajar.
    yo tenía el mismo problema y terminando mi función fue la adición de las anotaciones con las siguientes trabajado

    [self performSelectorOnMainThread:@selector(addCameraIconOnMain:) obj waitUntilDone:true];  
    
    -(void) addCameraIconOnMain:(myobjecttype*)obj
    {
        //this isnt the entire function, customize for your own purpose.....
        [mapView addAnnotation:annotation];
    }

    OriginalEl autor roocell

  4. 2

    La respuesta es NO actualizar el MapView o la Anotación!

    la coordenada de la propiedad de MKAnnotation ha KVO. Si usted acaba de agregar el id de puntero, de el objeto que desee en el mapa, para el mapview y actualización de las coordenadas de la propiedad con una nueva ubicación, MKMapView hará el resto para usted.

    Tan cerca como usted puede conseguir a un almuerzo gratis!

    OriginalEl autor PLG

  5. 0

    He solucionado este error con una llamada asincrónica, a menos de 0,5 retraso.

    por ejemplo: [self performSelector:@selector(redrawPins) withObject:nil afterDelay:0.5];

    Donde «redrawPins» es la función que agrega y quita los alfileres.

    OriginalEl autor diegodsp

  6. -2

    No hay ninguna razón usted no puede quitar y volver a agregar la anotación. Esa es probablemente la manera más eficiente de mover todo el mapa, incluso si es un falso movimiento.

    Alguien quiere explicar por qué esto fue votada abajo? Esta es, al menos, una alternativa y yo diría que es más eficiente.
    Estoy seguro de que la mayoría de la gente que ha encontrado este hilo ya lo había intentado en esto; sé que lo hice. Esto provoca un comportamiento extraño.

    OriginalEl autor M. Ryan

  7. -7

    Aquí es la interfaz de la MapAnnotation:

    // CSMapAnnotation.h
    // mapLines
    // Created by Craig on 5/15/09.
    // Copyright 2009 Craig Spitzkoff. All rights reserved.
    
    #import <Foundation/Foundation.h>
    #import <MapKit/MapKit.h>    
    
    //types of annotations for which we will provide annotation views. 
    typedef enum {
        MapAnnotationTypeStart = 0,
        MapAnnotationTypeEnd   = 1,
        MapAnnotationTypeImage = 2
    } MapAnnotationType;
    
    @interface MapAnnotation : NSObject <MKAnnotation>
    {
        CLLocationCoordinate2D _coordinate;
        MapAnnotationType      _annotationType;
        NSString*              _title;
        NSString*              _subtitle;
        NSString*              _userData;
        NSString*              speed;
        NSString*              identifier;
    }
    
    @property (nonatomic, retain) NSString *speed;
    @property (nonatomic, retain) NSString *identifier;
    
    -(id) initWithCoordinate:(CLLocationCoordinate2D)coordinate 
        annotationType: (MapAnnotationType) annotationType
        title: (NSString*) title
        subtitle: (NSString*) subtitle
        speed: (NSString *) speed
        identifier: (NSString *) identifier;    
    -(id) setWithCoordinate: (CLLocationCoordinate2D) coordinate 
        annotationType: (MapAnnotationType) annotationType
        title: (NSString*) title
        subtitle: (NSString*) subtitle
        speed: (NSString*) speed
        identifier: (NSString*) identifier;    
    @property MapAnnotationType annotationType;
    @property (nonatomic, retain) NSString* userData;    
    @end    

    Y aquí está la aplicación:

    // CSMapAnnotation.m
    // mapLines
    // Created by Craig on 5/15/09.
    // Copyright 2009 Craig Spitzkoff. All rights reserved.
    
    #import "MapAnnotation.h"    
    
    @implementation MapAnnotation
    
    @synthesize coordinate     = _coordinate;
    @synthesize annotationType = _annotationType;
    @synthesize userData       = _userData;
    @synthesize speed;
    @synthesize identifier;
    
    -(id) initWithCoordinate:(CLLocationCoordinate2D)coordinate 
        annotationType: (MapAnnotationType) annotationType
        title: (NSString*)title
        subtitle: (NSString*) subtitle
        speed: (NSString *) speedz
        identifier: (NSString *) identifierz
    {
        self = [super init];
        _coordinate = coordinate;
        _title  = [title retain];
        _subtitle = [subtitle retain];
        _annotationType = annotationType;
        speed = speedz;
        identifier = identifierz;
        return self;
    }    
    -(id) setWithCoordinate:(CLLocationCoordinate2D)coordinate 
        annotationType: (MapAnnotationType) annotationType
        title: (NSString*) title
        subtitle: (NSString*) subtitle
        speed: (NSString*) speedz
        identifier: (NSString*) identifierz
    {
        _coordinate = coordinate;
        _title = [title retain];
        _subtitle = [subtitle retain];
        _annotationType = annotationType;
        speed = speedz;
        identifier = identifierz;       
        return self;
    }    
    -(NSString*) title
    {
        return _title;
    }    
    -(NSString*) subtitle
    {
        return _subtitle;
    }    
    -(void) dealloc
    {
        [_title    release];
        [_userData release];
        [super dealloc];
    }    
    @end

    OriginalEl autor geekyaleks

Dejar respuesta

Please enter your comment!
Please enter your name here