第1章 欢迎来到iOS和Swift世界 1
1.1 关于本书 1
1.2 必备条件 1
1.2.1 选择开发者计划 2
1.2.2 必备知识 3
1.3 iOS应用程序的特点 4
1.3.1 只能运行一个应用 4
1.3.2 只能使用一个窗口 4
1.3.3 有限的访问权限 4
1.3.4 有限的响应时间 4
1.3.5 有限的屏幕尺寸 5
1.3.6 有限的系统资源 5
1.3.7 不支持垃圾回收 6
1.3.8 一些新功能 6
1.3.9 与众不同的交互方法 6
1.4 本书内容 6
1.5 新版增加内容 8
1.6 Swift和Xcode版本 8
1.7 准备好了吗 8
第2章 创建第一个项目 9
2.1 在Xcode中创建项目 9
2.1.1 Xcode项目窗口 12
2.1.2 深入了解项目 18
2.2 Interface Builder简介 19
2.2.1 文件格式 20
2.2.2 storyboard 21
2.2.3 资源库 22
2.2.4 在视图中添加标签 23
2.2.5 属性修改 27
2.3 画龙点睛——美化iPhone应用程序 28
2.4 启动界面 30
2.5 小结 31
第3章 实现基本交互 32
3.1 MVC模式 32
3.2 创建项目 33
3.3 视图控制器 34
3.3.1 输出接口和操作方法 35
3.3.2 精简视图控制器代码 37
3.3.3 设计用户界面 38
3.3.4 运行应用 47
3.3.5 布局预览 52
3.3.6 添加字体类型 54
3.4 应用程序委托 55
3.5 小结 58
第4章 更丰富的用户界面 59
4.1 满是控件的屏幕 59
4.2 动态控件、静态控件和被动控件 61
4.3 创建应用程序 62
4.4 实现图像视图和文本框 62
4.4.1 添加图像视图 62
4.4.2 调整图像视图的大小 64
4.4.3 设置视图属性 65
4.4.4 添加文本框 67
4.4.5 添加约束 71
4.4.6 创建并关联输出接口 72
4.5 关闭键盘 74
4.5.1 按下Done按钮关闭键盘 74
4.5.2 触摸背景关闭键盘 75
4.5.3 添加滑动条和标签 76
4.5.4 添加更多约束 78
4.5.5 创建并关联操作方法和输出接口 78
4.5.6 实现操作方法 78
4.6 实现开关、按钮和分段控件 79
4.6.1 添加两个带标签的开关 80
4.6.2 为开关创建并关联输出接口和操作方法 81
4.6.3 实现开关的操作方法 81
4.7 美化按钮 83
4.7.1 可拉伸图像 83
4.7.2 控件状态 84
4.7.3 为按钮创建并关联输出接口和操作方法 84
4.8 实现分段控件的操作方法 85
4.9 实现操作表单和警告视图 85
4.9.1 显示操作表单 86
4.9.2 显示警告视图 88
4.10 小结 90
第5章 自动旋转和自动调整大小 91
5.1 自动旋转机制 91
5.1.1 点、像素和Retina显示屏 92
5.1.2 控制旋转 92
5.2 选择视图支持的方向 93
5.2.1 应用级支持的方向 93
5.2.2 独立控制器的旋转支持 94
5.3 使用约束设计界面 95
5.3.1 覆盖默认的约束 98
5.3.2 与屏幕等宽的标签 99
5.4 创建自适应布局 101
5.4.1 创建Restructure应用程序 101
5.4.2 尺寸分类 105
5.4.3 尺寸分类和storyboard 106
5.4.4 创建iPhone横屏布局 108
5.4.5 创建iPad布局 112
5.5 小结 114
第6章 多视图应用 115
6.1 多视图应用的常见类型 115
6.2 多视图应用的体系结构 118
6.2.1 根控制器 119
6.2.2 内容视图剖析 119
6.3 构建View Switcher项目 120
6.3.1 重命名视图控制器 120
6.3.2 添加内容视图控制器 123
6.3.3 修改SwitchingViewController实现文件 123
6.3.4 创建拥有工具栏的视图 124
6.3.5 连接工具栏按钮和视图控制器 126
6.3.6 编写根视图控制器 127
6.3.7 实现内容视图 130
6.3.8 转场过程的动画效果 133
6.4 小结 135
第7章 分页栏与选取器 136
7.1 Pickers应用程序 136
7.2 委托和数据源 139
7.3 创建Pickers应用程序 139
7.3.1 创建视图控制器 140
7.3.2 创建分页栏控制器 140
7.3.3 首次运行 143
7.4 实现日期选取器 143
7.5 实现单滚轮选取器 146
7.5.1 构建视图 146
7.5.2 将控制器实现为数据源和委托 147
7.6 实现多滚轮选取器 150
7.6.1 声明输出接口和操作方法 150
7.6.2 构建视图 150
7.6.3 实现控制器 151
7.7 滚轮内容根据环境变化 153
7.8 使用自定义选取器创建一个简单游戏 159
7.8.1 编写控制器头文件 159
7.8.2 构建视图 159
7.8.3 实现控制器 160
7.8.4 最后的细节 163
7.9 小结 165
第8章 表视图简介 166
8.1 表视图基础 166
8.1.1 表视图和表视图单元 167
8.1.2 分组表和无格式表 167
8.2 实现一个简单表 168
8.2.1 设计视图 168
8.2.2 编写控制器 170
8.2.3 添加一个图像 174
8.2.4 表视图单元样式 175
8.2.5 设置缩进级别 177
8.2.6 处理行的选择 178
8.2.7 更改字体大小和行高 179
8.3 定制表视图单元 181
8.3.1 向表视图单元添加子视图 181
8.3.2 创建UITableViewCell子类 182
8.3.3 从nib文件加载UITableViewCell 186
8.4 分组分区和索引分区 190
8.4.1 构建视图 190
8.4.2 导入数据 191
8.4.3 实现控制器 191
8.4.4 添加索引 195
8.5 实现搜索栏 195
8.6 视图调试器 202
8.7 小结 204
第9章 导航控制器和表视图 205
9.1 导航控制器 205
9.1.1 栈的概念 205
9.1.2 控制器栈 206
9.2 简单的字体浏览器:Fonts 207
9.2.1 子控制器 207
9.2.2 Font应用的基础框架 209
9.3 创建根视图控制器 214
9.4 初始化storyboard 217
9.5 第一个子控制器:字体列表视图 218
9.5.1 设定字体列表的storyboard 219
9.5.2 对根视图控制器的转场进行设置 220
9.6 创建字体尺寸视图控制器 221
9.6.1 设计字体尺寸视图控制器的storyboard 223
9.6.2 对字体列表视图控制器的转场进行设置 223
9.7 创建字体信息视图控制器 223
9.7.1 设计字体信息视图控制器的storyboard 225
9.7.2 设置约束 226
9.7.3 调整字体列表视图控制器的转场 227
9.7.4 我的收藏字体 227
9.8 改善表视图 228
9.8.1 实现轻扫删除 228
9.8.2 实现拖动排序 230
9.9 小结 232
第10章 集合视图 233
10.1 创建DialogViewer项目 233
10.2 修补视图控制器类 234
10.3 自定义单元 234
10.4 配置视图控制器 237
10.5 内容单元 238
10.6 实现流式布局 239
10.7 分区标题视图 241
10.8 小结 242
第11章 分割视图和浮动窗口 243
11.1 创建分割视图项目 245
11.1.1 在storyboard中定义结构 247
11.1.2 使用代码定义功能 248
11.1.3 Master-Detail模板应用程序的工作原理 253
11.2 显示总统信息 255
11.3 创建浮动窗口 261
11.4 iPhone上的分割视图 266
11.4.1 iPhone 6 Plus上的分割视图 267
11.4.2 在所有iPhone上支持iPhone 6 Plus的行为 268
11.5 自定义分割视图 271
11.6 小结 273
第12章 应用设置和用户默认设置 274
12.1 设置捆绑包入门 274
12.2 应用:Bridge Control 275
12.2.1 创建项目 278
12.2.2 使用设置捆绑包 279
12.2.3 读取应用中的设置 291
12.2.4 在应用中修改默认设置 294
12.2.5 注册默认值 296
12.2.6 保证设置有效 297
12.3 切换到“设置”应用程序 299
12.4 小结 300
第13章 数据持久化基础知识 301
13.1 应用的沙盒 301
13.1.1 获取Documents目录 303
13.1.2 获取tmp目录 304
13.2 文件保存方案 304
13.2.1 单文件持久化 304
13.2.2 多文件持久化 304
13.3 属性列表 304
13.3.1 属性列表序列化 305
13.3.2 Persistence应用的第一个版本 306
13.4 对模型对象进行归档 310
13.4.1 遵循NSCoding协议 310
13.4.2 实现NSCopying协议 312
13.4.3 对数据对象进行归档和取消归档 313
13.4.4 归档应用 314
13.5 使用iOS内嵌的SQLite3 317
13.5.1 创建或打开数据库 317
13.5.2 绑定变量 319
13.5.3 SQLite3应用 319
13.6 使用Core Data 324
13.6.1 实体和托管对象 326
13.6.2 Core Data应用 328
13.7 小结 335
第14章 文档和iCloud 336
14.1 使用UI Document管理文档存储 336
14.1.1 构建TinyPix 336
14.1.2 创建TinyPixDocument类 337
14.1.3 主控制器代码 340
14.1.4 初始storyboard 346
14.1.5 创建TinyPixView类 348
14.1.6 设计storyboard 352
14.2 添加iCloud支持 356
14.2.1 创建授权文件 356
14.2.2 如何查询 357
14.2.3 保存在哪里 359
14.2.4 将首选项保存到iCloud 360
14.3 小结 362
第15章 Grand Central Dispatch和后台处理 363
15.1 Grand Central Dispatch 363
15.2 SlowWorker简介 363
15.3 线程基础知识 367
15.4 工作单元 367
15.5 GCD:底层队列 368
15.5.1 傻瓜式操作 368
15.5.2 改进Slow W orker 369
15.6 后台处理 374
15.6.1 应用生命周期 375
15.6.2 状态更改通知 375
15.6.3 创建State Lab项目 376
15.6.4 执行状态的变化 377
15.6.5 利用执行状态更改 379
15.6.6 处理不活跃状态 379
15.6.7 处理后台状态 382
15.7 小结 388
第16章 使用Core Graphics绘图 389
16.1 Quartz 2D基础概念 389
16.2 Quartz 2D绘图方法 389
16.2.1 Quartz 2D图形环境 389
16.2.2 坐标系统 390
16.2.3 指定颜色 391
16.2.4 在环境中绘制图像 393
16.2.5 绘制形状:多边形、直线和曲线 393
16.2.6 Quartz 2D样例:图案、渐变色、虚线图 394
16.3 QuartzFun应用程序 395
16.3.1 构建QuartzFun应用程序 395
16.3.2 添加Quartz 2D绘制代码 403
16.3.3 优化QuartzFun应用程序 408
16.4 小结 410
第17章 Sprite Kit游戏框架 411
17.1 基础入门 411
17.2 玩家动作 420
17.2.1 向场景中插入玩家 421
17.2.2 触摸处理:玩家移动 421
17.2.3 几何运算 422
17.2.4 轻微摆动 423
17.3 创建敌人 424
17.4 在场景中放入敌人 425
17.5 开始射击 426
17.5.1 定义物理类别 426
17.5.2 创建BulletNode类 427
17.5.3 应用物理知识 428
17.5.4 在场景中添加导弹 429
17.6 利用物理引擎攻击敌人 430
17.7 实现关卡 431
17.7.1 注意敌人 432
17.7.2 进入下一关卡 432
17.8 自定义碰撞 433
17.8.1 为SKNode添加类扩展/类别 434
17.8.2 向敌人添加自定义碰撞行为 436
17.8.3 显示玩家正确的生命值 436
17.9 粒子系统 438
17.9.1 第一个粒子 438
17.9.2 向场景中加入粒子 440
17.10 游戏结束 441
17.11 创建开始场景 443
17.12 播放音乐 445
17.13 添加力场 446
17.14 小结 449
第18章 轻点、触摸和手势 450
18.1 多点触控术语 450
18.2 响应者链 451
18.2.1 响应事件 451
18.2.2 转发事件:保持响应者链的活动状态 452
18.3 多点触控体系结构 452
18.4 4个手势通知方法 452
18.5 TouchExplorer应用 453
18.6 Swipes应用 456
18.6.1 使用触摸事件检测轻扫 457
18.6.2 自动手势识别 459
18.6.3 实现多指轻扫 460
18.7 检测多次轻点 462
18.8 检测捏合和旋转 466
18.9 自定义手势 469
18.9.1 CheckPlease应用 470
18.9.2 CheckPlease的触摸方法 471
18.10 小结 473
第19章 Core Location和Map Kit 474
19.1 位置管理器 474
19.1.1 设置精度 475
19.1.2 设置距离筛选器 475
19.1.3 获取使用定位服务的权限 475
19.1.4 启动位置管理器 475
19.1.5 合理使用位置管理器 476
19.2 位置管理器委托 476
19.2.1 获取位置更新 476
19.2.2 使用CLLocation获取纬度和经度 476
19.2.3 错误通知 478
19.3 开始构建Core Location 478
19.4 将移动路线展现在地图上 484
19.5 小结 488
第20章 陀螺仪和加速计 489
20.1 加速计物理特性 489
20.2 陀螺仪旋转特性 489
20.3 Core Motion和动作管理器 490
20.3.1 基于事件的动作 490
20.3.2 主动动作访问 494
20.3.3 陀螺仪和方位结果 496
20.3.4 加速计结果 497
20.4 检测摇动 497
20.4.1 内嵌的摇动检测 498
20.4.2 摇动与击碎 498
20.5 将加速计用作方向控制器 500
20.5.1 滚弹珠程序 501
20.5.2 实现BallView类 503
20.5.3 计算弹珠运动 506
20.6 小结 508
第21章 摄像头和照片库 509
21.1 图像选取器和UIImagePickerController 509
21.2 图像选取器控制器 509
21.3 实际测试摄像头和照片库 511
21.3.1 设计界面 512
21.3.2 实现摄像头视图控制器 515
21.4 小结 518
第22章 应用本地化 519
22.1 本地化体系结构 519
22.2 字符串文件 520
22.2.1 字符串文件的格式 520
22.2.2 本地化的字符串函数 521
22.3 现实中的iOs本地化应用 521
22.3.1 创建LocalizeMe 522
22.3.2 测试LocalizeMe 525
22.3.3 本地化项目 525
22.3.4 本地化storyboard 527
22.3.5 创建并本地化字符串文件 529
22.4 在Xcode中预览本地化 533
22.5 添加其他本地化 534
22.6 小结 535
附录Swift简介 536