我想在半透明的框中显示进度指示器,该框漂浮在表视图上。换句话说,当正在下载表格内容时,我希望在其上方显示“正在更新”标签。
我在商店的几个应用程序中看到了这一点,特别是Facebook(当你动摇重装时)和Darkslide。
我的第一个冲动是创建一个半透明的UIView,在其中放置一个UILabel和一个UIProgressIndicatorView,并将其添加到视图层次结构......但是在哪里? UIView可能不会与其兄弟姐妹重叠,因此我无法将其作为窗口的子视图。 我也不能把它作为表的子视图,因为它会随表格内容一起向上和向下滚动。
我考虑过创建一个新的UIWindow,但文档基本上说不。
我知道CALayers可以相互重叠,所以这是一个选项,但我不能在CALayer中放入进度指示器,可以吗?我应该滚动自己的进度指示器来动画CALayer而不是UIView吗?
我对听到private APIs没兴趣。
编辑:问题是基于错误的假设。 NSViews(在Mac OS X上)可能不会重叠,但iPhone上的UIViews可能会重叠。
答案 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];
任务结束后,只需调用
即可[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];
就是这样!
答案 1 :(得分:14)
您绝对可以重叠视图。只需将透明叠加层添加为tableView中的子视图。
来自UIView的文档:
UIView对象排列在UIWindow对象中,位于子视图的嵌套层次结构中。视图层次结构中的父对象称为超级视图,子级称为子视图。视图对象声称其封闭的超视图的矩形区域,负责该区域内的所有绘图,并且还有资格接收其中发生的事件。同级视图可以重叠而不会出现任何问题,从而允许复杂的视图放置。
答案 2 :(得分:9)
还有着名的MBProgressHUD& SVProgressHUD
它们与@yonel的HUD相同
实施例
[SVProgressHUD show];
[SVProgressHUD dismiss];
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)
目前,我正在制作透明视图(此时至少在餐巾背面)。您可以使用它们来保存菜单按钮,在3D空间中移动它们,只需坚持下去。
我的意思是这是一个什么宗教信仰?来自NEXT的人们的惊人的东西:
UIView对象排列在UIWindow对象中,位于子视图的嵌套层次结构中。视图层次结构中的父对象称为超级视图,子级称为子视图。视图对象声称其封闭的超视图的矩形区域,负责该区域内的所有绘图,并且还有资格接收其中发生的事件。同级视图可以重叠而不会出现任何问题,从而允许复杂的视图放置。