在蓝色脉动点(用户的当前位置)上显示前进方向而不会丢失精度圆

时间:2011-09-13 09:31:03

标签: iphone cllocationmanager compass-geolocation

我有一个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)来旋转地图。但是如何在蓝点(用户当前位置的指示符)上显示一个扇区,该扇区将以给定或强制精度描绘航向。我可以使用自定义图像的蓝点,但它失去光“精确圆”然后。有没有办法获得对蓝点视图的引用并对其进行修改,这样就不会丢失精度圆。

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

感谢您提前提供任何帮助

2 个答案:

答案 0 :(得分:1)

您可以使用this project作为指南。它会旋转整个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.

    }

}

答案 1 :(得分: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)];


        }
    }