如何在iPhone上显示进度指示器叠加/ HUD?

ben*_*ado 23 iphone cocoa-touch core-animation

我想在一个浮动在表视图上的半透明框中显示进度指示器.换句话说,当正在下载表格内容时,我希望在其上方显示"正在更新"标签.

我在商店的几个应用程序中看到了这一点,特别是Facebook(当你动摇重装时)和Darkslide.

我的第一个冲动是创建一个半透明的UIView,在其中放置一个UILabel和一个UIProgressIndicatorView,并将其添加到视图层次结构......但在哪里? UIView可能不会与其兄弟姐妹重叠,因此我无法将其作为窗口的子视图. 我也不能把它作为表的子视图,因为它会随表格内容向上和向下滚动.

我考虑过创建一个新的UIWindow,但文档基本上说没有.

我知道CALayers可以相互重叠,所以这是一个选项,但我不能在CALayer中放一个进度指示器,我可以吗?我应该滚动自己的进度指示器来动画CALayer而不是UIView吗?

我对听说私有API不感兴趣.

编辑:问题是基于一个错误的假设.NSViews(在Mac OS X上)可能不会重叠,但iPhone上的UIViews可能会重叠.

yon*_*nel 15

我刚刚发布了我的HUD版本:https: //github.com/y0n3l/LGViewHUD

你很容易得到这个结果:

#import "LGViewHUD.h"
.... 
LGViewHUD* hud = [LGViewHUD defaultHUD];
hud.activityIndicatorOn=YES;
hud.topText=@"The longer....";
hud.bottomText=@"The better !";
[hud showInView:self.view];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

任务结束后,只需调用即可

[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];
Run Code Online (Sandbox Code Playgroud)

就是这样!


ndu*_*sis 14

你绝对可以重叠视图.只需将透明叠加层添加为tableView中的子视图即可.

从UIView的文档:

UIView对象排列在UIWindow对象中,位于子视图的嵌套层次结构中.视图层次结构中的父对象称为超级视图,子级称为子视图.视图对象声称其封闭超视图的矩形区域,负责该区域内的所有绘图,并且还有资格接收其中发生的事件.同级视图可以重叠而不会出现任何问题,从而允许复杂的视图放置.


Pie*_*NAY 9

还有着名的MBProgressHUDSVProgressHUD
它们与@yonel的HUD相同

[SVProgressHUD show];
[SVProgressHUD dismiss];
Run Code Online (Sandbox Code Playgroud)

SVProgressHUD示例 MBProgressHUD现在看起来更受欢迎(如果我们基于github明星)