iOS 如何良好的避免加载框同时弹出

iOS中一个页面 同时有多个请求时,每个请求都弹出加载中弹框的话,
肯定不合适。当然我们每个人都有不同的方法来处理这种情况,有人使用disaptch_group组来处理,只有当组内请求完成时,才隐藏加载框。
有人使用单例类的形式创建加载框,这里我们说另外一种方法来解决这个问题。

首先给keywindow视图添加一个数组属性hideLoadArr,
1.当调用显示第一个加载框时,我们将它添加到keywindow上,
并添加到hideLoadArr数组里。

2.后面继续调用显示框时,我们会先判断hideLoadArr的数量是否大与0。
大于0直接添加到数组中,不进行直接显示,
如果等于0,重复第一次操作。

3.代码示例如下:

+(void)showLoadingType:(LYPLoadingType )loadType {
    LYPLoadingView *loadingView = [[LYPLoadingView alloc] initWithLoadingType:loadType];
    UIView *keyView = [self getKeyWindow];
   
     if(keyView.hideLoadArr.count>0){
         [keyView.hideLoadArr addObject:loadingView];
     }else{
         [self addLoadView:loadingView];
         [keyView.hideLoadArr addObject:loadingView];
     }
}

4.进行弹框隐藏时,首先判断hideLoadArr的数量是否大于0,
大于0移除加载框,并从hideLoadArr数组中移除该对象。
接下来继续判断hideLoadArr数组是否仍然大于0,
若大于0,则调用 [self addLoadView:loadingView];
将其显示在keywindow上:

 +(void)hideLoading {
    UIView *keyView = [self getKeyWindow];
    if(keyView.hideLoadArr.count >0){
         UIView *loadV = keyView.hideLoadArr.firstObject;
        [loadV removeFromSuperview];
        [keyView.hideLoadArr removeObject:loadV];
    }
    if(keyView.hideLoadArr.count>0){
        UIView *loadV = keyView.hideLoadArr.firstObject;
        if([keyView.hideLoadArr.firstObject isKindOfClass:[LYPLoadingView class]]){
            [self addLoadView:(LYPLoadingView *)loadV];
        }else{
            [self addLoadCustomView:loadV];
        }
       
    }
}


走过路过,给个赞吧,感谢!
参考demo地址:https://github.com/wkwl/LYPLoad.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容