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
网友评论