MKMapView не обновляется при вызовах setRegion: анимированный

Я пытаюсь узнать, как использовать MKMapView и создал пример приложения для этого; однако в моем коде я звоню setRegion:animated изменить центральную точку и промежуток, но карта никогда не обновляется. Я пробежал несколько потоков в Stackru (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

1 ответ

Решение

Я решил проблему, удалив объект MKViewMap из NIB, и вместо этого добавил его, используя следующий код в файле MK_ViewController.m:

[self.view addSubView:myMapView];

Проблема состояла в том, что NIB не был должным образом подключен к контроллеру представления, и контроллер представления создавал свое собственное представление карты.

Спасибо @ Джейсон Кэбот за то, что указал мне правильное направление.

Другие вопросы по тегам