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 不显示当前位置的蓝点的主要内容,如果未能解决你的问题,请参考以下文章