4.7秘诀:调用基本的文档中未记录的UIProgressHUD
UIProgressHUD类使用一个状态对话框来覆盖窗口。该对话框包含一个旋转的进度指示器和一个可指定的简短消息。就编程而言,你只需要实例化对象,使用主窗口初始化它,并通过发送show:YES告诉它执行的操作。图4-6显示了一个实际运行的UIProgressHUD显示,秘诀4-5显示了创建该显示的代码。
通过UIProgressHUD,你可以根据需要更新其文本。随时都可发送一个新的setText:消息。完成后,使用show:NO关闭它。如果需要,你可以通过setFontSize:调整字体大小,但是我建议你确保消息简短扼要。
图4-6UIProgressHUD的名称表示它是一个HUD。它添加了一个覆盖在
窗口之上的
进度条。你告诉它什么时候显示,什么时候隐藏以及内容是什么
说明
令人失望的是,苹果公司并没有将它包含在标准SDK类中。这里,我已经提出了解决办法。到这本书出版时,我真心地希望苹果公司将它添加回CocoaTouch。
使用带数据密集型代码的HUD显示时,你会希望让它在其自己的线程中运行,以便UI更新不会阻止。为此,可以使用NSThread的detatchThreadSelector:toTarget:withObject:方法。使用单独的线程使其启动,更新HUD的文本并在完成后关闭HUD。
秘诀4-5为窗口创建一个UIProgressHUD
4.8秘诀:使用UIActivityIndicatorView
UIActivityIndicatorView实例提供轻型视图,这些视图显示一个标准的旋转进度轮。当使用这些视图时,最重要的一个关键词是小。20×20像素是大多数指示器样式获得最清楚显示效果的大小。只要稍大一点,指示器都会变得模糊。图4-7显示了一个40像素的版本。
你需要在屏幕上将该指示器居中。将其放置在最方便操作的位置。作为背面清晰的视图,指示器将混合位于其后的背景视图。该背景的主要颜色帮助选择要使用的指示器样式。
对于一般用途,只需将活动指示器作为子视图添加到你要覆盖的窗口、视图、工具栏或导航栏。分配该指示器并使用一个框来初始化它,最好位于当前所使用的父视图中央。
通过将指示器的animating属性更新为YES来启动它。若要停止,将该属性设置为NO。CocoaTouch会负责完成其余工作,在视图不使用时隐藏视图。
iPhone提供了几种不同样式的UIActivityIndicatorView类。UIActivityIndicator-ViewStyleWhite和UIActivityIndicatorViewStyleGray是最简洁的。黑色背景下最适合白色版本的外观,白色背景最适合灰色外观(如图4-7所示)。它非常瘦小,而且采用夏普风格。选择白色还是灰色时要格外注意。全白显示在白色背景下将不能显示任何内容。而
UIActivityIndicatorViewStyleWhiteLarge只能用于深色背景。它提供最大、最清晰的指示器。
秘诀4-6显示了创建这些简单的UIActivityIndicatorView实例的代码。
图4-7UIActivityIndicatorView类提供了一个简单的旋转轮,这意味着将以相对较小的尺寸
显示
秘诀4-6向程序中添加UIActivityIndicatorView
4.9秘诀:构建UIProgressView
进度视图可以让用户在执行任务时了解任务进度,而不仅仅是告诉用户“请稍候”。会显示一条从左向右填充的进度条,表示任务完成的程度。进度条最适合长时间的等待,它提供状态反馈,从而使用户能够保持控制感。
若要创建进度视图,请分配该视图并设置它的框。若要使用进度条,请调用setProgress:。它只带一个参数,一个范围介于0.0(无进度)和1.0(已完成)之间的浮点数字。进度视图条有两种样式:基本白色或浅灰色。可以通过setStyle:方法选择你喜欢的种类。
与其他种类的进度指示器不同的是,显示和隐藏进度条的视图将完全由你来决定。它没有setVisible:方法。我喜欢向操作表中添加进度条。这样既可以将它们带到屏幕上,又能关闭它们。另一个好处是当显示警告表时,屏幕的其他部分会变暗。这样便可在你的任务进行时强制采用模式显示。用户无法与GUI交互,直到关闭警告为止。秘诀4-7显示了一个UIActionSheet/UIProgressView示例,该示例生成的显示如图4-8所示。
图4-8使用UIProgressView实例跟踪长时间延迟的进度。将它们添加到一个
UIActionSheet简化它们的显示和关闭
该秘诀使用文档中未记录的setNumberOfRows:调用。若要停留在SDK标准之内,就向标题中添加几个新行(\\n)。
说明在操作表中嵌入进度条时,你需要实现UIActionSheet委托协议。添加一个按钮单击方法符合该协议所需的方法,即使该方法本身未执行任何操作。
秘诀4-7向警告表中添加进度条