こんにちは仲間のプログラマー、
まず、長い投稿でごめんなさい。私の質問はかなり単純ですが、私が何をしているのかをあなたに知ってもらいたいので、私のアプローチの基本的な考え方を変えたくはありません。
(以下はすべてプログラムで行われ、ストーリーボード、ペン先、ナビゲーションコントローラーはありません)
独自のビューのないRootViewControllerがあります。彼が行うのは、他のViewControllerをインスタンス化し、それらの遷移を管理し、それらのビューをメインウィンドウにプッシュ(追加)することだけです。これらのビューを正しく配置するために、RootViewCOntrollersサブコントローラーの1つの境界/フレームを取得したいと思います。これは、appDelegateからRootViewControllerを作成する方法です(空のプロジェクトから始めました)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor grayColor];
self.window.rootViewController = [[UCRootViewController alloc]init];
[self.window makeKeyAndVisible];
return YES;
}
彼の初期化後、rootviewControllerはMapViewControllerを作成します
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"RootviewController initialized");
self.mapviewController = [[UCMapviewController alloc] initWithDelegate:self];
self.view = self.mapviewController.view;
[self.mapviewController.view setOpaque:YES];
[self.view bringSubviewToFront:self.mapviewController.view];
[self presentModalViewController:self.mapviewController animated:YES];
self.currentlyActiveController = self.mapviewController;
}
MapViewControllerは、navigationBarとMKMapViewを作成します。MapViewControllerのウィンドウの境界/フレームを取得できないため、現在、フレームをハードコーディングして設定しています。viewDidLoad()
境界/フレームに関する情報を取得しようとすると、0が返されます。
- (void)viewDidLoad
{
NSLog(@"MapviewController initialized");
[super viewDidLoad];
self.isMapViewPushedAside = NO;
// Custom initizialation for navigationBar
[self setupNavigationBar];
// Custom initialization for mapview
[self setUpMapview];
[self trackUserLocation];
// Custom initialization for popupActionsButton
[self setUpPopupButtons];
// Custom tests
[self test];
[self focusLocationOnMap:self.locationManager.location.coordinate];
[self.locationManager stopUpdatingLocation];
}
ウィンドウのフレーム/境界(同じ)を返す2つのデリゲートメソッドを実装しました。問題は、すべてが初期化された後ではなく、最初にこれらの値を取得する必要があることです。すべてが起動した後でボタンからデリゲートメソッドを呼び出すと、期待どおりに機能します。
CGRect frame = [self.mapDelegate frameData];
NSLog(@"width by frame: %f", frame.size.width);
NSLog(@"height by frame: %f", frame.size.height);
CGRect bounds = [self.mapDelegate boundsData];
NSLog(@"width by bounds: %f", bounds.size.width);
NSLog(@"height by bounds: %f", bounds.size.height);
開始時、つまりカスタムの「セットアップ」メソッドを呼び出す前に、フレーム/境界を取得するにはどうすればよいですか。