带有MapKit的MkCircle,与当前用户位置同步

时间:2014-01-13 17:47:27

标签: ios objective-c mapkit

我正在使用MapKit进行项目,我想更新当前用户位置中心的圆圈位置。我可以通过实现这些方法来做到这一点。问题是当用户位置改变其坐标动画时,每次都不会调用DidUpdateUserLocation方法。

我想要做的是用这些方法更快地平滑地改变位置,并像用户位置(蓝点)一样动画圆圈(调度不会更快地执行任何任务)

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self UpdateCirclePosition];
}

当用户位置发生变化时,将执行此方法。

- (void)mapView:(MKMapView *)mv didUpdateUserLocation:(MKUserLocation *)userLocation1
{
    [self UpdateCirclePosition];
}

此方法是为圆圈设置新坐标

-(void)UpdateCirclePosition
{
    //Removing past layouts from MapView
    [self.mapView removeOverlays: [self.mapView overlays]];

    //Set the circle in the middle of the current user location
    MKCircle *circle = [MKCircle circleWithCenterCoordinate:locationManager.location.coordinate radius:10];
    [self.mapView addOverlay:circle];
}

这是叠加更改时的方法

- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
    MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    circleView.strokeColor = [UIColor redColor];
    if (something)
    {
        circleView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.2];
    }
    else
    {
        circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
    }
    circleView.lineWidth = 0.5;
    return circleView;
}

1 个答案:

答案 0 :(得分:1)

didUpdateUserLocation获取最新职位,但随后您忽略该职位并致电UpdateCirclePosition。您应该将userLocation1中的坐标传递给UpdateCirclePosition并使用它们重新定位您的圆圈。