MapView を持つ ViewController があり、コントローラーはストーリーボードで指定されたセグエによって初期化されます。MapView は、コントローラーのプロパティに (ストーリーボード経由で) 接続されています。
.h ファイル
@interface DetailViewController : UIViewController <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *locationMapView;
MapView を特定の領域の中央に配置する方法を使用しています。
- (void)centerMapView
{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(geoPoint.latitude, geoPoint.longitude), 1000, 1000);
[self.locationMapView setRegion:region animated:NO];
NSLog(@"size height: %f",self.locationMapView.frame.size.height);
NSLog(@"size width: %f",self.locationMapView.frame.size.width);
}
viewDidLoad
/からこのメソッドを呼び出すviewWillAppear
と、最初は何も実行されませんが、ビューが読み込まれた 2 回目に正しく中央に配置されます。ログ出力は常に次のとおりです。
size height: 0.000000
size width: 0.000000
viewDidAppear
MapView で呼び出されると、中央に配置され、出力サイズが正しくなります。
size height: 400.000000
size width: 320.000000
サイズの値は、ビューがまだ初期化されていないviewDidLoad
/viewWill
表示されていることを意味していると思います。これは、領域の設定に関する私の問題とは無関係かもしれません。
MapView の領域をviewDidLoad
/に設定することが実際に不可能な場合viewWillAppear
は、ユーザーが領域の変更を確認できないのではないかと思っています。
何かアドバイス?