MKMapView冻结了用户交互

时间:2011-09-12 07:33:45

标签: ios ipad mkmapview

我有一个应用程序,我在其中显示带有一个注释的小地图,地图位于我创建的objectDetailScreen中,每当设置新对象时,此屏幕都会更新,同时还会显示新地图。地图作为对象的注释。

每当我尝试移动视图时,点击注释引脚或缩放,地图会冻结一段时间,我不知道为什么会这样做。该应用仅适用于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];

}

我不知道它为什么会发生,但是当它第一次显示它需要几秒钟来响应任何用户交互时,并且在每次交互之后它至少需要几秒钟,直到完全冻结几次之后。 / p>

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 :(得分:0)

我怀疑这与重新添加新地图视图有关。在xib中或在视图控制器的生命周期的早期添加地图视图并将其隐藏起来,然后显示它并更新其位置(使用setRegion:animated:)。每次创建新的地图视图既昂贵又不必要;如果你这样做是因为你想摆脱某些状态(注释,地图的区域),请学习如何在现有地图视图中重置该状态。

它也可能与您没有提供源代码的ObjectAnnotation相关。

答案 1 :(得分:0)

我遇到了同样的问题。在分析之后,我发现色调属性可能导致地图刷新延迟。所以我在故事板上设置了默认色调,问题就消失了。