6

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

当我们用 iOS7 重建应用程序时,屏幕会定期冻结,即一旦下面的代码被多次调用(使用不同的注释集),MKMapView 上就不可能有更多的用户输入 - 视图嵌入在选项卡栏和导航控制器及其所有 UI 元素仍然有效,但地图视图本身不会接受任何用户输入(捏合/缩放)。

显示注释的代码在这里:


 [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 而不是早期版本,我将不胜感激。

4

2 回答 2

0

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

于 2016-05-16T16:39:53.507 回答
-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];

}
于 2016-02-01T01:32:57.403 回答