问题:
iOS15上,当前界面弹出一个模态界面,然后可以下拉消失。此时多次操作之后,返回上一级界面,此时会卡死。按home键,再返回app此时正常,但是再点击push或者pop还是会卡死。通过层级结构显示,最上层有一个叫UIParallaxDimmingView的盖在上面。试了一下14,并没有这种问题
思考过程:
多次尝试之后发现,Xcode输出了一个日志:Attempt to present on while a presentation is in progress。便想到在弹出的地方加了日志打印,发现反复弹出时,模态控制器并不是成对的 init和dealloc ,原因是第一个模态还没完全消失的时候,此时已经开始弹出第二个模态控制器了,然后再返回,此时卡死。
解决方案:
既然原因是第一个还未执行结束就弹出了第二个,那就想办法让第二次弹出的时候第一个的模态视图彻底完成。以下上代码
首先给模态控制器添加一个回调
@property(nonatomic, copy) void(^dismissBlock)(void);
然后.m文件添加
-(void)dealloc{
if (self.dismissBlock) {
self.dismissBlock();
self.dismissBlock=nil;
}
}
然后在调用的地方加一个标记 isTransition 用于标记是否转场动画完成
if(self.isTransition) {
return;
}
self.isTransition =YES;
UIViewController *modelVC= [[UIViewController alloc] init];
[self presentViewController:modelVC animated:NO completion:nil];
modelVC.dismissBlock = ^{
self.isTransition =NO;
};
网友评论