ios – 用于用户定位的自定义注释视图,不会移动mapview

前端之家收集整理的这篇文章主要介绍了ios – 用于用户定位的自定义注释视图,不会移动mapview前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们可以为iOS中的用户当前位置定制注释视图吗?

我需要用自己的自定义视图删除蓝点(带圆圈)(说一些ping pin).有可能做到吗?

如果我们这样做,当用户位置发生变化时,这个引脚是否移动到新的位置?或者我们需要以编程方式处理它?

我观察到,如果我们使用用户当前位置的默认蓝点,那么当用户位置发生变化时,它会在地图中更新.

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

解决方法

是的,您可以为用户的位置定制视图.

不幸的是,实现起来比应该更难,因为即使documentation for the viewForAnnotation delegate method声称如果注释类是MKUserLocation,您只能提供自己的视图,那么自定义视图不会随着用户的位置继续移动.事实上,当为MKUserLocation返回自定义视图时,地图视图将完全停止更新用户位置(地图视图的didUpdateUserLocation委托方法不再触发).我相信这是一个错误.

解决方法是使用CLLocationManager和自定义注释…

确保在地图视图上显示显示”位置为“否”或“未选中”.

使用实现MKAnnotation协议的自定义类声明CLLocationManager的属性自定义注释(或者您可以使用通用的MKPointAnnotation类).

在viewDidLoad或其他适当的位置,创建CLLocationManager,设置其委托并调用startUpdatingLocation.

location manager’s didUpdateToLocation delegate method(不是地图视图的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委托方法中,如果注释是您的自定义用户位置注释,则将返回自定义注释视图.

猜你在找的iOS相关文章