Objective c MKMapView-setRegion:动画使MKMapView在iOS7上无响应

Objective c MKMapView-setRegion:动画使MKMapView在iOS7上无响应,objective-c,annotations,ios7,mkmapview,Objective C,Annotations,Ios7,Mkmapview,我们在我们的一个应用程序中看到了一个意外的行为-一个屏幕我们在地图视图上显示注释,用户可以通过单击按钮更改显示的注释 当我们用iOS7重新构建应用程序时,屏幕会定期冻结,即,一旦以下代码被多次调用(使用不同的注释集),MKMapView上就不可能有更多的用户输入-视图嵌入在选项卡栏和导航控制器中,并且其所有UI元素仍然工作,但是mapview本身不接受任何用户输入(收缩/缩放) 显示注释的代码如下所示: [self.mapView removeAnnotations:self.mapView

我们在我们的一个应用程序中看到了一个意外的行为-一个屏幕我们在地图视图上显示注释,用户可以通过单击按钮更改显示的注释

当我们用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))
动画:否];

问题消失了,MKMapView在iOS7上也表现良好


如果您知道为什么会发生这种情况,以及为什么这种情况只发生在iOS7中而不发生在早期版本中,我将非常感谢您的澄清。

尝试从主线程在函数中运行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:方法。只实现一个可能对您有效;其中一个可能不需要您来实现。

我遇到了完全相同的问题。不幸的是,我还没有找到解决方案。你到底是在起诉线程吗?
    [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];

}