MKMapView 不显示当前位置

Posted

技术标签:

【中文标题】MKMapView 不显示当前位置【英文标题】:MKMapView doesn't show current location 【发布时间】:2011-08-03 23:08:45 【问题描述】:

我正在尝试让 MKMapView 显示我当前的位置。我设法让它在具有单个视图的应用程序中工作,但现在我试图在 UITabBarController 中实现相同的视图。我的代码或多或少是一样的,但我仍然无法让它工作。

我正在关注关于 iPhone 开发的 BigNerdRanch 指南。我像他们对书中的其他视图一样实现了这个视图;我先写了init方法:

#import "CurrentLocationViewController.h"
#import "MapPoint.h"

@implementation CurrentLocationViewController

    - (id)init
    
        self = [super initWithNibName:@"CurrentLocationViewController"
                               bundle:nil];
        if (self) 
            UITabBarItem *tbi = [self tabBarItem];
            [tbi setTitle:@"Location"];

            UIImage *i = [UIImage imageNamed:@"Hypno.png"];
            [tbi setImage:i];

            locationManager = [[CLLocationManager alloc] init];
            [locationManager setDelegate:self];
            [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
            [locationManager setDistanceFilter:kCLDistanceFilterNone];

            [worldView setShowsUserLocation:YES];

        

        return self;
    

我也通过这样做使该 init 方法成为指定的初始化器:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    return [self init];

如您所见,我确实在我的worldview 上调用了setShowsUserLocation:YES,在我的头文件中声明为:IBOutlet MKMapView *worldView;

我可能在这里遗漏了一些东西,但我认为该消息是使 basic 地图视图正常工作所需的唯一内容?有任何想法吗?

如有必要,我可以提供更多代码。顺便说一句,视图确实正确加载,我首先检查了一种令人讨厌的颜色,它确实显示了地图。它只是没有在上面放一个蓝色别针。

谢谢。

【问题讨论】:

【参考方案1】:

您已经在 xib 文件中创建了 MapView,您确定已连接 worldView 插座吗?

此外,您无需为此设置 CoreLocation。只是为了比较 - 这是我对同一练习的控制器定义。它不显示 - 但我在 xib 文件而不是代码中设置了显示用户位置属性。

#import "MapViewController.h"

@implementation MapViewController
@synthesize mapView;

// New designated initialiser
-(id)init 
    if (!(self = [super initWithNibName:@"MapViewController" bundle:nil])) 
        return nil; // Bail!
    
    UITabBarItem *tbi = self.tabBarItem;
    tbi.title = @"Map";
    tbi.image = nil;

    return self;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    return [self init];


- (void)dealloc 
    [mapView release];
    [super dealloc];


#pragma mark - View lifecycle

- (void)viewDidUnload 
    [self setMapView:nil];
    [super viewDidUnload];


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);


#pragma mark - MapKit delegate methods

- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)userLocation 
    CLLocationCoordinate2D loc = [userLocation.location coordinate];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 1000.0f, 1000.0f);
    [aMapView setRegion:region animated:YES];


@end

【讨论】:

谢谢。我现在尝试使用您的代码,但我也无法让它工作。然后我想我需要让它开始寻找某个地方,但可能不在 init 中,所以我实现了viewDidLoad:- (void)viewDidLoad [worldView setShowsUserLocation:YES]; [super viewDidLoad]; ,现在它可以工作了:D。我猜这就是你在 xib 中所做的,而我是以编程方式完成的? 还有一件事。我设置 CoreLocation 是因为他们在第 6 章中就是这样做的。那么 MKMapView 是否能够自行查找位置?我不确定是否应该设置 CoreLocation,但我这样做是为了确定。 是的 - 正如你在我的控制器上看到的那样 - 我不使用 CL。我什至没有项目中的框架。【参考方案2】:

您是否仅在模拟器中进行测试?模拟器中蓝色的 userLocation 点显示在 1 Infinite Loop,这意味着如果您在没有显示 Cupertino 的区域放大,您可能无法看到它。

【讨论】:

不,我在设备和模拟器上都进行了测试。我知道 1 个无限循环。我只是忘了实现viewDidLoad。不过感谢您的建议!

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

MKMapview 在模拟器的 iOS-7.0 中不显示地图

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

过滤 MKMapView

iOS地图的显示(大头针)

当用户移动地图时,停止 MKMapView 移动到用户的当前位置

IOS-MapKit