2013-10-24 42 views
6

我們已經在我們的應用程序之一,看到一個意想不到的行爲 - 一個一個屏幕,我們正在展示在地圖上查看註釋,用戶可以通過點擊改變顯示的註解按鈕。的MKMapView - setRegion:動畫使的MKMapView上iOS7反應遲鈍

當我們用iOS7重建應用程序時,屏幕會定期凍結,即一旦下面的代碼被多次調用(不同的註釋集合),MKMapView就不會再有用戶輸入 - 視圖嵌入到兩個一個標籤欄和導航控制器及其所有UI元素仍然有效,但mapview本身不會接受任何用戶輸入(捏/縮放)。

顯示註釋的代碼是在這裏:


[self.mapView removeAnnotations:self.mapView.annotations]; 

for (MyObject *my in self.mydata) 
{ 
    MyAnnotation *annotation = [MyAnnotationFactory createAnnotationFor:my]; 
    [self.mapView addAnnotation:annotation]; 
} 

CLLocationCoordinate2D mycenter; 
mycenter.latitude = -38.967659; 
mycenter.longitude = 172.873534; 

[self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) 
       animated:YES]; 

[self.mapView setCenterCoordinate:mycenter]; 

我發現的是,通過設置區域沒有其動畫,通過改變上面的代碼即

 
[self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) 
       animated:NO]; 

的問題消失了,MKMapView在iOS7上的表現也很好。

如果你有一個想法爲什麼這是發生的,以及爲什麼它只發生在iOS7而不是早期版本,我很感謝澄清。

+0

我遇到了完全相同的問題。不幸的是,我還沒有找到解決方案。 – Jonathan

+0

你是否起訴線程? – latenitecoder

回答

-1

嘗試從主線程中運行的函數setRegion:

[self performSelectorOnMainThread:@selector(animateMapRegion) withObject:nil waitUntilDone:NO]; 

-(void)animateMapRegion 
{ 
    CLLocationCoordinate2D mycenter; 
    mycenter.latitude = -38.967659; 
    mycenter.longitude = 172.873534; 
    [self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) animated:animated]; 

} 
0

此外,檢查您的MapView:regionDidChangeAnimated:和MapView的:regionWillChangeAnimated:方法。只實施一個可能適合你;其中一個可能不需要你執行。