Наличие метки/аннотации в центре карты, даже если вы прокручиваете

Я потратил много часов, пытаясь понять, как это сделать:

введите здесь описание изображения

Имея метку/аннотацию в centerCoordinate вашего mapView, при прокрутке карты метка всегда должна оставаться в центре.

Я видел другое приложение, делающее это тоже!


person Marc    schedule 19.10.2011    source источник
comment
См. этот вопрос.   -  person    schedule 20.10.2011
comment
@AnnaKarenina Спасибо, это именно то, что я искал!   -  person Marc    schedule 20.10.2011
comment
@ Анна Кажется, это ответ. Не могли бы вы опубликовать как один, чтобы OP мог его принять?   -  person NGLN    schedule 29.10.2011
comment
@ Анна, можешь мне помочь?   -  person Jordan Brown    schedule 05.09.2014
comment
stackoverflow.com/questions/25577813/   -  person Jordan Brown    schedule 05.09.2014
comment
@JordanBrown, неясно, чего вы пытаетесь достичь, но я не рекомендую подход с использованием реального объекта на основе MKAnnotation. Вместо этого я предлагаю использовать простой UIView, расположенный над MKMapView. См. stackoverflow.com/questions/20731589/ .   -  person    schedule 05.09.2014


Ответы (1)


Нашел свой вопрос в Как добавить аннотацию в центр просмотра карты в iPhone?

Там ответ:

Если вы хотите использовать реальную аннотацию вместо обычного вида, расположенного над центром вида карты, вы можете:

  • используйте класс аннотаций с устанавливаемым свойством координат (например, предопределенный класс MKPointAnnotation). Это позволяет избежать необходимости удалять и добавлять аннотацию при изменении центра.
  • создать аннотацию в viewDidLoad
  • сохраните ссылку на него в свойстве, скажем, centerAnnotation
  • обновить его координату (и заголовок и т. д.) в методе делегата regionDidChangeAnimated представления карты (убедитесь, что свойство делегата представления карты установлено)

Пример:

@interface SomeViewController : UIViewController <MKMapViewDelegate> {
    MKPointAnnotation *centerAnnotation;
}
@property (nonatomic, retain) MKPointAnnotation *centerAnnotation;
@end

@implementation SomeViewController

@synthesize centerAnnotation;

- (void)viewDidLoad {
    [super viewDidLoad];

    MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
    pa.coordinate = mapView.centerCoordinate;
    pa.title = @"Map Center";
    pa.subtitle = [NSString stringWithFormat:@"%f, %f", pa.coordinate.latitude, pa.coordinate.longitude];
    [mapView addAnnotation:pa];
    self.centerAnnotation = pa;
    [pa release];
}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    centerAnnotation.coordinate = mapView.centerCoordinate;
    centerAnnotation.subtitle = [NSString stringWithFormat:@"%f, %f", centerAnnotation.coordinate.latitude, centerAnnotation.coordinate.longitude]; 
}

- (void)dealloc {
    [centerAnnotation release];
    [super dealloc];
}

@end

Теперь это будет перемещать аннотацию, но не плавно. Если вам нужно, чтобы аннотация перемещалась более плавно, вы можете добавить UIPanGestureRecognizer и UIPinchGestureRecognizer в представление карты, а также обновить аннотацию в обработчике жестов:

    // (Also add UIGestureRecognizerDelegate to the interface.)

    // In viewDidLoad:
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
    panGesture.delegate = self;
    [mapView addGestureRecognizer:panGesture];
    [panGesture release];

    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
    pinchGesture.delegate = self;
    [mapView addGestureRecognizer:pinchGesture];
    [pinchGesture release];

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
    centerAnnotation.coordinate = mapView.centerCoordinate;
    centerAnnotation.subtitle = [NSString stringWithFormat:@"%f, %f", centerAnnotation.coordinate.latitude, centerAnnotation.coordinate.longitude]; 
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    //let the map view's and our gesture recognizers work at the same time...
    return YES;
}
person Marc    schedule 02.11.2011
comment
Кажется, это не удерживает булавку по центру при масштабировании, как в примере выше. - person Jordan Brown; 05.09.2014