我有一个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)来旋转地图。但是如何在蓝点(用户当前位置的指示符)上显示一个扇区,该扇区将以给定或强制精度描绘航向。我可以使用自定义图像的蓝点,但它失去光“精确圆”然后。有没有办法获得对蓝点视图的引用并对其进行修改,这样就不会丢失精度圆。
通过负旋转也可以避免注释的旋转,但是当地图旋转时,注释的“标题”和“子标题”会扩展到可见屏幕的视野之外。有没有办法将它们限制为地图的视图。
感谢您提前提供任何帮助
答案 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)];
}
}