私は小さなマップに1つの注釈を表示するアプリケーションを持っています。マップは作成した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];
}
私はそれがなぜ起こるかわかりませんが、それは最初に、それはすべてのユーザーとの対話に応答するまでに数秒かかり示しており、すべての相互作用の後に、それは、少なくともAを必要とするときいくつかの秒後、数回完全に凍結するまで。
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
なぜそのような場合、その場合はわかりません。インストゥルメントの下でTime Profilerの下で実行し、何がそんなに長くかかっているかを見てください。 – Jesper