iOS:用户位置变为pin码

iOS:用户位置变为pin码,ios,mkmapview,Ios,Mkmapview,我有一个具有奇怪行为的地图视图:当我打开它时,一切正常。用户(带圆圈的蓝色)将被定位,并且3个针脚已就位。但是(我不知道为什么)过了一段时间,蓝点变成了一个pin-但只有当我的连接速度慢的时候 以下是我得到的: - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKPinAnnotationView *pinView = (M

我有一个具有奇怪行为的地图视图:当我打开它时,一切正常。用户(带圆圈的蓝色)将被定位,并且3个针脚已就位。但是(我不知道为什么)过了一段时间,蓝点变成了一个pin-但只有当我的连接速度慢的时候

以下是我得到的:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];

    if (!pinView && ![annotation isKindOfClass:[MKUserLocation class]])
    {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
        pinView.pinColor = MKPinAnnotationColorRed;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;

        if (annotation == self.locationZH1)
        {
            [pinView setTag:1];
        }
        else if (annotation == self.locationZH2)
        {
            [pinView setTag:2];
        }
        else if (annotation == self.locationZH3)
        {
            [pinView setTag:3];
        }
        else if (annotation == self.locationLU1)
        {
            [pinView setTag:4];
        }
    }
    else
    {
        pinView.annotation = annotation;
    }

    return pinView;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
{
MKPinAnnotationView*pinView=(MKPinAnnotationView*)[mapView出列可重用的AnnotationViewWith Identifier:@“pinView]”;
如果(!pinView&![annotation IsKindof类:[MKUserLocation类]])
{
pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:@“pinView”];
pinView.pinColor=MKPinAnnotationColorRed;
pinView.animatesDrop=是;
pinView.canShowCallout=是;
UIButton*rightButton=[UIButton Button类型:UIButtonTypedTailButton];
pinView.rightCalloutAccessoryView=rightButton;
if(注释==self.locationZH1)
{
[pinView设置标签:1];
}
else if(注释==self.locationZH2)
{
[pinView设置标签:2];
}
else if(注释==self.locationZH3)
{
[pinView设置标签:3];
}
else if(注释==self.locationLU1)
{
[pinView设置标签:4];
}
}
其他的
{
pinView.annotation=注释;
}
返回pinView;
}

确保避免为内置用户位置标记提供注释视图

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    //check annotation is not user location
    if([annotation isEqual:[mapView userLocation]])
    {
        //bail
        return nil;
    }

    static NSString *annotationViewReuseIdentifer = @"map_view_annotation";

    //dequeue annotation view
    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewReuseIdentifer];

    if(!annotationView)
    {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewReuseIdentifer];
    }

    //set annotation view properties
    [annotationView setAnnotation:annotation];

    return annotationView;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
{
//检查注释不是用户位置
if([annotation isEqual:[mapView userLocation]])
{
//保释金
返回零;
}
静态NSString*annotationViewReuseIdentifer=@“映射视图注释”;
//出列注释视图
MKPinAnnotationView*annotationView=(MKPinAnnotationView*)[mapView出列可重用AnnotationViewWithIdentifier:AnnotationViewReuseIdentifier];
如果(!annotationView)
{
annotationView=[[MKPinAnnotationView alloc]initWithAnnotation:AnnotationReuseIdentifier:AnnotationViewReuseIdentifier];
}
//设置注释视图属性
[注释视图集注释:注释];
返回注释视图;
}
通过更早地检查用户位置注释,您可以为返回
nil
提供一个早出,而不是分配一个新的
MKPinAnnotationView
并返回它

-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释的文档说明:

如果注释参数中的对象是 MKUserLocation类,您可以提供一个自定义视图来表示 用户的位置。使用默认设置显示用户的位置 系统视图,返回nil


当annotation==mapView.userLocation时,需要返回nil以显示用户位置的蓝点及其周围的圆圈

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id      <MKAnnotation>)annotation

    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView  dequeueReusableAnnotationViewWithIdentifier:@"pinView"];

    if (!pinView && ![annotation isKindOfClass:[MKUserLocation class]])
    {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
        pinView.pinColor = MKPinAnnotationColorRed;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;

        if (annotation == self.locationZH1)
        {
            [pinView setTag:1];
        }
        else if (annotation == self.locationZH2)
        {
            [pinView setTag:2];
        }
        else if (annotation == self.locationZH3)
        {
            [pinView setTag:3];
        }
        else if (annotation == self.locationLU1)
        {
            [pinView setTag:4];
        }
        return pinView;
    }
    else
    {
        pinView.annotation = annotation;
        return Nil;
    }
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
MKPinAnnotationView*pinView=(MKPinAnnotationView*)[mapView出列可重用的AnnotationViewWith Identifier:@“pinView]”;
如果(!pinView&![annotation IsKindof类:[MKUserLocation类]])
{
pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:@“pinView”];
pinView.pinColor=MKPinAnnotationColorRed;
pinView.animatesDrop=是;
pinView.canShowCallout=是;
UIButton*rightButton=[UIButton Button类型:UIButtonTypedTailButton];
pinView.rightCalloutAccessoryView=rightButton;
if(注释==self.locationZH1)
{
[pinView设置标签:1];
}
else if(注释==self.locationZH2)
{
[pinView设置标签:2];
}
else if(注释==self.locationZH3)
{
[pinView设置标签:3];
}
else if(注释==self.locationLU1)
{
[pinView设置标签:4];
}
返回pinView;
}
其他的
{
pinView.annotation=注释;
返回零;
}
}
Swift 3解决方案:

if annotation is MKUserLocation{
    return nil
}

有时地图视图会重新加载,此时您的pinView.annotation已初始化,请为当前位置返回nil。