我有一个应用程序,我在其中显示带有一个注释的小地图,地图位于我创建的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
答案 0 :(得分:0)
我怀疑这与重新添加新地图视图有关。在xib中或在视图控制器的生命周期的早期添加地图视图并将其隐藏起来,然后显示它并更新其位置(使用setRegion:animated:
)。每次创建新的地图视图既昂贵又不必要;如果你这样做是因为你想摆脱某些状态(注释,地图的区域),请学习如何在现有地图视图中重置该状态。
它也可能与您没有提供源代码的ObjectAnnotation相关。
答案 1 :(得分:0)
我遇到了同样的问题。在分析之后,我发现色调属性可能导致地图刷新延迟。所以我在故事板上设置了默认色调,问题就消失了。