Как вы уже видели, флаг 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
}