2

我有一个 CLLocation 管理器,如下所示

myLocation = [[CLLocationManager alloc] init];
    myLocation.desiredAccuracy = kCLLocationAccuracyBestForNavigation ;
    myLocation.delegate=self;

如果设备支持航向信息,则调用方法来更新航向

if([CLLocationManager headingAvailable])
        [myLocation startUpdatingHeading];

并且标题的变化是从以下方法中检索的

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    [mymap setTransform:CGAffineTransformMakeRotation(-1 * newHeading.trueHeading * 3.14159 / 180)];

}   

我可以使用此信息 (newHeading.trueHeading) 来旋转地图。但是我如何才能在蓝点(用户当前位置的指示器)上显示一个以给定或强制精度描绘航向方向的扇区。我可以将自定义图像用于蓝点,但它会失去轻微的“精度圈”。有什么办法可以参考蓝点视图并修改它,这样就不会丢失精度圈。

通过负旋转也可以避免注释的旋转,但是当地图旋转时,注释的“标题”和“子标题”会延伸到可见屏幕的视野之外。有没有办法将它们限制在地图的视图中。

感谢您提前提供任何帮助

4

2 回答 2

1

您可以将此项目用作指南。它会旋转整个 mapView,但您可以将其外推到您的视图中。

编辑:如果要自定义 userLocation 注释,则必须实现 viewForAnnotation 并检查给定的注释是否为 MKUserLocation并返回根据需要配置的自定义 annotationView。

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        //Configure your custom view to point to the current heading and return it.

    }

}
于 2011-09-13T09:56:38.983 回答
1
    - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
        if (newHeading.headingAccuracy > 0) {
                // [newHeading retain];
             float heading = newHeading.trueHeading >= 0 ? newHeading.trueHeading : newHeading.magneticHeading;


             [mymap setTransform:CGAffineTransformMakeRotation(heading)];


        }
    }
于 2011-09-13T14:49:40.333 回答