【发布时间】:2012-10-07 20:23:25
【问题描述】:
我正在尝试学习如何使用 MKMapView 并为此创建了一个示例应用程序;但是,在我的代码中,我调用setRegion:animated 来更改中心点和跨度,但地图永远不会更新。我在 StackOverflow (SO) 上运行了几个线程,其他人提到了类似的问题并尝试实施他们的解决方案无济于事。
我确保根据我发现的其他 SO 线程在我的代码中尝试的事情:
- 确保我使用框架初始化了 MKMapView
- 尝试在主线程上运行
setRegion:animated方法调用
我在下面包含了我的代码,谁能解释一下为什么我的 MKMapView 实例不会更新它的视图?
编辑:正确的代码如下所示: MK_ViewController.h:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MV_ViewController : UIViewController {
IBOutlet MKMapView *myMapView;
MKCoordinateRegion defaultRegion;
CLLocationCoordinate2D defaultCenter;
MKCoordinateSpan defaultSpan;
}
@end
MK_ViewController.m:
#import "MV_ViewController.h"
@interface MV_ViewController ()
@end
@implementation MV_ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// initialize default map view properties
defaultCenter = CLLocationCoordinate2DMake(33.732894,-118.091718);
defaultSpan = MKCoordinateSpanMake(0.028270, 0.0465364);
// Setup MapView's inital region
defaultRegion = MKCoordinateRegionMake(defaultCenter, defaultSpan);
// create the map view
CGRect screenRect = [[UIScreen mainScreen] bounds];
myMapView = [[MKMapView alloc] initWithFrame:screenRect];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// update map's initial view
[myMapView setRegion:defaultRegion animated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
MK_ViewController+MKMapViewDelegate.m:
#import "MV_ViewController.h"
@implementation MV_ViewController (MKMapViewDelegate)
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
MKCoordinateRegion region = mapView.region;
CLLocationCoordinate2D center = region.center;
MKCoordinateSpan span = region.span;
NSLog(@"Center (lat,lon): (%f,%f)",center.latitude,center.longitude);
NSLog(@"Span (lat,lon): (%f,%f)",span.latitudeDelta,span.longitudeDelta);
}
@end
【问题讨论】:
-
你能看到屏幕上的任何东西还是只是白色的?视图是从 xib 文件加载的吗?我只是问,因为我看不到您是否正在使用
[self.view addSubview:myMapView]将地图视图添加到主视图中@ -
我确实在我的视图中看到了地图,整个美国都在视口中可见。地图永远不会使用我提供的坐标进行更新。但我确实认为您正在做某事,让我尝试将 MapView 添加到 SubView。
-
所以我更新了一些代码,我认为你正在做一些事情。在我的 NIB 文件中,我添加了一个 MKViewMap 对象,但没有将它链接到我的应用程序中的任何内容。因此,我所做的是将其从 NIB 中删除,将
[self.view addSubView:myMapView]添加到我的代码中,然后它就启动了!感谢您为我指明正确的方向。 -
完全不相关,但在 viewDidAppear 中,它调用的是
[super viewDidDisappear:animated];(而不是[super viewDidAppear:animated];)。 -
太好了,很高兴它有帮助。如果您使用的是 nib 文件,您不妨在 nib 文件中添加 MKMapView,将其连接到插座,然后您不必手动创建地图视图或设置它的框架,这意味着您可以删除以下内容线路:
CGRect screenRect = [[UIScreen mainScreen] bounds]; myMapView = [[MKMapView alloc] initWithFrame:screenRect];
标签: ios mkmapview ios6 ios6-maps