Наличие метки / аннотации в центре вашего mapView, даже если вы прокручиваете - PullRequest
0 голосов
/ 20 октября 2011

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

enter image description here

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

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

1 Ответ

1 голос
/ 02 ноября 2011

Нашел мой вопрос в Как добавить аннотацию по центру карты в 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;
}
...