第一部分 入门 1
第1章 你的第一个应用程序 1
1.1 创建“Hello World”项目 1
1.2 在屏幕上显示文字 5
1.3 说“Hello 6
1.4 小结 10
第2章 Xcode入门 11
2.1 集成开发环境 11
2.2 工作区窗口 12
2.2.1 工具栏 12
2.2.2 导航区 12
2.2.3 编辑区 13
2.2.4 工具区 14
2.2.5 调试区 15
2.3 首选项 15
2.3.1 字体与颜色 16
2.3.2 文本编辑 16
2.3.3 按键绑定首选项 18
2.3.4 代码补全 19
2.4 开发者文档 20
2.5 编辑器 21
2.6 项目设置 22
2.7 方案 23
2.8 组织者 24
2.9 其他Xcode工具 25
2.10 小结 25
第3章 Interface Builder入门 26
3.1 Interface Builder 26
3.2 IB怎样工作 27
3.3 着手使用IB 27
3.3.1 选取与复制对象 29
3.3.2 对齐对象 29
3.3.3 布局矩形框 31
3.3.4 修改状态 31
3.4 将NIB与代码关联起来 33
3.4.1 在代码中定义插座变量 33
3.4.2 使用辅助编辑器 36
3.5 故事板 37
3.6 小结 37
第4章 Objective-C入门 38
4.1 什么是Objective-C 38
4.2 玩转Objective-C 39
4.2.1 动手写代码 40
4.2.2 对象 41
4.2.3 类 42
4.2.4 NSObject 43
4.2.5 接口 43
4.2.6 实例变量 44
4.2.7 声明属性 45
4.2.8 方法 47
4.2.9 实现 47
4.2.10 合成 48
4.2.11 init 49
4.2.12 super 49
4.2.13 flip 49
4.2.14 选择器 50
4.2.15 点语法 51
4.3 CoinTosser类的用法 51
4.4 内存管理 52
4.5 小结 53
第5章 Cocoa入门 54
5.1 Cocoa栈 54
5.2 Foundation 55
5.2.1 数据类型 56
5.2.2 集合类 60
5.2.3 工具类与函数 61
5.3 UIKit 65
5.3.1 UIApplication 65
5.3.2 UIWindow 65
5.3.3 UIScreen 65
5.3.4 UIView 65
5.3.5 UIViewController 65
5.3.6 UIWebView 65
5.3.7 UILabel 66
5.3.8 UITextField 66
5.3.9 UITextView 66
5.3.10 UIButton 66
5.3.11 UITableView与UITableViewCell 67
5.3.12 UIScrollView 67
5.3.13 UIPageControl 67
5.3.14 UIPickerView 67
5.3.15 UIDatePicker 67
5.3.16 UISwitch 67
5.3.17 UISlider 68
5.3.18 UIMenuController和UIMenuItem 68
5.3.19 UIImage 68
5.3.20 UIImageView 68
5.3.21 UINavigationBar 68
5.3.22 UINavigationController 69
5.3.23 UIToolbar 69
5.3.24 UITabBar 69
5.3.25 UIBarButtonItem 69
5.3.26 UISegmentedControl 70
5.4 Cocoa中常见的设计模式 70
5.4.1 模型-视图-控制器模式 70
5.4.2 目标-动作模式 71
5.5 小结 71
第6章 为iPad配置信息 72
6.1 关于iOS配置门户 72
6.2 提供信息的过程:概括说明 73
6.2.1 设备ID是什么 73
6.2.2 什么是应用程序ID 74
6.2.3 什么是开发信息提供概述 75
6.3 设立开发用的机器 76
6.3.1 请求开发许可证 76
6.3.2 提交CSR以求批准 78
6.3.3 下载并安装许可证 79
6.4 配置设备 80
6.5 使用iOS配置门户 81
6.5.1 添加设备ID 82
6.5.2 添加应用程序ID 83
6.5.3 创建开发信息提供概述 84
6.5.4 下载开发信息提供概述 85
6.5.5 安装开发信息提供概述 86
6.6 小结 86
第7章 应用程序设计 87
7.1 定义应用程序 87
7.1.1 应用程序名称 88
7.1.2 应用程序概述 88
7.1.3 功能清单 88
7.1.4 目标用户 89
7.1.5 再度审视功能清单 90
7.1.6 有竞争关系的产品 90
7.1.7 App Charter示例 90
7.2 用户界面构思 92
7.2.1 阅读HIG(iOS人机界面指南) 92
7.2.2 使你的应用程序“令人心动” 92
7.2.3 为设备设计 93
7.2.4 人们使用iOS设备与使用网页或桌面计算机的方式不一样 93
7.2.5 戴上工业设计师的帽子 94
7.2.6 比喻 94
7.2.7 声音效果 94
7.2.8 定制现有的控件 95
7.2.9 聘请设计师 96
7.3 原型图 96
7.3.1 什么是原型图 96
7.3.2 要对什么设计原型图 97
7.3.3 使用的工具 97
7.4 建立原型 100
7.4.1 什么是原型 100
7.4.2 怎样创建原型应用程序 101
7.5 小结 101
第二部分 构建PhotoWheel 103
第8章 创建主从复合应用程序 103
8.1 构建原型应用程序 103
8.1.1 什么是分割视图控制器 104
8.1.2 创建新的项目 105
8.1.3 使用模拟器 105
8.2 更进一步的观察 106
8.2.1 项目结构 107
8.2.2 应用程序委派 107
8.2.3 启动选项 111
8.2.4 其他UIApplicationDelegate方法 112
8.3 UISplitViewController详解 112
8.3.1 指定分割视图控制器的委派 115
8.3.2 细节视图控制器 116
8.3.3 主视图控制器 116
8.4 小结 117
8.5 习题 117
第9章 使用表格视图 118
9.1 首要的事情 118
9.2 深层剖析 120
9.2.1 UITableView 120
9.2.2 UITableViewCell 121
9.2.3 UITableViewDelegate 121
9.2.4 UITableViewDataSource 121
9.2.5 UITableViewController 121
9.3 操作表格视图 121
9.3.1 一个简单的模型 121
9.3.2 显示数据 123
9.3.3 添加数据 127
9.3.4 编辑数据 139
9.3.5 删除数据 143
9.3.6 重排数据 144
9.3.7 选取数据 145
9.4 小结 147
9.5 习题 148
第10章 用视图工作 149
10.1 定制视图 149
10.2 轮状视图 150
10.3 旋转木马视图 156
10.4 Photo Wheel视图单元 161
10.5 小结 164
10.6 习题 164
第11章 使用触屏手势 165
11.1 触摸手势简介 165
11.1.1 预定义的触屏手势 166
11.1.2 手势种类 166
11.1.3 怎样使用手势识别类 166
11.2 定制触屏手势 169
11.2.1 创建拨动手势识别类 170
11.2.2 拨动手势识别类的用法 172
11.3 小结 176
11.4 习题 176
第12章 添加照片 177
12.1 两种途径 177
12.1.1 Assets Library 177
12.1.2 图片捡拾控制器 178
12.2 图片捡拾控制器的用法 179
12.2.1 使用动作单 181
12.2.2 UIImagePickerController的用法 184
12.2.3 保存至摄像头胶卷 187
12.3 小结 188
12.4 习题 188
第13章 数据持久化 189
13.1 数据模型 189
13.1.1 照片 189
13.1.2 相册 189
13.1.3 前瞻性考虑 189
13.2 使用属性清单来构建模型 190
13.2.1 什么是属性清单 190
13.2.2 建立数据模型 190
13.2.3 读取和保存相册 191
13.2.4 向相册添加新照片 195
13.2.5 显示相册中的照片 198
13.3 使用Core Data构建模型 200
13.3.1 什么是Core Data 200
13.3.2 托管对象和实体描述 200
13.3.3 托管对象语境 201
13.3.4 持久存储和持久存储协调器 202
13.3.5 向PhotoWheelPrototype添加Core Data 202
13.3.6 添加Core Data框架 202
13.3.7 建立Core Data栈 203
13.4 在PhotoWheel中使用Core Data 206
13.4.1 Core Data的模型编辑器 206
13.4.2 添加实体 206
13.4.3 创建NSManagedObject子类 209
13.5 向模型对象添加定制代码 211
13.5.1 用Core Data读取和保存相册 215
13.5.2 使用Core Data向相册添加新照片 218
13.5.3 用Core Data显示相册中的照片 220
13.6 直接使用SQLite 221
13.7 小结 221
13.8 习题 221
第14章 Xcode中的故事板 222
14.1 什么是故事板 222
14.1.1 故事板的用法 223
14.1.2 场景 224
14.1.3 过渡 224
14.2 对PhotoWheel创作故事板 225
14.2.1 工作区 225
14.2.2 添加主故事板 226
14.2.3 设置UIMainStoryboardFile 227
14.2.4 更新AppDelegate 228
14.2.5 添加图片 228
14.2.6 应用程序图标 229
14.2.7 初始的视图控制器 229
14.2.8 另一个场景 230
14.2.9 创建过渡 232
14.3 小结 233
14.4 习题 233
第15章 视图控制器详解 234
15.1 实现视图控制器 234
15.2 过渡 236
15.2.1 创建定制过渡 237
15.2.2 设置过渡 237
15.2.3 实现定制过渡 239
15.2.4 编译之前的工作 241
15.3 定制弹出转换 243
15.4 容器视图控制器 245
15.4.1 创建容器视图控制器 246
15.4.2 添加子场景 246
15.4.3 添加子视图控制器 248
15.4.4 修正定制的推式过渡 251
15.5 小结 251
15.6 习题 252
第16章 构造主屏幕 253
16.1 重用原型代码 253
16.1.1 复制文件 254
16.1.2 Core Data模型 255
16.1.3 WheelView要做的修改 260
16.2 显示相册 270
16.2.1 实现相册集视图控制器 271
16.2.2 设置托管对象语境 277
16.2.3 添加相册 278
16.3 管理相册 279
16.3.1 选取相册 279
16.3.2 对相册起名 283
16.3.3 修正工具栏的显示 288
16.3.4 删除相册 289
16.4 更美观的相册缩略图 291
16.5 添加照片 294
16.6 显示照片 299
16.6.1 使用GridView类 308
16.6.2 构建图片栅格视图单元 312
16.7 小结 315
16.8 习题 315
第17章 创建照片浏览器 316
17.1 使用滚动视图 316
17.2 启动照片浏览器 324
17.3 添加Chrome效果 332
17.4 放大缩小 336
17.5 删除照片 342
17.6 小结 348
17.7 习题 348
第18章 支持设备旋转 349
18.1 怎样支持旋转功能 349
18.1.1 所支持的设备放置模式 350
18.1.2 使用自动尺寸调整功能 350
18.2 自定义旋转 351
18.2.1 支持旋转相册 355
18.2.2 旋转相册场景 355
18.2.3 调整WheelView类的代码 356
18.2.4 旋转About视图 358
18.2.5 旋转照片浏览器 358
18.3 修正麻烦点 358
18.3.1 修正照片浏览器 358
18.3.2 修正主屏幕 363
18.4 启动画面 365
18.5 小结 367
18.6 习题 367
第19章 用AirPrint打印 368
19.1 打印功能如何工作 368
19.1.1 打印中心Print Center 368
19.1.2 能打印的前提 369
19.1.3 打印API 369
19.2 向PhotoWheel添加打印功能 369
19.3 小结 372
19.4 习题 372
第20章 发送电子邮件 373
20.1 工作原理 373
20.2 SendEmailController类 374
20.2.1 引入SendEmailController类 375
20.2.2 SendEmailController的用法 378
20.3 小结 383
20.4 习题 383
第21章 Web服务 384
21.1 基础知识 384
21.2 Flickr 385
21.2.1 向PhotoWheel加入Flickr支持 386
21.2.2 更新Flickr View Controller Scene 388
21.2.3 显示Flickr场景 389
21.2.4 包装Flickr应用编程接口 391
21.2.5 异步下载照片 397
21.2.6 FlickrViewController的实现 402
21.3 其他事宜 410
21.4 还缺什么 411
21.5 小结 411
21.6 习题 411
第22章 与iCloud同步 412
22.1 同步使事情变得简单 412
22.2 iCloud的各种概念 412
22.2.1 文件协调器和表现器 413
22.2.2 UIDocument与UIManagedDocument 413
22.2.3 无所不在持久存储 414
22.3 为设备提供信息的回顾 414
22.3.1 配置应用程序ID 414
22.3.2 为iCloud提供信息 415
22.3.3 配置iCloud权利 416
22.4 对PhotoWheel的iCloud考虑 418
22.4.1 同步要做得恰到好处 418
22.4.2 使用瞬态Core Data特性 419
22.5 更新PhotoWheel以支持iCloud 419
22.6 用iCloud来同步照片 423
22.6.1 使持久存储协调器无所不在 423
22.6.2 从iCloud接收变更 427
22.7 小结 430
22.8 习题 431
第23章 用AirPlay放映幻灯片 432
23.1 外部显示选项 432
23.2 应用程序对外部显示器的要求 432
23.3 外部显示器的应用编程接口 433
23.4 向PhotoWheel添加幻灯片放映 434
23.4.1 更新故事板 434
23.4.2 添加幻灯片放映显示器 435
23.5 管理外部显示器 437
23.6 推进到下一张照片 440
23.7 添加幻灯片放映的用户界面控件 442
23.8 更新照片浏览器 444
23.9 测试和调试时的注意事项 445
23.10 添加对AirPlay设备的支持 446
23.11 AirPlay的运用 447
23.12 小结 448
23.13 习题 448
第24章 Core Image的视觉特效 449
24.1 Core Image的概念 449
24.2 CIFilter 450
24.2.1 滤镜类型 451
24.2.2 CIFilter的使用 451
24.3 图片分析 452
24.3.1 自动增强 453
24.3.2 脸部识别 454
24.4 为PhotoWheel添加Core Image特效 454
24.4.1 新建委派方法 455
24.4.2 滤镜管理的实例变量 456
24.4.3 用户界面的添加 456
24.4.4 创建CIFilter特效 461
24.4.5 滤镜的运用 465
24.4.6 图片自动增强功能的实现 466
24.4.7 实现脸部缩放 466
24.4.8 其他必要的方法 468
24.5 小结 469
24.6 习题 469
第三部分 最后的润色 471
第25章 调试 471
25.1 了解问题所在 471
25.1.1 问题出在哪里 471
25.1.2 重现缺陷 471
25.2 调试的概念 472
25.3 在Xcode中调试 472
25.3.1 设置和管理断点 473
25.3.2 定制断点 473
25.3.3 到达断点 474
25.3.4 检查变量 475
25.4 调试示例:外部显示器代码 477
25.5 什么时候真的需要NSLog 480
25.6 使用Instruments剖析代码 481
25.7 小结 485
第26章 发布应用程序 486
26.1 发布方法 486
26.2 构建非正式的发布 486
26.2.1 设置非正式发布的配置信息 487
26.2.2 准备构建非正式发布的版本 487
26.3 构建App Store的发布版本 488
26.3.1 设置App Store条款 489
26.3.2 准备为App Store发布的版本 489
26.3.3 接下来怎么做 490
26.4 App Store流程 490
26.5 为App Store提供应用程序信息 491
26.6 App Store媒体材料 493
26.7 iTunes Connect的运用 493
26.7.1 用户角色 493
26.7.2 管理应用程序 494
26.8 发送应用程序 494
26.9 更进一步 495
26.10 小结 495
第27章 结语 496
附录A 安装开发工具 498