在 iPhone MKMapView 中显示用户位置蓝点

Posted

技术标签:

【中文标题】在 iPhone MKMapView 中显示用户位置蓝点【英文标题】:show users location blue point in iPhone MKMapView 【发布时间】:2011-08-30 00:27:09 【问题描述】:

我正在我的 iPhone 应用程序的 MapView 中开发自定义图钉。 代码如下:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id  <MKAnnotation>)annotation
 
     static NSString *AnnotationViewID = @"annotationViewID";

     MKAnnotationView *annotationView = (MKAnnotationView *)[myMapView  dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

     if (annotationView == nil)
     
         annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
     

    if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")])  

        MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
        //pin.pinColor = MKPinAnnotationColorRed;
        annotationView = pin;
    
    else
    
        NSString *pin = [NSString stringWithFormat:@"pin%i.png",[[annotation imgNumber] intValue]];
        annotationView.image = [UIImage imageNamed:pin];//Canviar la chincheta per numero
        UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [annotationView setRightCalloutAccessoryView:button];
        annotationView.annotation = annotation;
        annotationView.canShowCallout = YES;

    /********* Imagen a la izquierda en la burbuja *********/
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    // Set up the Left callout
    UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myDetailButton.frame = CGRectMake(0, 0, 23, 23);
    myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    // Set the image for the button
    //[myDetailButton setImage:[UIImage imageNamed:@"botocorreu.png"] forState:UIControlStateNormal];
    NSString *detailButton = [NSString stringWithFormat:@"%i",[[annotation imgNumber] intValue]];
    [myDetailButton setImage:[UIImage imageNamed:detailButton] forState:UIControlStateNormal];  
    // Set the button as the callout view
    annotationView.leftCalloutAccessoryView = myDetailButton;
    annotationView.canShowCallout = YES;
    
     return annotationView;
  

这很好用,但用红色别针向我显示用户位置。 我检查了 IB 中的“显示用户位置”。 我想使用默认的蓝点,它会在用户移动时自动移动,对吗? 我该怎么做?

非常感谢。

【问题讨论】:

也可以看到***.com/a/68444109/9497800。 viewForAnnotation 方法顶部的代码只是 if annotation is MKUserLocation return nil for Swift 5 【参考方案1】:

将此添加到viewForAnnotation 方法的顶部

if ([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

特殊的用户位置注释是MKUserLocation 类型,在这种情况下返回 nil 会告诉地图视图为其绘制默认视图,即蓝点。

您也可以删除这些行,因为它们将不再需要:

if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")])  
    MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    //pin.pinColor = MKPinAnnotationColorRed;
    annotationView = pin;

else

【讨论】:

效果很好,谢谢。唯一的就是显示用户位置的蓝点,在他周围做了一个很大的圆圈,是否可以自定义? 圆圈大小表示位置的准确程度(越小表示越准确)。不确定这是否可以使用 CLLocationManager 在 MKMapView 中进行控制。 好的谢谢。而且您知道如何通过代码手动引入用户位置。我需要将用户放在一个地方。谢谢 很遗憾,动画蓝点视图不适用于您自己的注释视图,并且您无法覆盖地图视图的用户位置坐标。您可以在某个位置创建自己的注释,但不能使其使用蓝点动画。您必须自己绘制或截取圆点并将其用作注释视图中的图像。

以上是关于在 iPhone MKMapView 中显示用户位置蓝点的主要内容,如果未能解决你的问题,请参考以下文章

带光环的 iPhone MKMapView 引脚

iPhone应用程序中的MKMapView内存泄漏

如何在 iPhone 应用程序内的 MKMapView 中显示和连接多个位置与带有注释的路线?

userLocation 上的中心 MKMapView(最初) - 仅适用于 iPhone 4?

iphone 6 plus 上的 MKMapView 问题,视图中嵌入的地图不显示

没有在适当的时候更新 iphone 中 mkMapView 中的注释标题和副标题