的MKMapView - setRegion:动画使的MKMapView上iOS7反应迟钝

问题描述:

我们已经在我们的应用程序之一,看到一个意想不到的行为 - 一个一个屏幕,我们正在展示在地图上查看注释,用户可以通过点击改变显示的注解按钮。的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

尝试从主线程中运行的函数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]; 

} 

此外,检查您的MapView:regionDidChangeAnimated:和MapView的:regionWillChangeAnimated:方法。只实施一个可能适合你;其中一个可能不需要你执行。