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 не был должным образом подключен к контроллеру представления, и контроллер представления создавал свое собственное представление карты.
Спасибо @ Джейсон Кэбот за то, что указал мне правильное направление.