首页>参考读物>计算机科学与技术>软件与程序设计

iOS核心开发手册(原书第5版)
作者 : (美)Erica Sadun  Rich Wardwell 著
译者 : 爱飞翔 译
出版日期 : 2015-04-08
ISBN : 978-7-111-49185-9
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 562
开本 : 16
原书名 : The Core iOS Developer's Cookbook
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书介绍了如何利用iOS 7进行程序开发的已经过检验的可信解决方案。是iOS领域内最畅销的图书,作者将当前最优的实践运用到工作代码中,将核心的概念转换为读者方便理解和应用的具体方案,利用实例,充分展示了iOS开发中的“如何进行”和“为什么这么做”两个方面。

图书特色

本书由著名iOS编程专家、顶级iOS开发大师联合撰写,是市面上最畅销的iOS开发图书的全新升级版本。书中用丰富的实例、直观的代码展示创建优秀iOS程序所需的全部技巧,帮助读者轻松掌握并高效开发iOS程序。
本书共分15章:第1章讲解iOS程序中的手势与触摸,包括直接操纵界面、多点触摸和创建自定义的手势识别器;第2章深入讲解如何操控应用程序;第3章介绍如何在应用程序中实现信息通知;第4章讲解如何编排视图及其动画效果;第5章介绍如何用代码来做视图方面的约束;第6章讲解如何控制键盘、使屏幕上面的控件支持文本输入、扫描文本、格式化文本等;第7章介绍各种视图控制器类的用法;第8章讲解常用的控制器,包括从照片库中选取照片、拍照、录制并编辑视频等;第9章介绍表格的用法,解释表格的工作原理,讲解可供开发者使用的各种表格,并且告诉你如何在程序中利用表格的各种特性;第10章讲述使用Collection 视图所需的各种基础知识,包括如何创建可以横向滚动的列表,如何创建网格布局,如何创建“圆形”等特殊方式的布局;第11章讲解如何在应用程序之间分享文档及数据;第12章浅谈Core Data,你会学到如何设计受托管的数据库存储区,如何添加并删除数据,如何用代码查询数据,以及如何把这些操作同UIKit中的Table 视图及Collection 视图相集成;第13章介绍网络编程中的常用技术,同时也提供一些解决方案,用来简化日常的网络开发任务;第14章讲解针对特定设备的开发,包括如何查看设备的硬件规格以及可供使用的感应器等;第15章简单介绍VoiceOver这项辅助功能,开发者可以通过该功能尽量扩大应用程序的受众。

本书为iOS 7日常开发者提供了可靠而行之有效的解决方案。著名iOS编程专家Erica Sadun和顶级iOS开发者Rich Wardwell向大家展示了创建优秀iOS 7移动应用程序所需的全部技巧,告诉读者如何使用标准的API,以及如何充分利用iOS 7的图形、触摸与视图。
和Sadun所写的其他iOS畅销书一样,本书也用直观的代码来演示当前流行的编程技巧,并把关键概念浓缩为简洁的解决方案(recipe),使读者能够轻松掌握并将其运用到自己的项目中。本书并不是简单地把代码拼凑起来,而是会向你详细解释如何高效地开发iOS 7程序,并告诉你这样做的原因。
本书所有代码都经过全面修订与测试,而且利用了iOS 7的新功能及设备的新特点。
通过阅读本书,你将学到:
用多点触控、手势及自定义的手势识别器来创建先进的触摸式界面。
通过功能强大的新方式来构建并自定义控件。
创建与iOS 7的设计风格相符的新式界面。
实现iOS 7中新引入的动画效果。
通过弹出式窗口、进度条、本机通知、popover、提示音等手段来提醒用户。
用Xcode模块轻松地整合系统框架及头文件。
编排视图及其动画效果,规划视图的体系结构并理解视图之间协同运作的方式。
用iOS 7中强大的Auto Layout约束系统来适配各种尺寸的显示屏。
控制键盘,令屏幕上的控件具备文本输入功能,高效地扫描并调整文本格式。
用视图控制器来规划用户的工作区。
管理照片、视频、电子邮件及文本信息。
用iOS 7的先进特性来操作Flickr及Vimeo等社交媒体。
实现VoiceOver辅助功能,其中也包括iOS 7新引入的文本转语音功能。
初步了解如何使用Core Data来管理数据库。
使用iOS 7中强大的网络与Web服务功能。
用iOS 7新提供的API及灵活功能来增强程序的效果,其中包括提升可靠性及美化文本。
解决iOS 7中的一些问题和程序缺陷。

作者简介
Erica Sadun 是数十本畅销书的作者、合著者和供稿者,这些书涉及程序设计、数字视频、数字摄影、Web设计和其他技术主题。作为一名在iOS领域最负盛名的开发人员,她还开发了数十种iPhone自带的应用。Sadun拥有佐治亚理工学院计算机科学专业的博士学位。
Rich Wardwell 是Black Pixel的资深iOS及Mac开发者,在专业级服务器、桌面和移动领域有20多年软件开发经验,并以主要开发者的身份参与制作了很多款Apple App Store上的优秀iOS应用程序,包括USA Today及Fox News。

译者简介
爱飞翔 资深软件开发工程师,擅长Web开发、移动开发和游戏开发,有10余年开发经验,曾主导和参与了多个手机游戏及手机软件项目的开发,经验十分丰富。业余爱好文学和历史,有一定的文学造诣。翻译并出版了《Android游戏开发实践指南》、《测试驱动的iOS开发》、《HTML5 Canvas核心技术:图形、动画与游戏开发》、《NoSQL精粹》和《JavaScript应用开发实践指南》等书。

图书前言

