的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而不是早期版本,我很感谢澄清。
答
尝试从主线程中运行的函数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:方法。只实施一个可能适合你;其中一个可能不需要你执行。
我遇到了完全相同的问题。不幸的是,我还没有找到解决方案。 – Jonathan
你是否起诉线程? – latenitecoder