iOS7.1 MKMapView выберите проблему с аннотацией

поэтому с тех пор, как вышла iOS7.1, у меня продолжают возникать проблемы с моим кодом для выбора новых аннотаций на карте, когда пользователи нажимают на карту. Код работает с iOS6 и 7, но не работает с 7.1.

Я не нашел никакой конкретной информации по этой проблеме, но вот мой очень простой код, иллюстрирующий проблему.

Мой заголовок содержит только это:

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

@interface MAViewController : UIViewController <MKMapViewDelegate>

@property (strong, nonatomic) IBOutlet MKMapView *mMapView;

@end

И мой файл реализации выглядит следующим образом:

#import "MAViewController.h"

@interface MAViewController ()

@end

@implementation MAViewController

@synthesize mMapView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.mMapView setDelegate:self];
    [self.mMapView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mapTapped:)]];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (void)mapTapped:(UITapGestureRecognizer *)recognizer
{

    CGPoint touchPoint = [recognizer locationInView:self.mMapView];
    CLLocationCoordinate2D touchMapCoordinate = [self.mMapView convertPoint:touchPoint toCoordinateFromView:self.mMapView];
    CLLocation *lTapLocation = [[CLLocation alloc] initWithLatitude:touchMapCoordinate.latitude longitude:touchMapCoordinate.longitude];

    [self.mMapView removeAnnotations:mMapView.annotations];

    MKPointAnnotation *lAnnotation = [[MKPointAnnotation alloc] init];
    lAnnotation.coordinate = lTapLocation.coordinate;
    lAnnotation.title = @"TAP";

    [self.mMapView addAnnotation:lAnnotation];
}

#pragma mark - MapView Delegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

    if([annotation isKindOfClass: [MKUserLocation class]]) {
        return nil;
    }

    MKPinAnnotationView *lPin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
    lPin.canShowCallout = FALSE;

    return lPin;
}

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    MKAnnotationView *lAnnotationView = (MKAnnotationView*)[views objectAtIndex:0];
    lAnnotationView.canShowCallout = YES;

    if ([lAnnotationView.annotation isKindOfClass:[MKUserLocation class]]) {
        return;
    }

    [mapView selectAnnotation:lAnnotationView.annotation animated:YES];
}

@end

Я просто добавил MKMapView в раскадровку, не более того. Спасибо, что поделились своими идеями по проблеме.

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


person user2700551    schedule 11.04.2014    source источник


Ответы (1)


Я знаю, что этот вопрос был задан два месяца назад, но сейчас я сталкиваюсь с той же проблемой.

В настоящее время я использую обходной путь, при котором я выбираю аннотацию с небольшой задержкой после ее добавления в mapView. Кажется, это работает с задержками> = 0,4 с. Но с задержкой ‹ 0,4 с он снимается сразу после выбора. Очень странно:

//In the onClick handler
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = tapCoord;
self.lastAnnotation = annotation;
[self.mapView addAnnotation:annotation];
[self performSelector:@selector(selectLastAnnotation) withObject:nil afterDelay:0.4];

и вспомогательный метод:

-(void)selectLastAnnotation{
    [self.mapView selectAnnotation:self.lastAnnotation animated:YES];
}
person Masalis    schedule 08.07.2014
comment
Спасибо, я делаю это прямо сейчас. Я не приму ваш ответ, так как это скорее быстрое решение, чем решение, но оно все же полезно. - person user2700551; 09.08.2014