欢迎阅读本书新版!
自苹果公司发行iOS移动操作系统以来,iOS 7的变革是最为重大的。这本教程将会指导各位开发者针对这个新发布的优秀操作系统来制作应用程序。2013年的全球软件开发者年会(Worldwide Developers Conference,WWDC)公布了一些新的特性和视觉范式,而本书这次修订已经将它们全都涵盖在内了,笔者将会向你演示如何将其融入自己的应用程序里。
发行团队将这次修订过的Cookbook材料分成两本书来印刷,以控制每本书的篇幅。本书的英文书名叫作《The Core iOS Developer’s Cookbook》,讲述了日常开发所需的关键知识,介绍了使用标准API与界面元件来创建iOS应用程序时所需用到的类。同时,本书以“解决方案”的形式讲解创建移动应用程序时所需的图像、触摸及视图等技术。
另外一本书的英文名叫作《Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming》,其中包含了一些入门知识,相当于老版本Cookbook的前面几章。该书适合想要从头学习iOS 7基础知识的开发者阅读。《Learning iOS Development》讲述了Objective-C编程语言、Xcode开发环境以及与调试和部署有关的内容,你可以通过它学会如何使用苹果公司的开发工具套件。
学习本书所需的材料和知识
想开发iOS应用程序,肯定得有一台测试应用程序用的iOS设备,而且最好是一台新款的iPhone或iPad。下面列出阅读本书所需的材料和基础知识:
苹果公司的iOS SDK——你可以从苹果公司的iOS Dev Center(http://developer.apple.com/ios)下载最新版的iOS SDK。如果打算在App Store上发售应用程序,那么还必须成为付费的iOS开发者。个人开发者每年需要付款99美元,企业开发者每年需要付款299美元。注册成为付费开发者之后,就会收到一份证书,开发者可以用这份证书来签署应用程序,并将其下载到iPhone、iPod touch或iPad中进行测试与调试,此外,付费开发者还可以提前获得预览版的iOS系统。未付费的开发者可以在Mac系统的模拟器上测试软件,但是不能将其部署到设备中,也不能将其提交到App Store。
运行Mac OS X Mountain Lion(v 10.8)系统的新款Mac,如果装的是Mac OS X Mavericks(v 10.9)系统就更好——你需要为软件开发留出足够的磁盘空间,而且应该尽可能把Mac的RAM装配得大一些。
iOS设备——尽管iOS SDK里的模拟器也能用来测试应用程序,但是开发者仍然需要一台iOS硬件设备,以便针对iOS平台做开发。你可以把iOS设备与电脑相连,并把自己构建的软件装上去。在开发真实的App Store程序时,应该准备数款硬件和固件各不相同的设备,以便在目标用户可能会用到的各种平台上进行测试。
因特网连接——连上网之后,就可以测试应用程序在使用WiFi和使用移动数据网络时的效果了。
熟悉Objective-C——要想编写iPhone程序,需要了解Objective-C 2.0。这是一门基于ANSI C的语言,并且带有面向对象扩展,也就是说,你需要了解一点C语言的知识。如果原来用Java或C++写过程序,而且又熟悉C语言,那么应该能够迅速适应Objective-C。
学习Mac/iOS开发的路线图
一本书不可能把各类读者所需的全部知识都囊括其中。假如两位作者把你所需的全部内容都写到这本书里,那它会重到根本拿不起来。实际上,想要开发Mac及iOS平台上的程序,需要学习很多内容。如果你刚处于起步阶段,而且没有写过程序,那么首先应该学习一门大学水平的C语言课程。大部分编程语言都以C语言为根基,对于想要成为开发者的人来说,自然也要从C语言学起。
学会C语言及编译器(基础的C语言课程会讲到它)的用法之后,剩下的事情就简单多了。此时可以直接跳到Objective-C语言,学习如何用它来编程,同时还可以学习Cocoa框架。图1是一张流程图,里面列出了培生教育出版集团所出版的一些关键书籍,它们可以帮助你成为一名熟练的iOS开发者。
了解C语言之后,就可以通过多种方式来学习Objective-C编程了。如果想深入了解Objective-C,那么可以阅读苹果公司自编的文档,也可以翻看下列Objective-C教材:
《Objective-C Programming: The Big Nerd Ranch Guide》,第2版,Aaron Hillegass与Mikey Ward著(Big Nerd Ranch,2013年)
《Learning Objective-C 2.0: A Hands-on Guide to Objective-C for Mac and iOS Developers》,第2版,Robert Clair著(Addison-Wesley,2012年)
《Programming in Objective-C 2.0》,第6版,Stephen Kochan著(Addison-Wesley,2012年)

图1 成为iOS开发者的路线图
学会编程语言之后,接下来应该学习Cocoa(适用于Mac开发)、Cocoa Touch(适用于iOS开发)以及开发工具,这个开发工具指的就是Xcode。这一阶段也有几种不同的学习途径。你依然可以在苹果Developer查阅苹果公司自编的Cocoa、Cocoa Touch及Xcode文档(网址是:developer.apple.com),也可以通过阅读书籍来学习它们。笔者推荐两本经典的教材:《iOS Programming: The Big Nerd Ranch Guide》第2版与《Cocoa Programming for Mac OS X》第4版,前者是Aaron Hillegass与人合著的,后者是他自己写的,Aaron Hillegass是美国亚特兰大Big Nerd Ranch公司的创始人。Mac开发圈内的人士非常欣赏Aaron所写的书,而且cocoa-dev邮件列表里面的人也最爱推荐他的书。
市面上还有非常多的书籍可供选择,包括由Dave Mark、Jack Nutting、Jeff LaMarche及Fredrik Olsson所著的畅销书《Beginning iOS 6 Development》(Apress,2011年)。如果你完全是个编程新手,那么可以看看Tim Isted写的《Beginning Mac Programming》(Pragmatic Programmers,2011年)。不要只看一本书,也不要只看一家出版社的书。和不同的开发者交流,可以学到更多的知识,同理,通过阅读多本书籍,你也可以学到更多的技巧和窍门。
若想真正掌握Mac或iOS开发,还需通过各种渠道学习:看书、看博客、看邮件列表、看苹果公司自编的开发文档,而且最好能参加开发者会议。如果有机会参与WWDC的话,你就会明白开发者都在讨论些什么内容。对于真正想学好编程的开发者来说,在开发者会议上花些时间和别人交流是件非常值得的事情(在参加WWDC时,请和苹果公司的工程师交流一下)。
本书结构
本书以解决方案的形式逐个讲解iOS开发新手经常遇到的各种问题,比方说:排布界面元件、响应用户、访问本地数据源、连接Internet等。相关的一组任务会放到同一章里面,这样读者就可以直接找到问题的解决办法,而不用再去想解决该问题所需使用的类或框架了。
本书范例代码可供你随手剪切并粘贴,也就是说,书中每个解决方案里面的源代码都可以复用到你自己的应用程序里,你只需按照自己程序的需求来调整即可。
下面简述每章内容。
第1章,手势与触摸——在iOS程序中,触摸是一种非常重要的手段,用户可以由此来传达对应用程序所做的操作。触摸并不局限于按下按钮及通过键盘交互这两种行为。本章将介绍直接操纵界面、多点触摸以及其他一些内容。你将会学到如何创建这样一种视图:用户可以在屏幕上试验各种手势,并看到不同手势之间的区别。另外,本章还会告诉你如何创建自定义的手势识别器。
第2章,构建并使用控件——本章将深入讲解如何操控应用程序。你将会详细了解控件的运作机制,还能学会以多种方式来构建并自定义控件。这一章包含很多解决方案,有的比较简单,有的比较复杂,你可以把它们复用到自己的程序里。
第3章,提醒用户——iOS提供了多种在屏幕上向用户显示信息的方式,比如弹出式对话框、进度条、本机通知(local notification)、popover和audio ping等。本章将会讲解如何在应用程序中实现这些信息通知手段,以帮助读者用更多的方式向用户显示信息。本章将介绍这些类的基本使用方法,另外还会提供一些解决方案,使你可以通过基于块的API(blocks-based API)来轻松地处理与警示信息有关的交互操作。
第4章,编排视图及其动画效果——UIView类及其子类可用来填充iOS设备的屏幕。本章将会从头开始讲解视图。与视图有关的解决方案会分别演示如何获取视图对象、如何制作视图的动画效果以及如何操纵视图对象。你将会学到怎样构建、检视及分解视图层级,并了解多个视图是如何组织起来的。通过学习本章,你会发现在图形界面中创建并摆放视图的时候,视图位置的排布是非常重要的,另外,你还会学到如何制作视图在屏幕上移动和切换时所具备的动画效果。
第5章,视图的约束系统——Auto Layout机制彻底改变了iOS程序里视图的排布方式。苹果公司的这种布局特性使开发者可以轻松地设计出更为协调一致的界面。此特性对于同一系列不同屏幕大小、不同界面、不同屏幕方向、不同语言的设备来说尤为重要。本章将会介绍如何用代码来做视图约束方面的开发。你会学到怎样在屏幕上的物件之间创建关系以及怎样指定布局规则,使iOS能够自动排布应用程序中的视图。看完本章后,你就能设定一套健全的屏幕布局规则了。
第6章,文本输入——本章的解决方案都与文本有关,这些解决方案能够解决许多问题。你会学到如何控制键盘、如何使屏幕上面的控件支持文本输入、如何扫描文本、如何格式化文本,等等。这一章会把与iOS程序文本处理有关的各项技术都涵盖在内,包括文本框、文本视图以及iOS内置的拼写检查器。
第7章,使用视图控制器——本章将会讲解各种视图控制器类的用法,这些类使得用户可以在更大的范围中与应用程序交互,而开发者也可以借此来排布视图。你将通过本章的各解决方案学到页面视图控制器、分栏视图控制器、导航控制器等视图控制器的用法。
第8章,常用的控制器——iOS SDK里面有很多系统自带的控制器,开发者可以用它们来完成日常的开发任务。本章将介绍最为常用的控制器。你会学到如何从照片库中选取照片、如何拍照、如何录制并编辑视频。另外,你还会学到如何在程序中编写电子邮件及文本消息,以及如何在Twitter及Facebook等社交媒体上张贴信息。
第9章,创建并管理表格视图——表格(table)是一种可以滚动的交互类,它在屏幕较小的设备上面效果很好,在屏幕较大的平板电脑上面效果也很不错。由于表格可以把内容以一种简单而自然的方式组织起来,所以很多iOS应用程序都是以表格为中心的。本章将介绍表格的用法,解释表格的工作原理,讲解可供开发者使用的各种表格,并且告诉你如何在程序中利用表格的各种特性。
第10章,集合视图——集合(collection)视图的许多概念都与表格相同,但是功能更加强大,而且更加灵活。本章将会讲述使用集合视图所需的各种基础知识,包括如何创建可以横向滚动的列表、如何创建网格布局、如何创建圆形等特殊方式的布局,等等。你将学到怎样通过布局规格(layout specification)把视觉效果集成到集合视图里面,以及怎样使集合视图中的内容在滚动之后自动调整位置,另外,你还会学到如何利用内置的动画支持来创建出最有效的互动效果。
第11章,分享文档与数据——在iOS系统中,应用程序可以分享信息和数据,另外,开发者也可以使用系统所提供的许多特性,把控制权从一个程序转移到另一个程序。你可以用本章所介绍的几种方式在应用程序之间分享文档及数据。你将学到如何把这些特性添加到自己的应用程序之中,以及如何灵巧地使用分享功能,令自己的应用程序可以和iOS生态系统里的其他程序协同运作。
第12章,浅谈Core Data——Core Data提供了一套受托管的数据存储机制,使开发者可以在应用程序中查询并更新存储区里的数据。它提供了一套基于Cocoa Touch的对象接口,使得iOS开发者能够像使用SQL查询语句那样,通过Objective-C代码来管理关系型数据库中的数据。本章介绍Core Data。通过其中的各解决方案,你可以初步了解这项技术,同时还能以本章内容为出发点,继续深入学习Core Data。你将学到如何设计受托管的数据库存储机制、如何添加和删除数据、如何用代码查询数据,以及如何把这些操作同UIKit中的表格视图及集合视图相集成。
第13章,网络编程基础——在连接到Internet的设备上面,特别适合用iOS程序来订阅基于网络的服务。苹果公司为iOS平台提供了各种坚实的网络计算服务及支持技术。本章将介绍网络编程中的常用技术,同时也提供一些解决方案,用来简化日常的网络开发任务。本章介绍iOS 7新引入的HTTP系统,并且提供实现数据下载功能(包括后台下载)所用的一些范例代码。你还会学到如何判断网络是否可用,以及如何使用Web服务,这其中包含了一些范例代码,它们告诉你如何通过XML解析及JSON序列化来访问一些在线服务。
第14章,针对特定设备的开发——每台iOS设备都有许多属性,有些属性是该设备所独有的,而有些则是许多设备所共有的;有些属性是持续变化的,而有些则保持不变。这些属性包括设备当前的物理方向、型号名称、电池状态以及是否可以访问机体内的硬件等。本章将会讲解如何查看设备的硬件规格,以及如何查看设备中可供使用的感应器。这一章所提供的解决方案可用来查询当前设备的各项信息。
第15章,辅助功能——本章简单地介绍VoiceOver这项辅助功能,开发者可以通过该功能尽量扩大应用程序的受众。你将学到如何为应用程序添加与辅助功能有关的标签及提示,以及如何在模拟器和iOS设备中测试这些特性。
附录A,Objective-C字面量——本附录介绍了Objective-C语言里与数字、数组及字典有关的一些新特性。
对范例代码的说明
为了大家学起来方便,本书的范例代码只使用一个main.m文件。编写iPhone或Cocoa应用程序时,开发者一般都不会这么做,而且说实在的,也确实不应该这么做,但是,这种做法却非常适合展示一个大的概念。假如一份范例代码分成5个、7个或9个文件,就不太容易讲述这个概念了。而将所有代码都写到一个文件里,则有助于专门把这个概念说清楚。
书中的范例代码不应该当成独立的应用程序来用。每份范例代码只对应于一个解决方案,而且只演示一个概念。每个main.m文件都是专门为了实现某个中心概念而编写的。读者在学会这些思路之后,可以按照平常开发时所用的文件组织结构及布局方式将其转换为普通的应用程序结构。本书所用的代码组织方式与日常开发中所应提倡的标准组织方式并不相符。笔者之所以采用这种方式,是为了提供精确的解决方案,而大家可以根据需求把它们集成到自己的工作项目中。
苹果公司的标准范例代码与本书不同,你必须查看很多源文件,才能在脑中构建出一套与待演示的概念有关的“思维模型”。那些范例代码都是完整的应用程序,里面通常会涉及一些与当前所要解决的问题没有关系的任务。我们必须花很大精力才能找到与当前问题有关的代码,这是得不偿失的。
本书还有些范例代码没有遵循“一个文件只说一件事”的规则:如果某个解决方案与类的实现有关,那么本书还会提供标准的类文件及头文件。有些解决方案并不是为了强调某项技术,而是为了提供某些类及category(category是一种针对现有类所做的扩展,它不产生新的类)的实现。对于这些解决方案来说,读者可以找到单独的.m与.h文件,而main.m文件里面则封装了一份框架代码,用来描述其余的事情。
本书大多数范例代码都只使用一个应用程序标识符,也就是com.sadun.helloworld。只使用一个标识符的好处是:你的iOS设备里不会装很多范例程序。每安装一个范例程序,都会把前面那个替换掉,这样的话,设备的主屏幕就能干净一些。如果需要同时安装多个范例程序,那么只需给标识符加个后缀就可以了,例如com.sadun.helloworld.table-edits。如果想令多个应用程序所显示出来的名称各不相同,那么可以编辑自定义的显示名称。你的Team Provisioning Profile能够匹配包括com.sadun.helloworld在内的每一个应用程序标识符。这样的话,无须修改标识符,就可以把编译后的代码安装到设备上面了,只是记得要在每个项目的Build Settings中更新Code Signing Identity。
获取范例代码
你可以在开源项目托管网站GitHub中找到本书源代码:http://github.com/erica/iOS-7-Cookbook。每一章的源代码都放在一个文件夹内,其中包含书里的相关范例材料。解决方案的编号与其在书中的编号相同。比方说,第5章的第6个解决方案放在C05文件夹下面的06子文件夹中。
以00为编号的项目或是编号带有后缀(例如05b、02c)的项目是为了便于搜索或创建插图而使用的素材。比方说,第9章的00 – Cell Types项目是为了创建图9-2中的效果而编写的,那张图用来演示系统所提供的各种表格视图单元格样式。一般情况下,笔者会把这些多余的项目删掉。本书初稿的读者请求笔者把它们放在这个版本中。整个代码库里大约能找到六七个这样的范例项目。
为本书出力
范例代码绝不是一成不变的,它会随着苹果公司的SDK与Cocoa Touch库而不断进化。请各位读者一起参与这个过程。你可以提交bug修复和修改书中的错误,也可以扩充现有的代码。你可以对GitHub代码库做分支(fork),自己调整代码,实现一些功能,然后再分享回主代码库里。如果你有新的想法或思路,请告诉我们。我们很乐意将你的宝贵建议加到代码库中,并据此完善本书的下一个版本。
获取git工具
你可以使用git版本控制系统来下载本书源代码。Xcode 5集成开发环境提供了非常健壮的git支持。Xcode 5工具箱里面也包含了命令行式的git工具。此外,还有大量的第三方及商业版git工具可供选择。
使用GitHub
GitHub(http://github.com/)是最大的git托管网站,有超过15万个公开的代码库(repository)。它可以免费托管公开项目,也可以付费托管私有项目。该网站提供了一套可以自定义的Web界面,其中包含Wiki托管、问题追踪等功能,是项目开发者之间的一个优秀的社交网络,开发者可以在这里寻找新代码,也可以协同开发既有的程序库。你可以在GitHub网站注册免费账号,注册好之后,就可以复制并修改本书的范例代码库了,另外,也可以创建自己的开源iOS项目,并与他人分享。

上架指导

计算机\程序设计

封底文字

本书为iOS 7日常开发者提供了可靠而行之有效的解决方案。著名iOS编程专家Erica Sadun和顶级iOS开发者Rich Wardwell向大家展示了创建优秀iOS 7移动应用程序所需的全部技巧,告诉读者如何使用标准的API,以及如何充分利用iOS 7的图形、触摸与视图。

  和Sadun所写的其他iOS畅销书一样,本书也用直观的代码来演示当前流行的编程技巧,并把关键概念浓缩为简洁的解决方案(recipe),使读者能够轻松掌握并将其运用到自己的项目中。本书并不是简单地把代码拼凑起来,而是会向你详细解释如何高效地开发iOS 7程序,并告诉你这样做的原因。

  本书所有代码都经过全面修订与测试,而且利用了iOS 7的新功能及设备的新特点。
通过阅读本书,你将学到:

■ 用多点触控、手势及自定义的手势识别器来创建先进的触摸式界面。
■ 通过功能强大的新方式来构建并自定义控件。
■ 创建与iOS 7的设计风格相符的新式界面。
■ 实现iOS 7中新引入的动画效果。
■ 通过弹出式窗口、进度条、本机通知、popover、提示音等手段来提醒用户。
■ 用Xcode模块轻松地整合系统框架及头文件。
■ 编排视图及其动画效果,规划视图的体系结构并理解视图之间协同运作的方式。
■ 用iOS 7中强大的Auto Layout约束系统来适配各种尺寸的显示屏。
■ 控制键盘,令屏幕上的控件具备文本输入功能,高效地扫描并调整文本格式。
■ 用视图控制器来规划用户的工作区。
■ 管理照片、视频、电子邮件及文本信息。
■ 用iOS 7的先进特性来操作Flickr及Vimeo等社交媒体。
■ 实现VoiceOver辅助功能,其中也包括iOS 7新引入的文本转语音功能。
■ 初步了解如何使用Core Data来管理数据库。
■ 使用iOS 7中强大的网络与Web服务功能。
■ 用iOS 7新提供的API及灵活功能来增强程序的效果,其中包括提升可靠性及美化文本。
■ 解决iOS 7中的一些问题和程序缺陷。

作者简介

(美)Erica Sadun  Rich Wardwell 著:暂无简介

译者简介

爱飞翔 译:暂无简介

译者序

本书是一本很受欢迎的技术书,从第1版到第5版,虽然书名和编排形式略有调整,但是Cookbook这个特点(本书英文版书名为《The Core iOS Developer’s Cookbook》)却一直在延续。
这种食谱式的秘诀手册之所以受欢迎,原因之一就在于开发者非常容易通过范例来学习一门语言或一套开发环境的用法。有了生动易懂的范例,我们很快就能明白如何制作出简单实用的程序。再经过反复练习,即可逐渐掌握开发流程。
另外,秘诀手册与普通的范例教程还有个非常重要的区别,那就是范例的选择。一本优秀的秘诀手册不仅要涵盖中级和高级范例,而且还要选择有代表性的范例,使读者在学会该范例之后,能够根据实际需要对其加以修改,以便将它快速整合到自己的程序中。
从上述两方面来看,本书都极好地体现了Cookbook的特点。作者根据长年积累的开发经验,将一百多条解决方案划分为iOS开发中的十几个专题,基本上满足了日常编程的需要。有些方案讲得尤为细致,使读者可以看到如何按照需求来深度定制各种组件,比如第6章的文本编辑器和第7章的自制容器等。除了冠以解决方案之名的范例项目外,还有一些以程序清单形式出现的代码片段也比较实用,每段代码都相当于一份小巧的模板,演示了某些对象或技术的配置方式。
综观这十几个专题,很多都与图形界面及手势有关,这对于提升程序流畅度和用户体验大有好处。作者还提供了范例项目的源代码。对于较为复杂的项目来说,我们可以先运行范例程序,看到实际效果,然后再与书中各步骤详细比对,以了解整个流程;也可以自己先尝试一种实现方式,然后与作者给出的方案或其他教程里给出的方案相比较,看看有何异同,并讨论各自的优缺点。
虽说本书所举的范例都较为浅显直观,但读者还是需要略微懂一些Objective-C语言和iOS开发的基础知识。如果你是新手,不妨先参考一下作者在前言里所推荐的几本入门书籍。此外,如果对后面的Core Data、网络编程、设备适配及辅助功能等内容感兴趣,可以参考与这些主题有关的专著,以便深入研究。
在翻译过程中,得到机械工业出版社华章分社诸位编辑与工作人员的帮助,在此深表谢意,并感谢goldlion及ChenGe两位友人对术语翻译所提的建议。
由于译者水平有限,错误与疏漏之处在所难免,恳请各位读者批评指正。可发邮件至eastarstormlee@gmail.com与我联系,也可访问网页https://github.com/jeffreybaoshenlee/zh-translation-errata-cidc5/issues留言。

爱飞翔

图书目录

译者序
前 言
致 谢
第1章 手势与触摸 1
1.1 触摸 1
1.1.1 触摸操作所处的阶段 2
1.1.2 UIResponder类中的触摸事件响应方法 3
1.1.3 对视图的触摸 4
1.1.4 多点触摸 4
1.1.5 手势识别器 5
1.2 解决方案:添加简单的直接操纵界面 5
1.3 解决方案:添加拖动手势识别器 7
1.4 解决方案:同时使用多个手势识别器 9
1.5 解决方案:限制移动 14
1.6 解决方案:测试触摸 15
1.7 解决方案:针对位图的触摸测试 17
1.8 解决方案:根据触摸情况在屏幕上绘制内容 19
1.9 解决方案:令绘制效果变得平滑 21
1.10 解决方案:启用多点触摸 24
1.11 解决方案:检测圆圈手势 27
1.12 解决方案:创建自定义手势识别器 32
1.13 解决方案:把滚动视图中的内容拖曳到外面 34
1.14 解决方案:实时的触摸反馈 37
1.14.1 启用触摸反馈效果 38
1.14.2 拦截并转发触摸事件 38
1.14.3 实现TOUCHkit的TOUCHkitView类 40
1.15 解决方案:向视图中添加菜单 42
1.16 小结 43
第2章 构建并使用控件 45
2.1 UIControl类 45
2.1.1 目标-动作模式 46
2.1.2 控件的种类 46
2.1.3 控件事件 46
2.2 按钮 48
2.3 Interface Builder中的按钮 50
2.4 解决方案:构建按钮 51
2.4.1 多行按钮文本 54
2.4.2 为按钮添加动画元件 54
2.4.3 为按钮添加额外状态 55
2.5 解决方案:使按钮以动画效果来响应用户 55
2.6 解决方案:为滑杆控件添加自定义的滑块 57
2.6.1 定制UISlider控件 57
2.6.2 添加优化代码 58
2.7 解决方案:创建可以连续点击两次的分段选择控件 61
2.7.1 实现第二次点击时的反馈效果 62
2.7.2 控件及带属性的字符串 63
2.8 开关控件与步进控件 64
2.9 解决方案:编写UIControl的子类 65
2.9.1 创建控件 68
2.9.2 追踪触摸事件 68
2.9.3 派发控件事件 69
2.10 解决方案:构建评分所用的Star Slider控件 69
2.11 解决方案:构建触摸转盘控件 72
2.12 解决方案:创建拉曳控件 75
2.12.1 为控件添加提示效果 75
2.12.2 测试触摸 77
2.13 解决方案:构建自定义的锁定控件 80
2.14 解决方案:图片库查看器 83
2.15 构建工具栏 85
2.16 小结 88
第3章 提醒用户 89
3.1 直接向用户弹出警告视图 89
3.1.1 构建简单的警告视图 89
3.1.2 设置UIAlertView的委托 91
3.1.3 显示UIAlertView 92
3.1.4 各种UIAlertView 92
3.2 解决方案:构建支持块的警告视图 93
3.2.1 块简介 93
3.2.2 使用块时避免保留循环 95
3.3 解决方案:将变长参数列表与UIAlertView结合起来使用 98
3.4 展示选项列表 99
3.4.1 滚动菜单 101
3.4.2 在动作表中显示文本 101
3.5 将操作进度告知用户并提示其稍等片刻 102
3.5.1 使用UIActivity-IndicatorView 103
3.5.2 使用UIProgressView 103
3.6 解决方案:在屏幕上绘制模态的进度指示器 104
3.7 解决方案:自制的模态警告视图 106
3.8 解决方案:基本的popover 110
3.9 解决方案:本机通知 111
3.10 用网络活动指示器提醒用户 113
3.11 解决方案:播放简单的提示音 114
3.11.1 System Sound 114
3.11.2 为使用系统框架而引入模块 115
3.11.3 震动 115
3.11.4 警示音 116
3.11.5 延迟 117
3.11.6 释放系统音 117
3.12 小结 117
第4章 编排视图及其动画效果 119
4.1 视图层级 119
4.2 解决方案:用树状图来描述视图层级 121
4.3 解决方案:查询子视图 123
4.4 管理子视图 125
4.4.1 添加子视图 125
4.4.2 重排及删除子视图 125
4.4.3 UIView的回调方法 125
4.5 为视图设定标签并查找视图 126
4.6 解决方案:通过对象关联机制为视图设定名称 127
4.7 视图的几何特征 129
4.7.1 框架 130
4.7.2 与CGRect有关的工具函数 130
4.7.3 CGPoint与CGSize 131
4.7.4 CGAffineTransform 132
4.7.5 坐标系统 133
4.8 解决方案:操控视图的框架 133
4.8.1 调整视图的尺寸 134
4.8.2 CGRect与中心点 136
4.8.3 视图的其他几何特征 137
4.9 解决方案:获取与坐标变换有关的信息 141
4.9.1 获取与变换有关的属性 141
4.9.2 判断两个视图是否相交 142
4.10 与显示和交互有关的特征 147
4.11 UIView的动画效果 148
4.12 解决方案:视图的淡入与淡出 150
4.13 解决方案:交换两个视图的前后顺序 151
4.14 解决方案:翻转视图 151
4.15 解决方案:采用Core Animation API来制作切换效果 153
4.16 解决方案:使视图在出现之后回弹 155
4.17 解决方案:关键帧动画 156
4.18 解决方案:UIImageView的动画效果 157
4.19 小结 158
第5章 视图的约束系统 160
5.1 什么是约束 161
5.2 约束系统所用的属性 161
5.3 约束系统的运作规律 163
5.4 约束规则与框架属性 165
5.4.1 固有内容的尺寸 165
5.4.2 对齐矩形 166
5.5 创建约束规则 167
5.5.1 基本约束规则声明 167
5.5.2 用可视化格式字符串声明约束规则 168
5.5.3 变量绑定 169
5.6 格式字符串 169
5.6.1 方向 169
5.6.2 连接 171
5.7 谓词 173
5.7.1 指标 173
5.7.2 描述两个视图关系的谓词 174
5.7.3 优先级 174
5.8 格式字符串总结 174
5.9 用格式字符串将视图对齐并灵活调整其尺寸 176
5.10 处理约束规则的流程 176
5.11 管理约束规则 177
5.12 解决方案:实现约束规则之间的对比 178
5.13 解决方案:创建尺寸固定且受规则约束的视图 181
5.13.1 禁用translatesAutoresizing-MaskIntoConstraints 181
5.13.2 令视图出现在上级视图范围内 182
5.13.3 限定视图的尺寸 183
5.13.4 把前面各节内容拼装起来 183
5.14 解决方案:将两个视图居中对齐 185
5.15 解决方案:设定宽高比 186
5.16 解决方案:响应屏幕方向的变更 188
5.17 调试约束规则 190
5.18 解决方案:描述约束规则 191
5.19 用宏来创建约束规则 194
5.20 小结 197
第6章 文本输入 198
6.1 解决方案:隐藏UITextField的键盘 199
6.1.1 阻止系统把键盘隐藏起来 200
6.1.2 UITextInputTraits协议中的属性 200
6.1.3 文本框的其他属性 201
6.2 解决方案:把带有自定义辅助视图的键盘隐藏起来 203
6.3 解决方案:根据键盘来调整文本视图 205
6.4 解决方案:创建自定义的输入视图 209
6.5 解决方案:使视图具备文本输入功能 213
6.6 解决方案:为非文本视图添加自定义的输入视图 216
6.7 解决方案:创建更好的文本编辑器(第一部分) 218
6.8 解决方案:创建更好的文本编辑器(第二部分) 221
6.8.1 启用Attributed Text 221
6.8.2 控制文本的样式 221
6.8.3 可供UIResponder使用的其他功能 223
6.9 解决方案:过滤用户所输入的文本 224
6.10 解决方案:检测文本模式 226
6.10.1 构建自己的正则表达式 227
6.10.2 枚举正则表达式 227
6.10.3 数据探测器 228
6.10.4 使用内置类型的探测器 229
6.10.5 有用的网站 229
6.11 解决方案:检测UITextView中的拼写错误 231
6.12 搜寻文本中的字符串 232
6.13 小结 233
第7章 使用视图控制器 234
7.1 视图控制器 234
7.1.1 UIViewController类 235
7.1.2 导航控制器 235
7.1.3 标签栏控制器 235
7.1.4 分栏视图控制器 236
7.1.5 页面视图控制器 236
7.1.6 popover控制器 236
7.2 使用导航控制器与分栏视图控制器来开发程序 237
7.2.1 使用导航控制器与导航栈 238
7.2.2 推入与弹出视图控制器 239
7.2.3 导航栏上的按钮 239
7.2.4 延伸至屏幕边缘的布局形式 240
7.3 解决方案:UINavigationItem类 241
7.3.1 标题与后退按钮 242
7.3.2 宏 242
7.4 解决方案:模态界面 244
7.5 解决方案:构建分栏视图控制器 248
7.6 解决方案:用分栏视图及导航控制器创建通用的程序 253
7.7 解决方案:标签栏 255
7.8 记住标签的状态 259
7.9 解决方案:页面视图控制器 262
7.9.1 与书籍展示风格有关的属性 262
7.9.2 封装实现细节 263
7.9.3 范例代码详解 269
7.9.4 构建界面索引 270
7.10 解决方案:自定义的容器 271
7.10.1 添加与移除子视图控制器 274
7.10.2 视图控制器之间的切换效果 275
7.11 解决方案:segue 276
7.12 小结 282
第8章 常用的控制器 284
8.1 图像选取器控制器 284
8.1.1 图像来源 284
8.1.2 在iPhone和iPad中显示选取器 285
8.2 解决方案:选取图像 286
8.2.1 向模拟器中添加图片 286
8.2.2 AssetsLibrary模块 286
8.2.3 展示选取器 287
8.2.4 处理delegate的回调 288
8.3 解决方案:拍摄照片 293
8.3.1 配置选取器 293
8.3.2 显示图像 295
8.3.3 把图像保存到相册 295
8.4 解决方案:录制视频 297
8.4.1 创建录制视频用的选取器 298
8.4.2 保存视频 299
8.5 解决方案:用媒体播放器播放视频 299
8.6 解决方案:编辑视频 302
8.7 解决方案:选取并编辑视频 304
8.8 解决方案:通过电子邮件发送图片 306
8.9 解决方案:发送文本消息 309
8.10 解决方案:在社交网站发布消息 311
8.11 小结 313
第9章 创建并管理表格视图 314
9.1 iOS的表格 314
9.2 委托 315
9.3 创建表格 316
9.3.1 表格的样式 316
9.3.2 排布表格视图 316
9.3.3 设置数据源 317
9.3.4 提供单元格 317
9.3.5 注册单元格类 317
9.3.6 从队列中取出单元格 318
9.3.7 设置delegate 318
9.4 解决方案:实现简单的表格 319
9.4.1 数据源方法 319
9.4.2 响应用户的触摸 322
9.5 UITableViewCell类 322
9.5.1 单元格的selectionStyle属性 323
9.5.2 添加自定义的单元格受选效果 323
9.6 解决方案:创建带有选取标记的单元格 323
9.7 给单元格添加详情展示控件 325
9.8 解决方案:编辑表格 327
9.8.1 添加撤销功能 331
9.8.2 实现撤销功能 332
9.8.3 显示移除单元格所用的控件 332
9.8.4 处理删除请求 332
9.8.5 通过滑动手势删除单元格 333
9.8.6 调整单元格的顺序 333
9.8.7 添加单元格 333
9.9 解决方案:操控表格的区段 334
9.9.1 构建区段 334
9.9.2 区段数量与区段内的行数 335
9.9.3 返回单元格 335
9.9.4 创建每个区段的头部标题 337
9.9.5 定制表格与区段的头部及尾部 338
9.9.6 创建区段索引 338
9.9.7 处理索引与区段不匹配的问题 339
9.9.8 为分区表格实现委托方法 339
9.10 解决方案:在表格中搜索 339
9.10.1 创建搜索显示控制器 341
9.10.2 为搜索显示控制器注册单元格 341
9.10.3 构建支持搜索功能的数据源方法 342
9.10.4 委托方法 343
9.10.5 使用与搜索功能相配套的索引 344
9.11 解决方案:给表格添加下拉刷新功能 345
9.12 解决方案:添加指令行 348
9.13 制作自定义的分组表格 351
9.14 解决方案:构建含有多个滚轮的表格 352
9.14.1 创建UIPickerView 353
9.14.2 数据源方法与委托方法 353
9.14.3 使用带有选取器的视图 354
9.15 使用UIDatePicker 356
9.16 小结 357
第10章 集合视图 358
10.1 集合视图与表格的异同 358
10.2 建立集合视图 360
10.2.1 通过控制器使用集合视图 361
10.2.2 直接使用集合视图 361
10.2.3 数据源与委托 362
10.3 流式布局 362
10.3.1 滚动方向 362
10.3.2 条目的尺寸以及行间距 362
10.3.3 头部与尾部的尺寸 364
10.3.4 内边距 365
10.4 解决方案:采用流式布局的简单集合视图 366
10.5 解决方案:自定义单元格 370
10.6 解决方案:水平滚动的列表 372
10.7 解决方案:创建交互式的布局效果 375
10.8 解决方案:滚动之后自动调整位置 377
10.9 解决方案:创建圆形布局 378
10.9.1 实现创建条目与删除条目时的动画效果 381
10.9.2 增强圆形布局的实用性 382
10.9.3 布局对象 383
10.10 解决方案:用手势调整布局 383
10.11 解决方案:创建真正的网格状布局 385
10.12 解决方案:为集合视图中的条目添加自定义菜单 391
10.13 小结 393
第11章 分享文档与数据 394
11.1 解决方案:使用统一类型标识符 394
11.1.1 根据文件扩展名来决定UTI 395
11.1.2 把UTI转换成扩展名或MIME类型 396
11.1.3 判断两个UTI之间是否有依从关系 397
11.1.4 获取依从关系列表 398
11.2 解决方案:访问系统剪贴板 400
11.2.1 存储数据 401
11.2.2 存储常见类型的数据 401
11.2.3 获取数据 402
11.2.4 自动更新剪贴板 402
11.3 解决方案:监控Documents文件夹 403
11.3.1 启用文件分享功能 403
11.3.2 用户对Documents文件夹的控制能力 403
11.3.3 在Xcode里访问应用程序沙盒 405
11.3.4 扫描新的文档 405
11.4 解决方案:活动视图控制器 408
11.4.1 展示活动视图控制器 409
11.4.2 UIActivityItemSource协议 409
11.4.3 UIActivityItemProvider类 411
11.4.4 实现UIActivityItemSource协议中的回调方法 411
11.4.5 添加分享服务 412
11.4.6 与各种数据类型相对应的操作 416
11.4.7 排除某些操作 417
11.5 解决方案:Quick Look预览控制器 417
11.6 解决方案:使用文档交互控制器 420
11.6.1 创建UIDocumentInteraction-Controller实例 420
11.6.2 UIDocumentInteraction-Controller的属性 424
11.6.3 提供快速查看文档的功能 424
11.6.4 判断是否应启用“Open in…”操作 425
11.7 解决方案:声明程序所支持的文档类型 426
11.7.1 创建自定义的文档类型 427
11.7.2 实现对文档的支持 428
11.8 解决方案:创建基于URL的服务 431
11.8.1 声明模式 432
11.8.2 测试URL 433
11.8.3 添加处理程序方法 433
11.9 小结 434
第12章 浅谈Core Data 435
12.1 Core Data简介 435
12.2 实体与模型 436
12.2.1 构建模型文件 436
12.2.2 属性与关系 437
12.2.3 构建NSManagedObject的子类 437
12.3 创建上下文 438
12.4 添加数据 439
12.5 查询数据库 441
12.5.1 配置NSFetchRequest 442
12.5.2 执行数据获取操作 443
12.6 移除对象 444
12.7 解决方案:用Core Data来充当表格的数据源 445
12.7.1 访问索引路径 445
12.7.2 sectionNameKeyPath属性 445
12.7.3 获取每个区段内的对象 445
12.7.4 sectionIndexTitles属性 446
12.7.5 Core Data与表格之间的紧密结合 446
12.8 解决方案:用Core Data实现表格的搜索功能 448
12.9 解决方案:为Core Data表格视图添加编辑功能 450
12.9.1 添加撤销/重做功能 451
12.9.2 创建撤销事务 452
12.9.3 重新思考编辑功能 452
12.10 解决方案:由Core Data所驱动的集合视图 456
12.11 小结 461
第13章 网络编程基础 462
13.1 解决方案:判断网络状态 462
13.2 监测联网状况是否发生变化 465
13.3 URL加载系统 467
13.3.1 配置 467
13.3.2 任务 468
13.3.3 NSURLSession 468
13.4 解决方案:简单的下载 469
13.5 解决方案:在下载过程中提供反馈 473
13.6 解决方案:后台传输 482
13.6.1 测试后台传输 484
13.6.2 Web服务 484
13.7 解决方案:使用NSJSONSeriali-zation类 485
13.8 解决方案:将XML转换为树状结构 487
13.8.1 树 489
13.8.2 构建解析树 489
13.9 小结 492
第14章 针对特定设备的开发 493
14.1 访问基本的设备信息 493
14.2 添加设备能力限制 494
14.2.1 提供描述信息以征求用户同意 496
14.2.2 Info.plist文件中其他常用的键 496
14.3 解决方案:检查设备距离与电池状态 496
14.3.1 启用与禁用距离感应器 497
14.3.2 监控电池状态 497
14.3.3 判断设备是否具有Retina显示屏 499
14.4 解决方案:获取设备的其他信息 500
14.5 Core Motion基础知识 502
14.5.1 判断设备是否支持某种感应器 502
14.5.2 获取感应器数据 503
14.6 解决方案:通过加速度来判断“上”方向 503
14.7 使用基本的方向值 504
14.7.1 根据加速计来判断方向 505
14.7.2 计算相对角度 506
14.8 解决方案:使用加速计来移动屏幕上的物体 507
14.9 解决方案:基于加速计的滚动视图 511
14.10 解决方案:获取并使用设备的姿态 513
14.11 用Motion Event来检测晃动 514
14.12 使用外接屏幕 515
14.12.1 检测屏幕 516
14.12.2 获取屏幕分辨率 517
14.12.3 配置视频输出 517
14.12.4 添加CADisplayLink 518
14.12.5 对过扫描进行补偿 518
14.12.6 VIDEOkit 518
14.13 追踪用户 521
14.14 查询可用的磁盘空间 522
14.15 小结 523
第15章 辅助功能 524
15.1 辅助功能基础知识 524
15.2 启用辅助功能 526
15.3 特征 526
15.4 标签 528
15.5 提示语 528
15.6 用模拟器测试辅助功能 529
15.7 把变化情况传播出去 531
15.8 在iOS上面测试辅助功能 531
15.9 语音合成 533
15.10 动态字体 534
15.11 小结 535
附录A Objective-C字面量 536

教学资源推荐
作者: [美] 尤金尼·E.米哈伊洛夫(Eugeniy E. Mikhailov) 著
作者: 邱李华 郭志强 曹青
作者: 管建和
作者: 主编 牛力 韩小汀 参编 闫石 杨凯 刘楠楠
参考读物推荐
作者: 孙杰 山金孝 张亮 张婷婷 著
作者: 闫莺 郑凯 郭众鑫 编著
作者: Andr Ben Hamou
作者: Ceph中国社区 著