我正在尝试让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工作的东西?有任何想法吗?
如有必要,我可以提供更多代码。视图确实加载正确顺便说一句,我首先检查了一个令人讨厌的颜色,它确实显示了地图。它只是没有放一个蓝色的针脚。
感谢。
答案 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的区域,您可能无法看到它。