MKMapView - setRegion:animated使得iOS7上的MKMapView无响应

时间:2013-10-24 10:58:13

标签: objective-c annotations ios7 mkmapview

我们在其中一个应用中看到了一个意想不到的行为 - 我们在地图视图上显示一个注释,用户可以通过点击按钮更改显示的注释。

当我们使用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而不是早期版本中发生,我会很感激澄清。

2 个答案:

答案 0 :(得分:0)

另外,请查看mapView:regionDidChangeAnimated:和mapView:regionWillChangeAnimated:方法。只实施一个可能对你有用;其中一个可能不需要您实施。

答案 1 :(得分:-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];

}