0

在 iOS 8 中未调用 MKMapView 委托方法。在 viewDidLoad 中:

CGRect mapViewFrame = CGRectMake(0.0, 129.0, 320.0, 419.0);
    _mapView = [[MKMapView alloc] initWithFrame:mapViewFrame];
    [_mapView setMapType:MKMapTypeStandard];
    [_mapView setDelegate:self];
    [_mapView setShowsUserLocation:YES];

这些方法永远不会被调用:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{};

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {}

在以前的 iOS 8 版本中,一切正常。

4

2 回答 2

0

您是否尝试过添加其他注释(不是用户位置)并查看是否调用了委托方法?这将帮助您解决问题

于 2014-10-27T19:09:23.137 回答
0

我认为用户位置检索在 iOS 8 中发生了变化。现在您需要使用 CLLocationManager 授权来跟踪用户位置。mapView.showsUserLocation = YES 已经不够了。

您需要一个 CLLocationManager 实例:

@property(nonatomic, strong) CLLocationManager *locationManager;

在 viewDidLoad

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    [self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
// your mapKit stuff...

这应该开始跟踪用户的位置并调用委托方法。

于 2014-10-25T13:58:25.917 回答