2012-12-24 5 views
5

私はMapViewでViewControllerを持っています。コントローラはストーリーボードで指定されたセグで初期化されます。 MapViewはコントローラ内のプロパティに(ストーリーボード経由で)接続されています。MKMapViewとviewDidLoad/viewWillAppear/viewDidストーリーボードを使用しています


.hファイル

@interface DetailViewController : UIViewController <MKMapViewDelegate> 

@property (weak, nonatomic) IBOutlet MKMapView *locationMapView; 

私は特定の領域にのMapViewを中心にメソッドを使用しています:viewDidLoad/viewWillAppearからこのメソッドを呼び出す

- (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); 
} 

は、最初のために何もしませんビューが2度目にロードされるように正しく配置します。 ログ出力が常にある:viewDidAppearに呼び出されたとき

size height: 0.000000 
size width: 0.000000 

のMapViewを中心にして、出力サイズは正しいです:

size height: 400.000000 
size width: 320.000000 

私はサイズの値は、ビューがまだで初期化されていないことを意味を推測viewDidLoad/viewWillが表示されますが、これは地域の設定に関する私の問題とは関係ありません。

MapViewの領域を実際にviewDidLoad/viewWillAppearに設定することができない場合は、ユーザーに地域の変更が表示されないことがあります。

アドバイスはありますか?

+0

あなたはviewWillAppearでもこれを試したと言いましたか?そうでない場合は、そこで試してみてください。 –

+0

私はこれを成功させずに試しました –

答えて

0

表示サイズの問題は、おそらくリージョンの設定に関する問題とは関係ありません。

重要な質問:DetailViewControllergeoPointプロパティが設定されているのは、そのビューが読み込まれるときの相対的なものですか?そのプロパティを設定する前にviewDidLoadが実行されている場合(おそらく別のビューコントローラでprepareForSegue:sender:から)、マップを中央に配置しようとするとgeoPointはゼロになり、正しく中央に配置されません。 (そしてDetailViewControllerのインスタンスが既に存在し、前回からそのgeoPointを持っているので、それが二度目に動作します。)

あなたのgeoPointプロパティのカスタムセッターからあなたcenterMapViewメソッドを呼び出すと考えるかもしれません - あなたがいるその方法ビューコントローラが適切なデータを持っていればそれが起こることが保証されます。これは表示される前であっても、可視のマップ遷移がないようになります。

+0

あなたは正しいです、 'geoPoint'は別のコントローラから' prepareForSegue:sender: 'に設定されています。 しかし、カスタム初期化子から 'geoPoint'への' centerMapView'の呼び出しは役に立ちませんでした。私は 'centerMapView'で' geoPoint'の緯度と経度をログに記録し、 'viewDidLoad'から呼び出されても常に正しい値に設定されます。 –

関連する問題