2011-09-12 7 views
2

私は小さなマップに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 

答えて

0

私は、これは新しいマップビューを再追加することが関係している疑いがあります。 xib内またはビューコントローラのライフサイクルの早い段階でマップビューを追加し、非表示にしてから表示し、位置を更新します(setRegion:animated:)。毎回新しいマップビューを作成するのは高価で不必要な作業です。何らかの状態(注釈、地図の地域)を取り除きたいので、それをやっているなら、代わりに既存の地図ビューでその状態をリセットする方法を学んでください。

また、ソースコードを提供していないObjectAnnotationに関連する可能性があります。

+0

これはすでに最初のマップで発生しているので、良い点を示していますが、追加と削除を行うべきではありません。今すぐObjectAnnotationを追加しますが、それは特別なものではありません。 – ophychius

+1

なぜそのような場合、その場合はわかりません。インストゥルメントの下でTime Profilerの下で実行し、何がそんなに長くかかっているかを見てください。 – Jesper

0

私は同じ問題を抱えていました。プロファイリングの後、私はtintプロパティがマップリフレッシュの遅延を引き起こす可能性があることを知ります。だから私はストーリーボードにデフォルトの色合いを設定し、問題は消えました。

+0

これは質問に対する答えです。それを削除する理由はありません。 – JasonMArcher

関連する問題