放置蓝点(用户位置)仅使用CLLocationManager

时间:2011-02-24 19:30:20

标签: iphone location mkmapview cllocationmanager

我已经通过堆栈和苹果的文档阅读了无数的帖子,找不到任何解决这个问题的方法。

问题是如果您设置mapView.showsUserLocation = YES,那么MapKit将开始为您的手机提供自己的GPS查询。

来自apple docs:

  

将此属性设置为YES会导致   地图视图以使用核心位置   找到当前的框架   地点。只要这个属性   是的,地图视图继续跟踪   用户的位置并更新它   周期性。

如果您还想使用CLLocationManager,那么当您拨打[mylocationmanager startUpdatingLocation]时,您将在手机上进行第二次GPS查询。

现在您有两个独立的流程要求GPS定位。

在模拟器上没有问题,但如果你在真正的手机上试用它,需要很长时间才能获得GPS位置。它也是10秒 - 1分钟不一致,而如果你关闭mapView.showsUserLocation则需要2-3秒。

一般来说,使用两者似乎是一种非常糟糕的做法。

为了灵活性和控制,我宁愿使用CLLocationManager,但是如果你没有设置mapView.showsUserLocation = YES,那么你就不会得到蓝点!

我尝试了通常的覆盖注释方法:例如:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    if ([annotation isKindOfClass:MKUserLocation.class]) {
        //it's the built-in user location annotation, return nil to get default blue dot...
        return nil;
    }

    //handle your custom annotations...
}

但它不起作用,很可能是因为从来没有调用在地图上实际放置用户注释。

那么有没有人有解决方案只使用CLLocationManager将用户的位置放在地图上?

2 个答案:

答案 0 :(得分:0)

只是覆盖viewForAnnotation方法是不够的,首先必须通过调用

向地图添加注释
[mapView addAnnotation:annotationObject];

您的annotationObject可以是实现MKAnnotation协议的任何类的实例。您可以在“注释应用程序”部分的“MapKit指南”中找到详细信息。

答案 1 :(得分:0)

如果您需要在您的位置周围显示蓝点(准确度),您可以这样做:

MKCircle *accuracyCircle;

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// when you want update your position and accuracy
[self.mapView removeOverlay:accuracyCircle];
accuracyCircle = [MKCircle circleWithCenterCoordinate:newLocation.coordinate
                                                    radius:newLocation.horizontalAccuracy];
[self.mapView addOverlay:accuracyCircle];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if([overlay isKindOfClass:[MKCircle class]])
    {
        MKCircleRenderer * circleRenderer = [[MKCircleRenderer alloc] initWithOverlay:overlay];
        circleRenderer.fillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.2];
        return circleRenderer;
    }
    return nil;
}