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

时间:2009-02-27 00:51:44

标签: iphone cocoa-touch core-animation

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

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

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

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

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

我对听到private APIs没兴趣。

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

5 个答案:

答案 0 :(得分: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];

enter image description here

任务结束后,只需调用

即可
[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];

就是这样!

答案 1 :(得分:14)

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

来自UIView的文档:

  

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

答案 2 :(得分:9)

还有着名的MBProgressHUD& SVProgressHUD
它们与@yonel的HUD相同

实施例

[SVProgressHUD show];
[SVProgressHUD dismiss];

SVProgressHUD Examples MBProgressHUD现在似乎更受欢迎(如果我们基于github明星)

答案 3 :(得分:1)

MainWindow.xib中的任何对象都可以通过插座访问应用程序窗口。标准项目中的应用程序委托已经拥有它,但您可能希望将视口添加到需要显示进度叠加的视图控制器。

因为在UIKit中UIWindow是一个UIView(不像NSWindow和Cocoa中的NSView),你可以简单地将你的进度视图添加为窗口的子视图:

[window addSubview:progressView];

progressView将涵盖整个应用程序UI。

此示例使用该技术淡出Default.png初始图像:

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html


关于最近的编辑,从MacOS X 10.5开始,Leopard NSView重叠是确定性的(它们总是可以重叠,你只是得到了不确定的结果),尽管它具有不同的前后排序,具体取决于是否包含视图是否支持图层。这很可能是将CALayers集成到OS X视图系统中的副作用。

答案 4 :(得分:-1)

答案:苹果文档非常棒。 http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

目前,我正在制作透明视图(此时至少在餐巾背面)。您可以使用它们来保存菜单按钮,在3D空间中移动它们,只需坚持下去。

我的意思是这是一个什么宗教信仰?来自NEXT的人们的惊人的东西:

  

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