我编写了一个使用MKMapViewDelegate的简单方法,我在xcode 5模拟器中显示用户位置时遇到了一些麻烦。我的理解是,在按下前一个视图控制器的按钮并创建相应的UIViewController类之后,应该执行代码。但是,当按下按钮并且具有所述地图视图的视图控制器被推入堆栈时,它只显示没有缩放且没有位置的地图。如果我运行与单个视图独立应用程序相同的代码,它可以正常工作。我必须添加或更改什么才能让地图缩放到用户当前位置(在模拟器中它是San Fran总部)这是我正在使用的代码;
头:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface SPMenuViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *myMapView;
@end
实现:
#import "SPMenuViewController.h"
@interface SPMenuViewController ()
@end
@implementation SPMenuViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.myMapView.delegate = self;
[self.myMapView setShowsUserLocation:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
// Coords
CLLocationCoordinate2D myLocation = [userLocation coordinate];
// Zoom Region
MKCoordinateRegion zoomRegion = MKCoordinateRegionMakeWithDistance(myLocation, 2500, 2500);
// Show Location
[self.myMapView setRegion:zoomRegion animated:YES];
}
我认为应该注意的是,前一个视图嵌入在导航控制器中,而UIButton类通过“push”segue连接到包含地图视图的View Controller。请帮忙谢谢!
答案 0 :(得分:0)
如果设置断点,userLocation值是否有效?
设置showsUserLocation:YES应该为您处理获取/显示userLocation,但不保证该位置将在地图上。由于您在委托方法中设置了用户位置和zoomRegion,因此请在视图出现之前检查/是否实际调用了该方法。也许它没有初始值可以使用。
您可以尝试在viewDidLoad中设置初始userLocation和zoomRegion,而不是在didUpdateLocation中设置,以查看是否可以更好地工作。这看起来似乎应该正常工作。
可能缺少模拟位置的XCode设置? Current Location in the Simulator