我编译的代码没有错误,但我无法显示 welcomeUIView 。
是的,当我在 didFinishLaunchingWithOptions 中移动它时,它会显示出来。但为什么我不能按照我想要的方式制作呢?
这是控制台:
didFinishLaunchingWithOptions
view()
finished
代码:
AppDelegate.h
#import <UIKit/UIKit.h>
static UIWindow *window;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
AppDelegate.mm
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
std::cout<<"didFinishLaunchingWithOptions"<<std::endl;
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = [[UIViewController alloc] init];
view *v = new view();
v->set();
// Override point for customization after application launch.
window.backgroundColor = [UIColor whiteColor];
[window makeKeyAndVisible];
std::cout<<"finished"<<std::endl;
return YES;
}
view.mm
#include "view.h"
#include "AppDelegate.h"
#include <UIKit/UIKit.h>
#include <iostream>
void view::set()
{
std::cout<<"view()"<<std::endl;
UIView *welcomeUIView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[welcomeUIView setBackgroundColor:[UIColor darkGrayColor]];
[welcomeUIView setHidden:false];
[window.rootViewController.view addSubview:welcomeUIView];
[window.rootViewController.view bringSubviewToFront:welcomeUIView];
}
答案 0 :(得分:0)
您可以在根视图控制器中轻松添加视图。在viewDidLoad
-(void)viewDidLoad {
[super viewDidLoad];
UIView *welcomeView =
[[UIView alloc] initWithFrame:self.view.bounds];
welcomeView.backgroundColor = UIColor.darkGrayColor;
[self.view addSubview:welcomeView];
}
如果您有状态栏或导航栏,则不会覆盖整个屏幕。相反,您可以将视图添加到self.view.window
(使用代码中的CGRect)。
答案 1 :(得分:0)
错误是window
在标题中声明为static
,因此每个翻译单元都有自己独特的window
。
你已经在AppDelegate.mm中设置了window
变量,但是在view.mm中你有一个不同的window
仍然是零。如果您要共享window
,则应在标头中声明extern
,然后在AppDelegate.mm中定义它。
此外,您应该让视图控制器通过继承UIViewController并覆盖loadView
来设置自己的视图层次结构。