1.改变rootviewcontoller-旧流程
对是否显示广告进行判断,广告ViewController 成为 Window的RootViewController。
这个时候去获取 keyWindow的rootViewController, 是 广告ViewController。
首页提前加载活动弹窗,就会收到影响。
2.不改变rootviewcontroller。 广告显示跟主线业务进行分离。
3.图片下载成功就显示出来。
//makeKeyAndVisible 这个不需要调用改变keywindow的方式。
static UIWindow *instanceWindow;
{
UIWindow * bg = [[UIWindow alloc] initWithFrame:CGRectMake(0, 100, 300, 300)];
UIWindow *curWindow = [UIWindow currentWindow];//获取当前的window
bg.windowLevel = curWindow.windowLevel+1;
bg.backgroundColor=[UIColor redColor];
bg.hidden=NO;
instanceWindow=bg;
}
{
instanceWindow.hidden = YES;
instanceWindow=nil;销毁掉
}
keyWindow不是一成不变的,当你创建alertView或者ActionSheet的时候,它们所在的window会变成keyWindow。也就是说系统默认创建的window首先变成keywindow,而当弹框的时候,alertView所在的window变成keywindow,默认的keywindow变成非keywindow。
发现
(1)UITextEffectsWindow
这是iOS8引入的一个新window,是键盘所在的window。它的windowLevel是最高的。
(2)UIRemoteKeyboardWindow
iOS9之后,新增了一个类型为 UIRemoteKeyboardWindow 的窗口用来显示键盘按钮。