我想在一个浮动在表视图上的半透明框中显示进度指示器.换句话说,当正在下载表格内容时,我希望在其上方显示"正在更新"标签.
我在商店的几个应用程序中看到了这一点,特别是Facebook(当你动摇重装时)和Darkslide.
我的第一个冲动是创建一个半透明的UIView,在其中放置一个UILabel和一个UIProgressIndicatorView,并将其添加到视图层次结构......但在哪里? UIView可能不会与其兄弟姐妹重叠,因此我无法将其作为窗口的子视图. 我也不能把它作为表的子视图,因为它会随表格内容向上和向下滚动.
我考虑过创建一个新的UIWindow,但文档基本上说没有.
我知道CALayers可以相互重叠,所以这是一个选项,但我不能在CALayer中放一个进度指示器,我可以吗?我应该滚动自己的进度指示器来动画CALayer而不是UIView吗?
我对听说私有API不感兴趣.
编辑:问题是基于一个错误的假设.NSViews(在Mac OS X上)可能不会重叠,但iPhone上的UIViews可能会重叠.
我刚刚发布了我的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];
任务结束后,只需调用即可
[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];
就是这样!
你绝对可以重叠视图.只需将透明叠加层添加为tableView中的子视图即可.
从UIView的文档:
UIView对象排列在UIWindow对象中,位于子视图的嵌套层次结构中.视图层次结构中的父对象称为超级视图,子级称为子视图.视图对象声称其封闭超视图的矩形区域,负责该区域内的所有绘图,并且还有资格接收其中发生的事件.同级视图可以重叠而不会出现任何问题,从而允许复杂的视图放置.
还有着名的MBProgressHUD和SVProgressHUD
它们与@yonel的HUD相同
例
[SVProgressHUD show]; [SVProgressHUD dismiss];
MBProgressHUD现在看起来更受欢迎(如果我们基于github明星)