在最近的开发需求里,有一个半透明的页面,从上到下弹出方式,然后在该弹出视图上再Modal和Push其他的页面,之前常规的做法是选择view添加到keyWindow上:
1、如果选择View来完成,modal出一个新页面
[[UIApplication sharedApplication].keyWindow addSubview:self];
由于弹出视图是添加在keyWindow上,modal出的新页面会在弹出的view之下
2.选择添加到window上,显示不会有问题
[[[UIApplication sharedApplication].delegate window] addSubview:self];
//在其他页面modal或push前将视图置于盒子下方
[[[UIApplication sharedApplication].delegate window] sendSubviewToBack:self];
//在返回到该弹窗页面时再将弹窗页面显示在最上方
[[[UIApplication sharedApplication].delegate window] bringSubviewToFront:self];
利用第二种方式能够较好的处理半透明弹窗的显示以及后续的Modal和Push交互,不过该方式在利用View数据传递和交互方式上会有诸多不便,遂考虑使用Modal出控制器的方式,利用VC去做数据传递与交互会便捷很多。
3、选择modal出一个控制器
需要设置modal的style
let modalVC = ModalViewController();
modalVC.modalPresentationStyle = .overCurrentContext