1

私は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
4

1 に答える 1

0

NIBからMKViewMapオブジェクトを削除することで問題を解決し、代わりにMK_ViewController.mファイルの次のコードを使用して追加しました。

[self.view addSubView:myMapView];

問題は、NIBがView Controllerに適切に接続されておらず、ViewControllerが独自のマップビューを作成していたことでした。

私を正しい方向に向けてくれてありがとう@JasonCabot。

于 2014-10-09T14:27:59.673 に答える