如何在iPhone上显示进度指示器覆盖/ HUD?
我想在浮动在表视图上的半透明框中显示进度指示器。换句话说,当表格内容被下载时,我想要一个“更新”标签出现在它上面。如何在iPhone上显示进度指示器覆盖/ HUD?
我已经在店里的几个应用程序,尤其是Facebook的(当你摇动重装)和Darkslide看到了这一点。
我第一个冲动是创建一个半透明的UIView,放置一个UILabel和UIProgressIndicatorView里面,并把它添加到视图层次...但在哪里?
UIView可能不会重叠其兄弟,所以我无法将它作为窗口的子视图。
我也不能让它成为表格的子视图,因为那样它会随表格内容一起上下滚动。
我想过创建一个新的UIWindow,但文档基本上说不要。
我知道CALayers可以互相重叠,所以这将是一种选择,但我不能把一个进度指示一个CALayer的里面,可以吗?我应该推出自己的进度指示器来激活CALayer而不是UIView吗?
我没兴趣听有关private APIs。
编辑:的问题是基于一个错误的假设。 NSViews(在Mac OS X上)可能不会重叠,但iPhone上的UIViews可能会。
你绝对可以重叠的意见。只需将透明覆盖图作为子视图添加到tableView中即可。
从UIView的文档:
UIView的对象被布置在一个UIWindow对象内,在子视图的嵌套层级。视图层次结构中的父对象称为超级视图,子视图称为子视图。视图对象声明其封闭超视图的矩形区域,负责该区域内的所有绘图,并且有资格接收其中发生的事件。同胞视图能够重叠,没有任何问题,允许复杂的视图布局。
Interface Builder误导了我!我知道NSViews不能重叠,如果你在IB中创建重叠的UIViews,它会用警告标记它们。谢谢你让我直截了当。 – benzado 2009-02-27 01:52:24
居住在MainWindow.xib中的任何对象都可以通过插座访问应用程序窗口。标准项目中的应用程序委托已经拥有了它,但是您可能需要将该插件添加到需要显示进度叠加层的视图控制器中。
由于UIKit中的UIWindow是一个UIView(不同于NSWindow与一个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视图系统中的一个副作用。
目前我进入过度铺设透明视图(至少在这一点上的餐巾背面)。你可以使用它们来保存菜单按钮,在3D空间中移动它们,只需要坚果。
我的意思是这是一个宗教道或什么?来自NEXT家伙的惊人材料:
UIView对象被安排在一个UIWindow对象中,嵌套在子视图中。视图层次结构中的父对象称为超级视图,子视图称为子视图。视图对象声明其封闭超视图的矩形区域,负责该区域内的所有绘图,并且有资格接收其中发生的事件。同胞视图能够重叠,没有任何问题,允许复杂的视图布局。
我刚刚发布我的HUD版本: https://github.com/y0n3l/LGViewHUD
,你可以很容易得到这样的结果:
#import "LGViewHUD.h"
....
LGViewHUD* hud = [LGViewHUD defaultHUD];
hud.activityIndicatorOn=YES;
[email protected]"The longer....";
[email protected]"The better !";
[hud showInView:self.view];
一旦任务结束,只是援引
[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];
就是这样!
感谢您的开源解决方案 – shkschneider 2012-08-21 09:04:46
非常感谢您的分享,这真是太棒了! – kernix 2012-11-24 09:19:06
还有一些相当著名MBProgressHUD & SVProgressHUD
他们是同类型@yonel的HUD
例
[SVProgressHUD show];
[SVProgressHUD dismiss];
MBProgressHUD现在似乎更流行的(如果我们基于github的明星)
你可以节省你的手机如果符合您的需求,可以使用[MBProgressHUD](https://github.com/matej/MBProgressHUD)进行一些工作。 – 2009-08-12 13:29:03