各位程序员好,
首先,对不起,很长的帖子。我的问题很简单,但我想确保你知道我在做什么,我真的不想改变我的方法的基本思想。
(以下全部以编程方式完成,没有故事板,没有笔尖,没有导航控制器)
我有一个没有自己视图的 RootViewController。他所做的只是实例化其他 ViewController,管理它们的转换并将它们的视图推送(添加)到主窗口中。为了正确定位这些视图,我想获取 RootViewCONtrollers 子控制器之一的边界/框架。这就是我从 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。现在我设置了硬编码的框架,因为我无法viewDidLoad()
在 MapViewController 中获取窗口的边界/框架当我尝试获取有关边界/框架的任何信息时,我得到 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];
}
我已经实现了两个为窗口返回框架/边界(相同)的委托方法。问题是,我必须在一开始就获取这些值,而不是在所有内容都初始化之后。一切就绪后,当我从按钮调用委托方法时,它们按预期工作。
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);
我如何在开始时获得框架/边界,即在调用我的自定义“设置”方法之前......?!