我们在其中一个应用中看到了一个意想不到的行为 - 我们在地图视图上显示一个注释,用户可以通过点击按钮更改显示的注释。
当我们使用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 :(得分: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];
}