1,简单弹窗(获取app窗口,直接添加view)
之前的写法: UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow这样写是不安全的,如果应用程序没有跳转,这种写法还算是可行的,但是如果应用程序出现了跳转(分享跳转到其他APP,访问系统相册等),这时返回原APP,你会发现加载原窗口上的视图位置会发生明显偏移,查阅了一些资料,发现如果写成
UIWindow *keyWindow = [[[UIApplication sharedApplication]delegate]window];
[keyWindow addSubview:coverView];
就不会出现上述问题
没有什么弹窗是在[[[UIApplication sharedApplication] delegate] window]上add自定义view解决不了的,移除用 [self removeFromSuperview];
2,modal控制器
直接modal出来的控制器,会先移除掉原来的控制器,如过想制造modal出来的控制器有半透明效果,需要设置
modalVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
但是这样设置会出现一个问题,那就是这个modalVC的所有控件都会是半透明的状态,要设置控制器view的背景色为半透明(不能直接设置 view半透明,否则子控件也会半透明)
核心代码
ModalViewController *VC = [[ModalViewController alloc]init];
[VC setModalPresentationStyle:UIModalPresentationOverFullScreen];
VC.textB = ^(NSString *text) {
NSLog(@"%@",text);
};
[self presentViewController:VC animated:YES completion:nil];
[self.view setBackgroundColor:[UIColor colorWithWhite:0.5 alpha:0.5]];
3,蒙版+model控制器
1,model控制器下面是一个蒙版,蒙版遮挡住导航栏
首先创建一个hudView,作为全屏蒙版,依次添加蒙版和控制器以及控制器的view到window。
代码如下
添加:
self.filter = [[FiltratePage alloc] initWithType:filtrate_buy];
self.filter.modalPresentationStyle = UIModalPresentationOverFullScreen;
UIWindow * window = [UIApplication sharedApplication].keyWindow;
self.hudView =[[UIView alloc]init];
[self.hudView Balck_showHud];
[window addSubview:self.hudView];
[window.viewController addChildViewController:self.filter];
[window addSubview:self.filter.view];
[self.filter.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(window);
}];
删除:
[self.hudView removeFromSuperview];
[self.filter.view removeFromSuperview];
网友评论