图4-12应用程序标记显示为位于应用程序图标右上角的红色小容器注意,最新的iPhone固件版本行为与标记不一致。第二方标志继续可靠地为/Applications文件夹中的项工作,但不能为位于沙盒中的那些应用程序可靠地工作。说明就AppStore提交而言,仍然不确定SpringBoard调用是属于“文档中未记录但可以接受”类别还是属于“文档中未记录且不受支持”类别。应谨慎使用动态链接。代码清单4-3通过反向工程和动态链接实现常规标记4.14秘诀:简单的音频警告音频警告直接对用户“说话”。它们产生即时反馈(假设用户的听力没有问题)。幸运的是,苹果公司通过系统音频服务将基本声音播放构建到CocoaTouchSDK中。它的工作方式与Macintosh上的系统音频非常相似。或者也可以使用AudioQueue调用来创建音频警告,但价格非常高昂。AudioQueue播放对于程序来说“非常昂贵”,它涉及的内容比所需的简单的警告声音更加复杂。相比之下,你可以下载系统音频,然后仅使用几行代码来播放它。苹果公司表示,让警告声音保持简短,两秒或更少时间最合适。虽是这么说,但我使用长度高达一分钟的声音进行了测试,它们使用系统音频服务播放起来非常不错。系统音频只播放PCM和IMA音频。这意味着将你的声音限制为AIFF、WAV和CAF格式。若要构建系统声音,请通过一个指向声音文件的文件URL来调用AudioServicesCreate-SystemSoundID。该调用返回一个初始化的系统声音对象,然后你可以随意播放该对象。只需借助声音对象来调用AudioServicesPlaySystemSound。此单一调用完成了所有工作。你可以添加一个可选的系统声音完成回调,在声音完成播放(调用AudioServicesAdd-SystemSoundCompletion)之后通知程序,但实际上,你真的不需要这样做,尤其在使用苹果公司认可的简短声音时更是如此。若要清除声音,请在使用它们之后,抛弃它们。可以使用正在讨论的声音对象调用AudioServicesDisposeSystemSoundID。说明若要使用这些系统声音服务,请确保在代码中包含AudioToolbox/AudioServices.h,并且链接到音频工具箱框架。震动与音频警告相同,震动会立即引起用户的注意。而且,震动几乎适合所有用户,包括听力或视力受损的用户。使用秘诀4-11中的系统音频服务,你可以在播放声音的同时震动。你只需要通过下面这行调用来实现它:你无法改变震动参数。每个调用都会产生一个简短的一到两秒的嗡嗡声。在不支持震动的平台上(如iPodtouch),该调用不执行任何操作,但也不会产生错误。秘诀4-11播放简单的音频警告4.15小结本章介绍了直接与用户交互的方式。你已经学习了如何构建警告(视觉、听觉和触觉)以引起用户的注意,并且可以请求立即反馈。使用这些示例增强程序的交互性,并利用仅iPhone支持的独特特性。下面给出了本章的一些要点。l本章中的很多秘诀都依赖于文档中未记录的UIKit调用或动态链接(较差的方式)。我已经将这些秘诀包含在一本书中,该书侧重于正式的SDK开发,因为它们的功能不仅实用,而且经过了大部分iPhone开发人员的测试。本章中的所有调用都仅限于公用的SDK框架,并且没有违背苹果公司所声明的策略(至少理论上是这样)。l无论何时何任务占用大量时间时,一定要对用户有礼貌并且显示一种进度反馈。iPhone提供了许多可完成此操作的方法,例如弹出显示和状态栏指示器。l警告立刻引起用户注意。它们的作用是在交流信息时引起响应。而且,正如本章所述,它们具有极佳的可定制性。可以围绕简单的UIAlertSheet构建整个应用程序。l标记和状态栏图标都允许将应用程序状态扩展到当前应用程序之外。保守地使用这些特性可以提供最大量的信息。l音频反馈就像单击和嘟嘟声一样,可以改进程序并丰富交互性。使用系统声音调用意味着使用iPod功能可以出色地播放声音,不会破坏当前的听觉体验。IControl类为iPhone的许多交互式元素,包括按钮、文本字段、滑块和开关,提供了基础。与它们的祖先类相比,这些控件有更多共同点。控件都使用相似的布局和目标操作(target-action)方法。本章介绍控件及其用法,探索如何采用多种方式构建和定制控件。你将了解已在文档中细致记录的SDK调用和未在文档中细致记录的SDK调用。你还会学习如何通过分解UIControl视图结构(hierarchy)来访问和修改控件元素。从简单到复杂,本章介绍了大量可以在程序中重新使用的控件秘诀。8.1秘诀:构建简单的按钮iPhone支持若干种按钮类型。两个最常使用的按钮是从头开始创建的独立的UIButton实例,和专门在栏(包括导航栏、标签栏和工具栏)上使用的UIBarButtonItem实例。UIBarButtonItem提供了一个极其简单的方法,用最少的代码向程序添加按钮操作功能。代码清单8-1显示了一个典型的调用,你可以在UIViewControllerloadView方法中找到该调用。使用一个标题、一种样式、一个目标和一个操作来创建按钮。父视图,不管是导航栏、标签栏还是工具栏,都会为你处理按钮的位置和大小问题。代码清单8-1向导航栏添加UIBarButtonItemUIBarButtonItem使用目标操作。与所有控件相同,当用户与它们进行交互时,它们允许添加至少一个目标和回调操作。栏按钮条目(barbuttonitem)不指定相关事件的类型,它唯一关注的事件是按钮点击。使用栏按钮条目的缺点是不能把它们随意地放置在屏幕上。它们不是视图。因此,不能设置它们的结构并把它们添加到其他视图中。拥有它们的栏会构建和管理它们的外观。要把按钮放置在任意视图中,需要使用UIButton类。说明按钮由其父视图构建完成之后,就可以访问栏按钮条目的真实视图了。调用文档中未记录的UIButtonview方法。在没有遇到极其复杂问题的情况下,不能将该视图从其父视图中移除并把它看成一个独立的对象。而应使用视图添加像(不受文档支持)UIToolbarButtonBadge类这样的子视图,如本章后面的内容所示。8.1.1UIButton类UIButton实例向iPhone应用程序添加交互式按钮。它们提供更传统的控件,包括用于目标操作调用的边框(frame)和事件规范。点击这些按钮时,它们向指定的目标发送消息。IPhone提供了构建UIButton的两种方法。你可以使用一个预置按钮类型或从头开始构建一个自定义按钮。当前的iPhoneSDK提供了下面这些预置按钮类型。和你看到的一样,按钮类型并不是十分普遍。它们被添加到SDK主要是为了方便苹果公司,而不是方便你。虽然如此,你也可以在需要时在程序中使用它们。lDetailDisclosure。当你向表单元格添加细节展开附件时,会看到圆形的、蓝色的带V形的圆圈。
好文档 - 专业文书写作范文服务资料分享网站