我写了一个简单的方法来利用MKMapViewDelegate,我在xcode 5模拟器中显示用户位置时遇到了一些麻烦。我的理解是,代码应该执行后,一个按钮从以前的视图控制器被按下,并创建相应的UIViewController类。然而,当按钮被按下,带有地图视图的视图控制器被推到堆栈上时,它只是显示没有缩放和位置的地图。如果我运行相同的代码作为一个单一的视图独立应用程序,它工作得很好。我必须添加或更改什么才能使地图缩放到用户的当前位置(在模拟器中它的旧金山总部)这是我使用的代码;
头:#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连接到包含地图视图的视图控制器。请帮忙,谢谢!
如果设置了断点,userLocation值是否有效?
设置showsUserLocation:YES应该为您处理获取/显示userLocation,但不保证该位置将在地图上。因为你在委托方法中设置了用户位置和zoomRegion,检查那个方法是否在视图出现之前被调用了。可能它没有初始值。
你可以尝试在viewDidLoad中设置初始userLocation和zoomRegion,而不是在didUpdateLocation中,看看是否工作得更好。看起来应该能正常工作。
也许缺少XCode设置来模拟位置?模拟器中的当前位置