自定义注解视图用户位置不动的MapView(Custom Annotation view for u

2019-06-14 20:27发布

我们能否在iOS的用户当前位置的自定义注解看法?

我需要我自己的自定义视图(比如一些平针)取出蓝点(用圆圈)。 是否有可能做到这一点?

如果我们这样做,确实该引脚移动到新位置时,有用户的位置变化? 还是我们需要以编程方式处理呢?

我认为,如果我们使用默认的蓝色圆点为用户的当前位置,则其获取地图更新,当有用户位置的变化。

我只是想知道这是否可以用我们自己的自定义视图来完成。

Answer 1:

是的,你可以对用户的位置自定义视图。

不幸的是,这是很难实现比它应该是因为即使在viewForAnnotation委托方法的文档声称,你可以提供自己的看法,如果注释类为MKUserLocation ,自定义视图不会再继续与用户的位置移动。 事实上,当定制视图则返回MKUserLocation ,地图视图完全停止(地图视图的更新用户位置didUpdateUserLocation委托方法不再火灾)。 我相信这是一个错误。

一种解决方法是使用CLLocationManager和一个自定义的注释...


确保showsUserLocationNO或取消选中在地图视图。

声明的性质CLLocationManager和使用实现的自定义类的自定义注释MKAnnotation协议(或者你可以只使用通用MKPointAnnotation类)。

viewDidLoad或其他一些适当的地方,创造CLLocationManager ,设置其delegate并调用startUpdatingLocation

在外景经理的didUpdateToLocation委托方法 ( 而不是地图视图的didUpdateUserLocation委托方法),创建或更新您的自定义注释:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (myUserLocAnnot == nil)
    {
        self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease];
          //remove the autorelease if using ARC
        myUserLocAnnot.title = @"You are here";
        myUserLocAnnot.coordinate = newLocation.coordinate;
        [mapView addAnnotation:myUserLocAnnot];
    }
    else
    {
        myUserLocAnnot.coordinate = newLocation.coordinate;
    }
}

最后,在地图视图中的viewForAnnotation委托方法,你会如果注释是您的自定义用户位置标注返回自定义注解视图。



文章来源: Custom Annotation view for userlocation not moving the mapview