2011-09-12 73 views
2

我有一個應用程序,其中顯示帶有一個註釋的小地圖,地圖位於我創建的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 

回答

0

我懷疑這是重新加入新的地圖視圖相關。在xib中或在視圖控制器的生命週期的早期添加地圖視圖並將其隱藏,然後顯示它並更新其位置(使用setRegion:animated:)。每次創建新的地圖視圖既昂貴又不必要;如果你這樣做是因爲你想擺脫某些狀態(註釋,地圖的區域),請學習如何在現有地圖視圖中重置該狀態。

它也可能與您的ObjectAnnotation有關,您不提供源代碼。

+0

它已經發生的第一張地圖,所以我不應該添加和刪除,雖然你說得很好。現在添加ObjectAnnotation,但沒什麼特別的。 – ophychius

+1

不知道爲什麼,在這種情況下。在「時間事件探查器」下的「儀器」下運行該程序,查看需要花費多長時間。 – Jesper

0

我遭受了同樣的問題。分析後,我發現tint屬性可能會導致地圖刷新延遲。所以我在故事板上設置了默認色調,問題消失了。

+0

這是一個問題的答案。沒有理由刪除它。 – JasonMArcher