第1章 UIKit Dynamics 1
1.1 示例应用 1
1.2 UIKit Dynamics简介 2
1.3 实现UIKit Dynamics 2
1.3.1 重力 3
1.3.2 碰撞 4
1.3.3 连接 6
1.3.4 弹簧效果 7
1.3.5 吸附 8
1.3.6 推力 8
1.3.7 物体属性 10
1.4 深入了解UIDynamicAnimator和UIDynamicAnimatorDelegate 11
1.5 小结 12
1.6 练习 12
第2章 Core Location、MapKit和地理围栏 13
2.1 示例应用 13
2.2 获取用户的位置 13
2.2.1 需求和许可 14
2.2.2 检查定位服务是否已开启 17
2.2.3 开始位置请求 17
2.2.4 分析和理解位置数据 19
2.2.5 重大变化通知 20
2.2.6 使用GPX文件进行位置测试 20
2.3 显示地图 22
2.3.1 理解坐标系 22
2.3.2 配置和定制MKMapKit 22
2.3.3 响应用户交互 24
2.4 地图注释和覆盖层 25
2.4.1 添加注释 25
2.4.2 显示标准和自定义的注释视图 27
2.4.3 可拖曳的注释视图 30
2.4.4 使用地图覆盖层 31
2.5 地理编码和反向地理编码 32
2.5.1 对地址进行地理编码 32
2.5.2 对位置进行反向地理编码 36
2.6 地理围栏 38
2.6.1 检查区域监视功能 38
2.6.2 定义边界 39
2.6.3 监视变化 40
2.7 获取线路 41
2.8 小结 46
2.9 练习 46
第3章 排行榜 47
3.1 “打仙人掌”游戏 47
3.1.1 生成仙人掌 49
3.1.2 处理玩家与仙人掌的交互 51
3.1.3 显示生命数和得分 53
3.1.4 暂停和继续 54
3.1.5 对游戏“打仙人掌”的最后思考 55
3.2 iTunes Connect 56
3.3 游戏中心管理器 58
3.4 身份验证 60
3.4.1 常见的身份验证错误 61
3.4.2 iOS 6身份验证 63
3.5 提交得分 65
3.5.1 在游戏“打仙人掌”中添加得分功能 67
3.5.2 显示排行榜 69
3.5.3 得分挑战 71
3.5.4 更深入地了解排行榜 72
3.6 小结 74
3.7 练习 74
第4章 成就 75
4.1 iTunes Connect 75
4.2 显示成就进度 77
4.3 游戏中心管理器和身份验证 78
4.4 成就缓存 78
4.5 报告成就 80
4.6 添加成就钩子 82
4.7 完成横幅 83
4.8 成就挑战 83
4.9 在游戏“打仙人掌”中添加成就功能 85
4.9.1 一步获得的成就 86
4.9.2 可分多步获得的成就 88
4.9.3 可分多次获得的成就 89
4.9.4 捎带式成就及存储准确的成就进度 90
4.9.5 基于时间的成就 91
4.10 重置成就 92
4.11 更深入地了解成就 93
4.12 小结 94
4.13 练习 94
第5章 地址簿 97
5.1 为何支持地址簿很重要 97
5.2 地址簿编程的限制 97
5.3 示例应用简介 98
5.4 使用地址簿 99
5.4.1 从地址簿读取数据 100
5.4.2 从地址簿读取多值数据 101
5.4.3 理解地址簿标签 102
5.4.4 使用地址 103
5.5 地址簿图形用户界面 104
5.6 以编程方式创建联系人 109
5.7 小结 111
5.8 练习 112
第6章 使用音乐库 113
6.1 示例应用简介 113
6.2 打造播放引擎 114
6.2.1 注册播放通知 115
6.2.2 播放控制 116
6.2.3 响应状态变化 118
6.2.4 时长和定时器 122
6.2.5 随机播放和重复播放 123
6.3 媒体选择器 123
6.4 以编程方式选择媒体 125
6.4.1 随机选择歌曲 126
6.4.2 使用谓词选择歌曲 127
6.5 小结 129
6.6 练习 129
第7章 使用和分析JSON 131
7.1 JSON 131
7.1.1 使用JSON的好处 131
7.1.2 JSON资源 132
7.2 示例应用简介 132
7.3 访问服务器 132
7.4 从服务器获取JSON 133
7.4.1 创建请求 133
7.4.2 查看响应 134
7.4.3 分析JSON 134
7.4.4 显示数据 135
7.5 发布消息 137
7.5.1 JSON编码 137
7.5.2 将JSON数据发送给服务器 139
7.6 小结 140
7.7 练习 140
第8章 iCloud 141
8.1 示例应用 141
8.2 配置应用以支持iCloud 142
8.2.1 设置账户 142
8.2.2 启用iCloud功能 143
8.2.3 初始化iCloud 144
8.3 UIDocument简介 144
8.3.1 创建UIDocument子类 145
8.3.2 与UIDocument交互 146
8.4 与iCloud交互 147
8.4.1 列出iCioud中的文档 148
8.4.2 检测iCloud冲突 151
8.5 解决冲突 152
8.6 键值存储同步 156
8.7 小结 158
8.8 练习 158
第9章 通知 159
9.1 本地通知和推送通知的差别 159
9.2 示例应用 160
9.3 配置应用 160
9.4 创建开发推送SSL证书 163
9.5 开发供应配置文件 165
9.6 准备自定义声音 169
9.7 注册远程通知 169
9.8 调度本地通知 170
9.9 接收通知 171
9.10 推送通知服务器 172
9.11 Rails基本配置 173
9.12 添加设备和呼叫支持 174
9.13 设备控制器 176
9.14 呼叫控制器 176
9.15 整合起来 177
9.16 发送推送通知 181
9.17 处理APNs反馈 181
9.18 小结 181
9.19 练习 181
第10章 使用Game Kit蓝牙联网技术 183
10.1 Game Kit蓝牙联网技术的局限性 183
10.2 Game Kit蓝牙联网技术的优点 183
10.3 示例应用 184
10.4 对等设备选择器 188
10.5 发送数据 191
10.5.1 数据传输模式 191
10.5.2 在示例应用中发送数据 192
10.6 接收数据 193
10.7 状态变化 194
10.8 高级功能 195
10.8.1 对等设备的显示名称 195
10.8.2 在不使用对等设备选择器的情况下建立连接 195
10.8.3 会话模式 197
10.9 小结 197
10.10 练习 197
第11章 AirPrint 199
11.1 AirPrint打印机 199
11.2 检查设备是否支持AirPrint 200
11.3 打印文本 201
11.3.1 打印信息 202
11.3.2 设置页面范围 202
11.3.3 错误处理 203
11.3.4 启动打印作业 204
11.3.5 Print Simulator的反馈 205
11.4 打印中心 205
11.5 打印渲染的HTML 207
11.6 打印PDF 208
11.7 小结 209
11.8 练习 209
第12章 Core Data简介 211
12.1 判断是否适合使用Core Data 212
12.2 Core Data托管对象 212
12.2.1 托管对象 213
12.2.2 托管对象模型 213
12.2.3 托管对象模型迁移 215
12.2.4 创建托管对象 215
12.2.5 对象检索和排序 216
12.2.6 检索结果控制器 217
12.3 Core Data环境 217
12.3.1 持久存储协调器 218
12.3.2 持久存储区 218
12.3.3 托管对象上下文 218
12.4 小结 219
第13章 使用Core Data 221
13.1 示例应用 221
13.2 创建Core Data项目 222
13.3 创建托管对象模型 225
13.3.1 创建实体 226
13.3.2 添加特性 227
13.3.3 建立关系 227
13.3.4 NSManagedObject子类 228
13.4 添加默认数据 229
13.4.1 插入托管对象 229
13.4.2 其他默认数据添加技术 230
13.5 显示托管对象 230
13.5.1 创建检索请求 231
13.5.2 使用对象ID检索 232
13.5.3 显示对象数据 234
13.5.4 使用谓词 235
13.6 检索结果控制器简介 237
13.6.1 准备检索结果控制器 237
13.6.2 集成表视图和检索结果控制器 239
13.6.3 响应Core Data变化 241
13.7 添加、编辑和删除托管对象 243
13.7.1 插入托管对象 243
13.7.2 删除托管对象 244
13.7.3 编辑托管对象 245
13.7.4 保存和回滚所做的修改 245
13.8 小结 246
13.9 练习 247
第14章 语言特性 249
14.1 字面量 249
14.1.1 NSNumber 250
14.1.2 NSArray 250
14.1.3 NSDictionary 251
14.1.4 盒装表达式(Boxed Expressions) 252
14.2 自动引用计数 252
14.2.1 在新项目中使用ARC 252
14.2.2 将既有项目迁移到ARC 253
14.2.3 ARC的基本用法 255
14.2.4 ARC限定符 256
14.3 块 256
14.3.1 声明和使用块 257
14.3.2 使用块捕获状态 257
14.3.3 将块用作方法参数 259
14.3.4 内存、线程和块 260
14.4 属性 261
14.4.1 声明属性 261
14.4.2 合成属性 262
14.4.3 访问属性 263
14.4.4 句点表示法 263
14.4.5 快速枚举 264
14.5 方法替换 265
14.6 小结 267
14.7 练习 267
第15章 使用Social Framework集成Twitter和Facebook 269
15.1 集成社交功能 269
15.2 示例应用 269
15.3 登录 270
15.4 使用SLComposeViewController 271
15.5 使用自定义界面发布消息 273
15.5.1 发布推文 273
15.5.2 发布Facebook消息 277
15.5.3 创建Facebook应用 277
15.6 访问用户的时光轴 281
15.6.1 Twitter 282
15.6.2 Facebook 287
15.7 小结 290
15.8 练习 291
第16章 执行后台任务 293
16.1 示例应用 293
16.2 检查设备是否支持后台处理 294
16.3 在后台完成任务 295
16.3.1 后台任务标识符 296
16.3.2 终止处理程序 296
16.3.3 执行后台任务 297
16.4 实现后台活动 298
16.4.1 后台活动类型 298
16.4.2 在后台播放音乐 299
16.5 小结 302
16.6 练习 302
第17章 使用GCD改善性能 303
17.1 示例应用 303
17.2 队列简介 304
17.3 在主线程中运行 304
17.4 在后台运行 306
17.5 在操作队列中运行 308
17.5.1 并行操作 308
17.5.2 串行操作 309
17.5.3 撤销操作 311
17.5.4 自定义操作 311
17.6 在分派队列中运行 313
17.6.1 并行分派队列 314
17.6.2 串行分派队列 315
17.7 小结 316
17.8 练习 317
第18章 使用钥匙串保护数据 319
18.1 示例应用简介 319
18.2 使用Keychain 320
18.2.1 创建KeychainItem Wrapper实例 320
18.2.2 存储和获取PIN 321
18.2.3 钥匙串项属性键 322
18.2.4 保护字典 323
18.2.5 重置钥匙串项 325
18.2.6 在应用之间共享钥匙串项 325
18.2.7 Keychain错误码 326
18.3 小结 327
18.4 练习 327
第19章 使用图像和滤镜 329
19.1 示例应用 329
19.2 基本的图像数据和显示 329
19.2.1 实例化图像 329
19.2.2 显示图像 331
19.2.3 使用图像选择器 332
19.2.4 调整图像大小 334
19.3 Core Image滤镜 335
19.3.1 滤镜类别和滤镜 335
19.3.2 滤镜的属性 337
19.3.3 初始化图像 340
19.3.4 渲染应用滤镜后的图像 340
19.3.5 串接滤镜 341
19.4 人脸检测 342
19.4.1 创建人脸检测器 342
19.4.2 处理五官 343
19.5 小结 345
19.6 练习 345
第20章 集合视图 347
20.1 示例应用 347
20.2 集合视图简介 348
20.2.1 创建集合视图 348
20.2.2 实现集合视图数据源方法 350
20.2.3 实现集合视图委托方法 352
20.3 定制集合视图和流式布局 354
20.3.1 基本定制 354
20.3.2 装饰视图 355
20.4 创建自定义布局 359
20.5 集合视图动画 362
20.5.1 集合视图布局变更动画 362
20.5.2 集合视图滚动动画 364
20.5.3 集合视图内容变更动画 365
20.6 小结 366
20.7 练习 366
第21章 TextKit简介 367
21.1 示例应用 367
21.2 NSLayoutManager简介 368
21.2.1 NSTextStore 368
21.2.2 NSLayoutManagerDelegate 369
21.2.3 NSTextContainer 370
21.3 动态地检测链接 370
21.4 触摸检测 371
21.5 排除路径 372
21.6 突出特定内容 373
21.7 使用动态字体修改字体设置 378
21.8 小结 379
21.9 练习 379
第22章 手势识别器 381
22.1 手势识别器类型 381
22.2 手势识别器的基本用法 382
22.3 示例应用简介 382
22.3.1 使用轻按识别器 383
22.3.2 使用张合识别器 384
22.4 一个视图,多个识别器 385
22.4.1 手势识别器的幕后原理 387
22.4.2 一个视图多个识别器 388
22.4.3 要求手势识别器失败 389
22.5 自定义UIGestureRecognizer子类 391
22.6 小结 392
22.7 练习 392
第23章 访问照片库 393
23.1 示例应用 393
23.2 资产库 393
23.3 枚举资产编组和资产 394
23.3.1 许可 394
23.3.2 编组 396
23.3.3 资产 400
23.4 显示资产 402
23.5 保存到相机胶卷 407
23.6 处理照片流 408
23.7 小结 409
23.8 练习 410
第24章 Passbook和PassKit 411
24.1 示例应用 411
24.2 设计凭证 412
24.2.1 凭证类型 412
24.2.2 凭证布局之登机牌 413
24.2.3 凭证布局之优惠券 413
24.2.4 凭证布局之入场券 413
24.2.5 凭证布局之通用凭证 414
24.2.6 凭证布局之购物卡 414
24.2.7 凭证的呈现 415
24.3 创建凭证 416
24.3.1 凭证的基本标识 417
24.3.2 凭证的相关信息 417
24.3.3 条形码标识 418
24.3.4 凭证的外观信息 418
24.3.5 凭证字段 419
24.4 凭证的签名和打包 421
24.4.1 创建凭证类型ID 421
24.4.2 创建凭证签名证书 423
24.4.3 创建清单文件 426
24.4.4 对凭证进行签名和打包 427
24.4.5 测试凭证 428
24.4.6 在应用中与凭证交互 428
24.5 自动更新凭证 436
24.6 小结 437
24.7 练习 437
第25章 调试和Instruments 439
25.1 调试简介 439
25.1.1 第一个计算机Bug 439
25.1.2 Xcode调试基础 440
25.2 断点 442
25.2.1 定制断点 442
25.2.2 符号断点和异常断点 443
25.2.3 断点的范围 444
25.3 使用调试器 444
25.4 Instruments 446
25.4.1 Instruments的界面 447
25.4.2 探索Instruments:Time Profiler 448
25.4.3 探索Instruments:Leaks 451
25.4.4 更深入地了解Instruments 453
25.5 小结 453
25.6 练习 454