MKMapView зависает при взаимодействии с пользователем - PullRequest
2 голосов
/ 12 сентября 2011

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

Всякий раз, когда я пытаюсь переместить вид, коснитесь булавки аннотации или масштабирования, карта на какое-то время зависает, и я понятия не имею, почему это происходит.Приложение только для iPad (iPad 2, iOS 4.3.5).Вот код, который устанавливает карту:

- (void) setObject:(AchmeaObject *)_object
{

    if(kaart != nil)
    {
        [kaart removeFromSuperview];
        kaart = nil;
    }

    kaart = [[MKMapView alloc] initWithFrame:CGRectMake(340, 380, 400,300)];
    [kaart setDelegate: self];
    [kaart setUserInteractionEnabled:YES];

    CLLocationCoordinate2D coordinate;
    coordinate.latitude = [_object.latitude doubleValue];
    coordinate.longitude = [_object.longitude doubleValue];

    double miles = 2;
    double scalingFactor = ABS( cos(2 * M_PI * coordinate.latitude /360.0) );

    MKCoordinateSpan span;
    span.latitudeDelta = miles/69.0;
    span.longitudeDelta = miles/(scalingFactor*69.0);

    MKCoordinateRegion region;
    region.span = span;
    region.center = coordinate;

    [kaart setRegion: region animated:YES];


    ObjectAnnotation  *sa = [[ObjectAnnotation alloc] initWithName: _object.plaats Address: _object.adres Coordinate:coordinate];

    NSArray *anotations = [NSArray arrayWithObject: sa];        

    [kaart addAnnotations:anotations];

    [self.view addSubview:kaart];

}

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

ObjectAnnotation.m

#import "ObjectAnnotation.h"


@implementation ObjectAnnotation

@synthesize coordinate = _coordinate;

- (id) initWithName: (NSString *) _name Address: (NSString *) _address Coordinate: (CLLocationCoordinate2D) _coord{
    self = [super init];
    name = [_name retain];
    address = [_address retain];
    _coordinate = _coord;
    return self;
}


- (NSString *)title {
    return name;
}

- (NSString *)subtitle {
    return address;
}

- (void)dealloc
{
    [name release];
    name = nil;
    [address release];
    address = nil;    
    [super dealloc];
}


@end

Ответы [ 2 ]

0 голосов
/ 30 января 2015

У меня такая же проблема.После профилирования я обнаружил, что свойство tint может вызывать задержку обновления карты.Поэтому я установил оттенок по умолчанию на раскадровке, и проблема исчезла.

0 голосов
/ 12 сентября 2011

Я подозреваю, что это связано с повторным добавлением новых видов карты.Добавьте представление карты в xib или в самом начале жизненного цикла контроллера представления и оставьте его скрытым, а затем покажите его и обновите его положение (с помощью setRegion:animated:).Создание нового вида карты каждый раз является дорогостоящим и ненужным;если вы делаете это, потому что хотите избавиться от какого-либо состояния (аннотации, регион карты), узнайте, как вместо этого сбросить это состояние в существующем виде карты.

Это также может быть связано с вашей ObjectAnnotation, к которому вы не предоставите исходный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...