Пользовательское местоположение аннотации не обновляется в соответствии с расположением ядра - PullRequest
1 голос
/ 03 марта 2011

Попытка добавить пользовательский пин-код для текущего местоположения, однако местоположение не обновляется.Даже после установки setShowsUserLocation = YES;

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    if ([[annotation title] isEqualToString:@"Current Location"]) {
        self.image = [UIImage imageNamed:[NSString stringWithFormat:@"cursor_%i.png", [[Session instance].current_option cursorValue]+1]];
    }

Однако, если я установлю return nil;, все работает нормально, но я теряю пользовательское изображение.Я действительно хочу заставить это работать.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 03 марта 2011

Как вы уже видели, флаг setShowsUserLocation показывает только текущее местоположение с использованием синего пузырька по умолчанию.

Что вам нужно сделать здесь, прослушать обновления местоположения с телефона и вручную переместить аннотацию самостоятельно.Вы можете сделать это, создав экземпляр CLLocationManager и удаляя и заменяя вашу аннотацию всякий раз, когда Менеджер местоположений уведомляет своего делегата об обновлении:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
  // update annotation position here
}

Чтобы изменить координаты, у меня есть класс Placemark, который соответствуетпротокол MKAnnotation:

//--- .h ---

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

@interface Placemark : NSObject <MKAnnotation> {
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString *strSubtitle;
@property (nonatomic, retain) NSString *strTitle;

-(id)initWithCoordinate:(CLLocationCoordinate2D) coordinate;
- (NSString *)subtitle;
- (NSString *)title;

@end

//--- .m ---

@implementation Placemark

@synthesize coordinate;
@synthesize strSubtitle;
@synthesize strTitle;

- (NSString *)subtitle{
    return self.strSubtitle;
}
- (NSString *)title{
    return self.strTitle;
}

-(id)initWithCoordinate:(CLLocationCoordinate2D) c {
    self.coordinate = c;
    [super init];
    return self;
}

@end

Затем в моем контроллере карты я размещаю аннотацию с:

- (void) setPlacemarkWithTitle:(NSString *) title andSubtitle:(NSString *) subtitle forLocation: (CLLocationCoordinate2D) location {

    //remove pins already there...
    NSArray *pins = [mapView annotations];

    for (int i = 0; i<[pins count]; i++) {
      [mapView removeAnnotation:[pins objectAtIndex:i]];
    }

    Placemark *placemark=[[Placemark alloc] initWithCoordinate:location];
    placemark.strTitle = title;
    placemark.strSubtitle = subtitle;
    [mapView addAnnotation:placemark];  
    [self setSpan]; //a custom method that ensures the map is centered on the annotation 
} 
...