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也是如此。

+0

由于注释被删除,然后通过“didUpdateHeading”委托方法调用的方法重新添加,问题是现在注释在屏幕上闪烁,并且无法选择它们。选项2不起作用...我猜想选项3不是更有效。有什么建议么? – ubiAle

+0

您是否认为某些问题可能是注释以某种方式从屏幕上移除了,但地图并不清晰?这可能与您的代码? – Tony