iOS - 三种弹窗方式

2018-07-25  本文已影响237人  CDLOG

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];

github传送门

上一篇下一篇

猜你喜欢

热点阅读