MapKit 不显示当前位置的蓝点

Posted

技术标签:

【中文标题】MapKit 不显示当前位置的蓝点【英文标题】:MapKit doesn't show Blue Dot for Current Location 【发布时间】:2010-10-29 21:16:41 【问题描述】:

我是 iPhone 版 MapKit 的新手并尝试实现这一点,由于某种原因我看不到当前位置蓝点,其他人有这个问题吗????

#import "DetailMapViewController.h"
#import "mapAnnotations.h"

@implementation DetailMapViewController

@synthesize inStock;

-(void)getlocation:(CLLocationCoordinate2D)loc

    location = loc;


- (void)viewDidLoad 

    [super viewDidLoad];
    self.navigationItem.title = @"Street View";
    mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    mapView.delegate=self;      
    //MKCoordinateRegion region;
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 5000, 5000);

    mapAnnotations *ann = [[mapAnnotations alloc] init];
    ann.title = @"";
    ann.subtitle = @"";
    ann.coordinate = region.center;

    mapView.showsUserLocation = YES;
    [mapView addAnnotation:ann];
    [mapView setRegion:region animated:TRUE];
    [mapView regionThatFits:region];
    [self.view insertSubview:mapView atIndex:0];



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

    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

    if (annotation == mapView.userLocation)
    

        annView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"blueDot"];
        if (annView != nil)
        
            annView.annotation = annotation;
        
        else
        
            annView = [[[NSClassFromString(@"MKUserLocationView") alloc] initWithAnnotation:annotation reuseIdentifier:@"blueDot"] autorelease];


        
    

    if([inStock isEqual:@"yes"])
        annView.pinColor = MKPinAnnotationColorGreen;
     
    if([inStock isEqual:@"no"])
        annView.pinColor = MKPinAnnotationColorRed;
    
    if([inStock isEqual:@"unknown"])

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]];
        [annView addSubview:imageView];




    
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
    return annView;


- (void)dealloc 
    [super dealloc];



@end

【问题讨论】:

我看到您有 showsUserLocation = 是的,除非您没有将 XIB 文件连接到 mapview 控件到控制器,否则应该可以解决问题? 您确定您当前的位置在上述location 5000m以内吗? 我不能确定我在 5000m - 我从未使用过 XIB 文件。 您是否尝试显示“蓝点”和其他指示 inStock 的图钉? 你是在模拟器中运行这个吗?在这种情况下,您当前的位置是库比蒂诺的 Infinite Loop。 【参考方案1】:

viewForAnnotation 当前的编写方式,在尝试显示当前位置时实际上应该崩溃,因为“蓝点”注释视图没有 pinColor 或 animatesDrop 属性。

尝试将其更改为以下内容:

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

    if ([annotation isKindOfClass:MKUserLocation.class]) 
        //user location view is being requested,
        //return nil so it uses the default which is a blue dot...
        return nil;
    

    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

    if([inStock isEqual:@"yes"])
        annView.pinColor = MKPinAnnotationColorGreen;
     
    if([inStock isEqual:@"no"])
        annView.pinColor = MKPinAnnotationColorRed;
    
    if([inStock isEqual:@"unknown"])
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]];
        [annView addSubview:imageView];
    
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
    return annView;

在模拟器上,用户的位置将是美国加利福尼亚州库比蒂诺(旧金山以南一点)。如果您自己的注释不在 5000 米范围内,您将看不到蓝点。您必须缩小才能看到它。

【讨论】:

这是题外话,不管我的问题是什么,我能在模拟器中看到我当前的位置吗??【参考方案2】:
self.mapView.showsUserLocation = YES;

【讨论】:

如果你仔细阅读这个问题,你会发现他已经使用了这个属性。 我在初始化时设置了这个属性,但是在授予位置授权后我不得不再次设置它以使蓝点再次出现

以上是关于MapKit 不显示当前位置的蓝点的主要内容,如果未能解决你的问题,请参考以下文章

iPhone Mapkit 蓝点/用户位置区域缩放问题

如何使用 MapKit 让我的应用放大到我的位置

使用 MapKit 在 IOS 地图上放置图钉? [关闭]

MapKit 缩放到用户当前位置

如何使用蓝点在我的 MKMapView 上显示我当前的位置和区域?

Swift 中的 MapKit