MKMapView不显示当前位置

时间:2011-08-03 23:08:46

标签: iphone ios ios4 mkmapview

我正在尝试让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];
}

正如您所看到的,我在我的setShowsUserLocation:YES上调用worldview,在我的标题文件中声明为:IBOutlet MKMapView *worldView;

我可能在这里遗漏了一些东西,但我认为这个消息是我唯一能让基本 mapview工作的东西?有任何想法吗?

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

感谢。

2 个答案:

答案 0 :(得分:2)

您已在xib文件中创建了MapView,是否确保已连接worldView插座?

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

#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

答案 1 :(得分:0)

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