我有一個應用程序,其中顯示帶有一個註釋的小地圖,地圖位於我創建的objectDetailScreen中,每當設置新對象時都會更新此屏幕,並且還會顯示新地圖。該地圖作爲對象的註釋。MKMapView在用戶交互中凍結
每當我嘗試移動視圖時,點擊註釋針或縮放,地圖凍結一段時間,我不知道爲什麼它會這樣做。該應用程序僅適用於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
它已經發生的第一張地圖,所以我不應該添加和刪除,雖然你說得很好。現在添加ObjectAnnotation,但沒什麼特別的。 – ophychius
不知道爲什麼,在這種情況下。在「時間事件探查器」下的「儀器」下運行該程序,查看需要花費多長時間。 – Jesper