iOS在MKMapView旋转的响应中旋转MKAnnotationView
问题描述:
在我的应用程序中,我有一个MKMapView,其中显示了几个注释。地图根据设备的标题旋转。要旋转执行以下语句地图(通过该方法的LocationManager叫:didUpdateHeading :)iOS在MKMapView旋转的响应中旋转MKAnnotationView
self.navigationMapView.mapView.transform = CGAffineTransformMakeRotation(-heading);
在标题(磁)以弧度表示。我注意到,即使地图上的注释旋转,我也不想要它。我试图修复它在下面的方法:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
static NSString *identifier = @"AnnotationViewIdentifier";
MKAnnotationView *av = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (av == nil) {
av = [[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
}
else{
av.annotation = annotation;
}
av.transform = CGAffineTransformMakeRotation(degreesToRadians(self.arController.currentHeading.magneticHeading));
av.canShowCallout = YES;
return av;
}
,我想从调用此方法“didUpdateHeading:”但我真的不知道该怎么做。 TableView类具有调用委托方法的reloadData函数,但这里看起来不同。有什么建议么?!
另一个问题,我在地图上的注释显示与用户的距离,我想在用户更改位置时立即更新它们(距离标签)。有什么建议么?!
答
因此,一个MKMapView有一个被调用是有点恼人的。基本上你有两种选择之一。选项1:在屏幕上创建注释数组,然后将其从map_view中移除,然后将其重新添加到map_view。基本上创建您自己的重新加载数据功能。方案2:做一些简单的事情,如
CGLocationCoordinate2D coordinate = map_view.center;
map_view.center = coordinate;
- 本质上,重点是地图的一个属性,导致它重绘。但是这个选项并不总是能够工作。选项1有较高的工作机会,但是也有可能失败,所以如果简单地取消注释并重新添加它们不会导致任何事情发生,那么简单地减少地图,然后在地图刷新函数末尾重新创建地图。喜欢。
[my_map_view removeFromSuperView];
[my_map_view release];
my_map_view = nil;
my_map_view = [[MKMapView alloc] initWithFrame:CGRectMake(0,0,320,480)];
这些选项之一应该工作。我必须为我的解决方案做一个选项,但我知道有些人是幸运的,选项2也是如此。
由于注释被删除,然后通过“didUpdateHeading”委托方法调用的方法重新添加,问题是现在注释在屏幕上闪烁,并且无法选择它们。选项2不起作用...我猜想选项3不是更有效。有什么建议么? – ubiAle
您是否认为某些问题可能是注释以某种方式从屏幕上移除了,但地图并不清晰?这可能与您的代码? – Tony