描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302511571
产品特色
编辑推荐
本书介绍使用iOS 11 Xcode 9 Swift 4开发移动应用所需要的主要内容,全书共分三篇,*篇为基础篇,主要介绍iOS开发基础知识,包括iOS系统的历史、Swift 4.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等;第二篇为进阶篇,主要介绍Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、CoreML机器学习、ARKit增强现实、自动化测试、性能分析、本地化、加密与安全等实用技术;第三篇为实例篇,通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并*终创建一个成熟的商业项目。
内容简介
本书介绍使用iOS 11、Xcode 9和Swift 4.0开发移动应用所需要的主要内容,全书共分三篇,*篇为基础篇(第1~10章),主要介绍了iOS开发基础知识,包括iOS系统的历史、Swift 4.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等;第二篇为进阶篇(第11~23章),主要介绍了Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、CoreML机器学习、ARKit增强现实、自动化测试、性能分析、本地化、加密与安全等实用技术;第三篇为实例篇(第24~31章),通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并*终创建一个成熟的商业项目。本书还提供了丰富的源代码和教学视频,可以大幅提高读者的学习效率。本书采用丰富的实例和直观的代码展示,向读者形象地讲解了在创建一款优秀的iOS应用程序时所需要的大部分技巧,可以帮助读者轻松掌握并高效开发iOS程序。
目 录
目 录 第1章 开始iOS开发之旅 11.1 iOS移动开发现状 11.1.1 iOS的历史 21.1.2 iOS 11的十一大变化 41.1.3 iOS应用开发的八个特点 61.2 iOS 11和Xcode 9新增的开发技能 61.2.1 ARKit增强现实 71.2.2 CoreML机器学习 71.2.3 Face ID 71.2.4 拖放操作 81.2.5 Core NFC 81.2.6 安全区布局指南 91.2.7 Asset UIColor 91.2.8 Wireless Development 91.2.9 GitHub 101.3 成为一名iOS开发者 101.3.1 硬件上的需求 101.3.2 加入Apple开发者计划 111.3.3 下载安装Xcode和模拟器 121.3.4 创建开发和发布配置文件Provisioning Profile 131.4 创建一个基本的iOS项目 161.4.1 项目的创建 161.4.2 设置项目的信息 181.4.3 设置应用的Icon图标 191.4.4 设置应用的Launch图片 201.4.5 编译并运行项目 221.5 iOS应用的生命周期 231.5.1 iOS应用程序的状态 231.5.2 演示iOS应用程序的各种状态 241.6 小结 25
第2章 Xcode 9 IDE和iOS模拟器 272.1 Xcode 9的使用 272.1.1 工具栏的使用 282.1.2 导航器的功能介绍 292.1.3 项目导航器中的内容 292.1.4 创建一个组和Swift文件 302.1.5 在项目中搜索文件 332.1.6 代码的查找和替换 362.1.7 代码的Debug调试 362.2 iOS模拟器的使用 392.2.1 使用多种iOS模拟器 392.2.2 iOS模拟器方向的切换 402.2.3 iOS模拟器语言的切换 412.2.4 截取模拟器屏幕 412.2.5 应用程序的退出和删除 412.3 小结 42
第3章 Swift 4.0的基础知识 433.1 Swift的基本概念 433.1.1 Swift语言的特点 443.1.2 Swift常量和变量的定义 443.1.3 常量和变量的输出 453.1.4 注释 463.1.5 Playground 473.2 数据类型与运算 493.2.1 布尔类型 493.2.2 整数类型及实例属性 503.2.3 浮点类型及实例属性 503.2.4 字符和字符串 513.2.5 元组类型 543.2.6 一元、二元和三元运算符 553.2.7 比较运算符 563.3 循环语句和条件判断语句 563.3.1 for循环 563.3.2 while循环语句 583.3.3 repeat-while循环语句 583.3.4 if条件判断语句 593.3.5 switch条件判断语句 603.3.6 continue语句和fallthrough语句 603.4 数组和字典 613.4.1 数组 613.4.2 多维数组 633.4.3 数组的遍历 643.4.4 字典 653.5 小结 67
第4章 Swift 4.0的进阶内容 684.1 函数 684.1.1 函数的定义和调用 684.1.2 为参数设置默认值 694.1.3 设置可变的函数参数数量 704.1.4 函数作为参数和返回类型 714.1.5 元组作为函数的返回类型实现多个返回值 724.1.6 使用函数类型 734.1.7 函数的输入输出参数 744.1.8 函数的嵌套 744.1.9 函数的递归用法 754.1.10 常用的内置函数 764.2 枚举和结构体 784.2.1 枚举 784.2.2 结构体 814.3 类 844.3.1 类的创建 844.3.2 类属性的set和get方法 864.3.3 类属性的willSet和didSet方法 874.3.4 类的静态方法 894.3.5 类的析构 894.3.6 类的继承 904.3.7 类的延迟加载属性lazy 924.3.8 类的引用特征 934.3.9 类型检查 944.3.10 Any和AnyObject 964.4 扩展、协议和其他 974.4.1 扩展 974.4.2 协议 994.4.3 问号和感叹号 1014.5 小结 103
第5章 视图UIView和层CALayer 1045.1 视图UIView 1045.1.1 UIView概述 1045.1.2 UIView的外观属性 1065.1.3 UIView的几何属性 1105.1.4 UIView的嵌套和层次关系 1125.1.5 UIView的交互属性 1145.1.6 UIView的变形操作 1165.1.7 自定义UIView视图 1185.2 CALayer层 1225.2.1 CALayer边框 1225.2.2 CALayer投影 1235.2.3 CALayer圆角 1245.2.4 CALayer渐变 1265.3 小结 128
第6章 视图控制器UIViewController 1296.1 UIViewController视图控制器概述 1296.1.1 视图控制器与MVC 1306.1.2 创建一个视图控制器 1316.1.3 以模态方式弹出视图控制器 1346.1.4 视图控制器的生命周期 1386.1.5 视图控制器和UIScrollView 1406.2 UITabBarController 1446.2.1 创建一个UITabBarController 1446.2.2 改变UITabBarController索引 1466.2.3 在Tab图标上显示角标 1476.3 UINavigationController 1486.3.1 创建一个UINavigationController 1486.3.2 UINavigationController视图入栈和出栈 1516.3.3 导航栏和工具栏的显示和隐藏 1556.3.4 导航栏样式的修改 1556.4 导航控制器和标签控制器 1566.5 小结 159
第7章 UIKit常用控件 1607.1 UIKit框架和Foundation框架 1607.1.1 UIKit框架的结构 1617.1.2 UIKit框架和视图对象的交互 1637.2 UIButton按钮控件 1647.2.1 不同样式的UIButton按钮 1647.2.2 UIButton按钮的状态 1667.2.3 UIButton按钮的事件响应 1677.3 UILabel标签控件 1697.3.1 创建一个UILabel标签 1707.3.2 长文本标签的换行 1707.3.3 标签文字样式的自定义 1727.4 UISwitch开关控件 172 使用开关控件 1737.5 UITextField文本输入控件的使用 1747.5.1 自定义UITextField的外观和键盘 1747.5.2 响应UITextField的键盘通知 1777.6 UIAlertController 1787.6.1 创建一个警告窗口 1797.6.2 创建一个动作表单 1807.7 UIDatePicker 1827.8 UIStackView 184使用UIStackView组织视图 1847.9 小结 187
第8章 UITableView和UICollectionView 1888.1 UITableView概述 1888.1.1 UITableViewCell单元格 1898.1.2 创建一个简单的表格 1918.1.3 自定义单元格UITableViewCell 1958.1.4 自定义单元格的高度 1978.1.5 给表格添加章节和索引 2008.1.6 单元格的选择与取消选择 2038.1.7 单元格的插入和删除 2068.1.8 移动单元格的位置 2118.1.9 表格之间的嵌套 2148.2 UICollectionView概述 2218.2.1 UICollectionView的实现|原理 2228.2.2 创建一个UICollectionView对象并添加点击事件 2238.3 小结 227
第9章 触屏事件和触摸手势 2289.1 触摸事件的监测 2289.1.1 对触摸事件阶段的监测 2299.1.2 监测是否触摸到某个视图 2319.1.3 实现图像视图的拖动 2329.2 触摸手势的使用 2349.2.1 实现单点触摸手势 2359.2.2 实现双击触摸手势 2379.2.3 实现长按手势的监测 2379.2.4 捏合手势的监测 2399.3 3D Touch的使用 2419.4 小结 244
第10章 动画、声音与视频 24510.1 制作动画 24510.1.1 UIView的动画 24510.1.2 使用UIImageView播放帧动画 25110.1.3 位移关键帧动画的制作 253
10.2 音频的播放 25510.2.1 使用System Sound Services播放简短声音 25710.2.2 使用AVAudioPlayer播放音乐 25810.3 视频的播放 26110.3.1 使用AVPlayer播放影片 26210.3.2 实现影片的画中画功能 26310.4 小结 266
第11章 网络请求和Alamofire 26711.1 网络请求 26711.1.1 GET和POST请求 26711.1.2 同步请求和异步请求 26811.1.3 使用URLSession进行网络请求 26811.1.4 使用URLSession下载图片并显示进度 27011.2 Alamofire的使用 27311.2.1 Alamofire的安装 27411.2.2 使用Alamofire进行GET和POST请求 27511.2.3 使用Alamofire上传图片 27711.2.4 使用AlamofireImage缓存图像 27811.2.5 使用AlamofireObjectMapper将JSON数据映射为对象 28111.3 小结 283
第12章 UIWebView与HTML 5技术 28412.1 UIWebView的使用 28412.1.1 使用UIWebView加载网页 28512.1.2 使用UIWebView加载HTML字符串和GIF动画 28712.1.3 使用UIWebView加载本地网页 28912.1.4 使用JavaScript回调原生程序 29312.2 创建一个简单的笔记本 29612.2.1 创建一个可编辑的div 29612.2.2 设置网页的CSS样式 29612.2.3 添加插入笔记图片的方法 29712.2.4 添加删除图片和获得笔记的方法 29912.2.5 实现笔记本的用户界面 29912.3 小结 302
第13章 数据的持久化 30313.1 解析plist文件 30313.1.1 创建和解析plist文件 30413.1.2 将信息写入plist文件 30613.2 使用CoreData进行数据的持久化 30813.2.1 创建Core Data实体并插入数据 30913.2.2 检索Core Data中的数据 31213.2.3 修改和删除Core Data数据 31313.3 小结 316
第14章 多线程技术 31714.1 多线程的概念 31714.1.1 任务、进程和线程 31814.1.2 线程的Stack Space 31814.1.3 线程的优先级 31814.1.4 线程的生命周期 31914.1.5 线程和RunLoop 31914.2 使用Thread 32014.2.1 创建Thread下载图片 32014.2.2 给Thread加锁使线程同步 32214.3 Operation技术的使用 32514.4 Grand Central Dispatch的使用 32814.4.1 使用GCD查询IP地址信息 32914.4.2 DispatchGroup调度组的使用 33114.5 小结 333
第15章 MapKit地图 33415.1 MapKit的概念 33415.1.1 MKMapView的显示区域 33515.1.2 MKMapView的跟踪和定位 33615.1.3 MKMapView的交互选项和装饰物 33615.1.4 创建一个MKMapView地图 33715.1.5 MKMapView代理的使用 33915.1.6 自定义annotationView和calloutView 34115.1.7 Camera的使用 34415.2 小结 346
第16章 iOS的图文混排技术 34716.1 Core Text的使用 34716.1.1 文字排版方面的一些基本概念 34816.1.2 列出设备中的所有字体 35016.1.3 富文本的创建 35116.1.4 图文混排的实现 35316.2 Text Kit的使用 35816.2.1 使用Text Kit对文字进行分栏 35816.2.2 使用Text Kit制作图文混排效果 36016.3 小结 362
第17章 iOS的图像和视频处理技术 36317.1 Core Image概述 36317.1.1 使用Core Image的三个类制作单色调效果 36417.1.2 使用Core Image给图片添加马赛克 36617.1.3 使用Core Image处理视频画面 36717.1.4 输出Core Image的所有滤镜 37217.1.5 使用CIDetector和CIFeature进行人脸检测 37317.2 UIBlurEffect和CGBlendMode 37517.2.1 使用UIBlurEffect实现毛玻璃效果 37517.2.2 使用CGBlendMode实现颜色混合效果 37617.3 小结 378
第18章 iOS常用设备的使用 37918.1 照片和相机的使用 37918.1.1 读取照片中的图片 38018.1.2 调用相机拍摄照片 38418.2 定位设备的使用 38518.2.1 使用定位设备获取设备地理位置 38618.2.2 将地理坐标转换为实际地名 38918.3 陀螺仪和加速计设备的使用 39118.3.1 陀螺仪的原理和应用 39118.3.2 加速计的原理和应用 39218.3.3 检测iOS设备的晃动 39218.4 小结 394
第19章 使用Storyboard开发用户界面 39519.1 Storyboard概述 39519.1.1 Storyboard的优缺点 39619.1.2 Storyboard的组织形式 39719.1.3 创建一个Storyboard 39819.1.4 更改Storyboard的初始视图控制器 40019.2 在Storyboard中使用标准控件 40119.2.1 添加三个控件 40119.2.2 对控件进行连接 40319.3 在Storyboard中使用表格控件 40619.3.1 在Storyboard中添加Table View 40619.3.2 添加Table View Cell 40619.3.3 设置Table View的数据源 40819.3.4 修改ViewController.swift文件 40919.4 在Storyboard中使用集合控件 41019.4.1 添加Collection View 41019.4.2 设置Collection View Cell 41019.4.3 设置Collection View的数据源和代理 41219.4.4 修改ViewController.swift文件 41319.5 Storyboard常见的层次结构 41419.6 Storyboard之间的页面跳转和参数传递 41819.6.1 单个Storyboard中页面之间的参数传递 41819.6.2 多个Storyboard中的页面跳转及参数传递 42119.7 使用约束功能适配多分辨率 42619.7.1 打开并运行示例项目 42719.7.2 给父视图MainView添加约束 42819.7.3 给三条分隔线添加约束 43019.7.4 给两个小箭头添加约束 43219.7.5 给“添加新的会员”按钮添加约束 43419.7.6 给图标添加约束 43519.8 小结 437
第20章 单元测试和界面测试 43820.1 单元测试概述 43820.1.1 Xocde的XCTest框架 43920.1.2 对自定义类的方法进行单元测试 44220.1.3 使用XCTest框架进行性能测试 44520.2 UI Testing界面测试 44620.2.1 往项目中插入UI Testing 44620.2.2 制作UI测试的程序 44820.2.3 录制UI Testing的步骤 45020.2.4 播放UI Testing的录制步骤 45020.3 小结 451
第21章 iOS应用内存泄漏的检测 45221.1 Allocations工具的使用 45221.2 Leaks工具的使用 45921.3 小结 462
第22章 iOS应用程序的本地化 46322.1 应用程序的本地化 46322.1.1 应用程序名称的本地化 46422.1.2 应用程序文字内容的本地化 46822.1.3 Storyboard的本地化 47222.1.4 图片素材的本地化 47422.2 小结 477
第23章 加密与安全 47823.1 加密与安全 47823.1.1 对称加密和非对称加密 47923.1.2 3DES加密 47923.1.3 SHA1加密 48523.1.4 MD5加密 48723.1.5 越狱情况的判断 48923.2 小结 491
第24章 iOS 11新增开发功能 49224.1 Assets.xcassets的新特性 49224.1.1 在Assets.xcassets中添加Color Set 49324.1.2 在Assets.xcassets中添加矢量图片 49524.2 UIPasteConfiguration和Drag and Drop 49624.2.1 实现Drag to paste text功能 49724.2.2 实现拖放粘贴图片功能 49924.3 UISwipeActionsConfiguration的使用 50224.4 ARKit增强现实框架 50524.4.1 什么是AR增强现实 50624.4.2 基于ARKit的应用程序 50624.4.3 创建一个ARKit项目 50724.5 CoreML机器学习框架 51124.6 小结 515
第25章 在iTunes Connect上创建App 51625.1 创建一款新App 51625.1.1 登录iTunes Connect并创建App 51725.1.2 创建In-App Purchase内购项目 51925.1.3 为IAP内购添加沙箱技术测试账号 52125.2 小结 522
第26章 版本控制和开源类库安装 52326.1 将项目添加到GitHub 52326.1.1 Git和GitHub 52326.1.2 创建一个GitHub账号 52426.1.3 将新建项目上传到GitHub 52526.2 使用CocoaPods安装第三方类库 52826.2.1 安装CocoaPods 52826.2.2 安装第三方开源类库 52926.3 小结 531
第27章 App项目结构的搭建 53227.1 项目目录结构的创建 53227.1.1 创建New Group新组 53227.1.2 Utils目录中的工具类 53327.1.3 Models目录中的实体类 53527.2 完成项目的信息配置 53627.2.1 设置项目的通用属性 53627.2.2 设置应用程序的图标 53727.2.3 设置应用程序的启动图 53827.3 制作引导页 53927.3.1 下载和安装BWWalkthrough 53927.3.2 创建引导页 53927.4 制作动态标签控制器 54527.4.1 下载和安装RAMAnimatedTabBarController 54527.4.2 创建Tab Bar Controller 54627.4.3 制作Tab动画效果 54727.5 小结 549
第28章 开发笔试和随机答题功能应用 55028.1 开发笔试答题功能 55028.1.1 创建自定义视图 55128.1.2 FoldingCell的下载和安装 55428.1.3 在故事板中搭建界面 55428.1.4 创建答题页面QuestionCell 55628.1.5 创建QuizViewController 55928.2 开发随机答题功能 56228.2.1 在故事板中搭建界面 56228.2.2 创建RandomViewController 56328.3 小结 565
第29章 开发错题集和面试题功能应用 56629.1 开发错题集功能 56629.1.1 在故事板中搭建错题集界面 56729.1.2 创建FailedItemsViewController 56729.2 开发面试题功能 57029.2.1 在故事板中搭建面试题界面 57029.2.2 创建InterviewItemsViewController 57129.3 小结 574
第30章 开发App盈利模式和分享传播应用 57530.1 App的盈利模式和分享传播 57530.1.1 谷歌AdMob广告的申请和植入 57630.1.2 在故事板中搭建界面 57930.1.3 使用Alamofire获取产品列表 58030.1.4 实现In App Purchases内购功能 58230.1.5 使用ShareSDK实现App的社会化分享 58530.1.6 多种分辨率的适配 59130.2 小结 594
第31章 应用程序的打包和发布 59531.1 iOS应用商店概述 59531.1.1 App Store的重大更新 59631.1.2 在iTunes Connect配置一个App 59831.1.3 打包App为IPA文件 60031.1.4 自动化打包App 60231.1.5 上传App至App Store 60431.1.6 配置构建版本并提交审核 60531.2 小结 606
第2章 Xcode 9 IDE和iOS模拟器 272.1 Xcode 9的使用 272.1.1 工具栏的使用 282.1.2 导航器的功能介绍 292.1.3 项目导航器中的内容 292.1.4 创建一个组和Swift文件 302.1.5 在项目中搜索文件 332.1.6 代码的查找和替换 362.1.7 代码的Debug调试 362.2 iOS模拟器的使用 392.2.1 使用多种iOS模拟器 392.2.2 iOS模拟器方向的切换 402.2.3 iOS模拟器语言的切换 412.2.4 截取模拟器屏幕 412.2.5 应用程序的退出和删除 412.3 小结 42
第3章 Swift 4.0的基础知识 433.1 Swift的基本概念 433.1.1 Swift语言的特点 443.1.2 Swift常量和变量的定义 443.1.3 常量和变量的输出 453.1.4 注释 463.1.5 Playground 473.2 数据类型与运算 493.2.1 布尔类型 493.2.2 整数类型及实例属性 503.2.3 浮点类型及实例属性 503.2.4 字符和字符串 513.2.5 元组类型 543.2.6 一元、二元和三元运算符 553.2.7 比较运算符 563.3 循环语句和条件判断语句 563.3.1 for循环 563.3.2 while循环语句 583.3.3 repeat-while循环语句 583.3.4 if条件判断语句 593.3.5 switch条件判断语句 603.3.6 continue语句和fallthrough语句 603.4 数组和字典 613.4.1 数组 613.4.2 多维数组 633.4.3 数组的遍历 643.4.4 字典 653.5 小结 67
第4章 Swift 4.0的进阶内容 684.1 函数 684.1.1 函数的定义和调用 684.1.2 为参数设置默认值 694.1.3 设置可变的函数参数数量 704.1.4 函数作为参数和返回类型 714.1.5 元组作为函数的返回类型实现多个返回值 724.1.6 使用函数类型 734.1.7 函数的输入输出参数 744.1.8 函数的嵌套 744.1.9 函数的递归用法 754.1.10 常用的内置函数 764.2 枚举和结构体 784.2.1 枚举 784.2.2 结构体 814.3 类 844.3.1 类的创建 844.3.2 类属性的set和get方法 864.3.3 类属性的willSet和didSet方法 874.3.4 类的静态方法 894.3.5 类的析构 894.3.6 类的继承 904.3.7 类的延迟加载属性lazy 924.3.8 类的引用特征 934.3.9 类型检查 944.3.10 Any和AnyObject 964.4 扩展、协议和其他 974.4.1 扩展 974.4.2 协议 994.4.3 问号和感叹号 1014.5 小结 103
第5章 视图UIView和层CALayer 1045.1 视图UIView 1045.1.1 UIView概述 1045.1.2 UIView的外观属性 1065.1.3 UIView的几何属性 1105.1.4 UIView的嵌套和层次关系 1125.1.5 UIView的交互属性 1145.1.6 UIView的变形操作 1165.1.7 自定义UIView视图 1185.2 CALayer层 1225.2.1 CALayer边框 1225.2.2 CALayer投影 1235.2.3 CALayer圆角 1245.2.4 CALayer渐变 1265.3 小结 128
第6章 视图控制器UIViewController 1296.1 UIViewController视图控制器概述 1296.1.1 视图控制器与MVC 1306.1.2 创建一个视图控制器 1316.1.3 以模态方式弹出视图控制器 1346.1.4 视图控制器的生命周期 1386.1.5 视图控制器和UIScrollView 1406.2 UITabBarController 1446.2.1 创建一个UITabBarController 1446.2.2 改变UITabBarController索引 1466.2.3 在Tab图标上显示角标 1476.3 UINavigationController 1486.3.1 创建一个UINavigationController 1486.3.2 UINavigationController视图入栈和出栈 1516.3.3 导航栏和工具栏的显示和隐藏 1556.3.4 导航栏样式的修改 1556.4 导航控制器和标签控制器 1566.5 小结 159
第7章 UIKit常用控件 1607.1 UIKit框架和Foundation框架 1607.1.1 UIKit框架的结构 1617.1.2 UIKit框架和视图对象的交互 1637.2 UIButton按钮控件 1647.2.1 不同样式的UIButton按钮 1647.2.2 UIButton按钮的状态 1667.2.3 UIButton按钮的事件响应 1677.3 UILabel标签控件 1697.3.1 创建一个UILabel标签 1707.3.2 长文本标签的换行 1707.3.3 标签文字样式的自定义 1727.4 UISwitch开关控件 172 使用开关控件 1737.5 UITextField文本输入控件的使用 1747.5.1 自定义UITextField的外观和键盘 1747.5.2 响应UITextField的键盘通知 1777.6 UIAlertController 1787.6.1 创建一个警告窗口 1797.6.2 创建一个动作表单 1807.7 UIDatePicker 1827.8 UIStackView 184使用UIStackView组织视图 1847.9 小结 187
第8章 UITableView和UICollectionView 1888.1 UITableView概述 1888.1.1 UITableViewCell单元格 1898.1.2 创建一个简单的表格 1918.1.3 自定义单元格UITableViewCell 1958.1.4 自定义单元格的高度 1978.1.5 给表格添加章节和索引 2008.1.6 单元格的选择与取消选择 2038.1.7 单元格的插入和删除 2068.1.8 移动单元格的位置 2118.1.9 表格之间的嵌套 2148.2 UICollectionView概述 2218.2.1 UICollectionView的实现|原理 2228.2.2 创建一个UICollectionView对象并添加点击事件 2238.3 小结 227
第9章 触屏事件和触摸手势 2289.1 触摸事件的监测 2289.1.1 对触摸事件阶段的监测 2299.1.2 监测是否触摸到某个视图 2319.1.3 实现图像视图的拖动 2329.2 触摸手势的使用 2349.2.1 实现单点触摸手势 2359.2.2 实现双击触摸手势 2379.2.3 实现长按手势的监测 2379.2.4 捏合手势的监测 2399.3 3D Touch的使用 2419.4 小结 244
第10章 动画、声音与视频 24510.1 制作动画 24510.1.1 UIView的动画 24510.1.2 使用UIImageView播放帧动画 25110.1.3 位移关键帧动画的制作 253
10.2 音频的播放 25510.2.1 使用System Sound Services播放简短声音 25710.2.2 使用AVAudioPlayer播放音乐 25810.3 视频的播放 26110.3.1 使用AVPlayer播放影片 26210.3.2 实现影片的画中画功能 26310.4 小结 266
第11章 网络请求和Alamofire 26711.1 网络请求 26711.1.1 GET和POST请求 26711.1.2 同步请求和异步请求 26811.1.3 使用URLSession进行网络请求 26811.1.4 使用URLSession下载图片并显示进度 27011.2 Alamofire的使用 27311.2.1 Alamofire的安装 27411.2.2 使用Alamofire进行GET和POST请求 27511.2.3 使用Alamofire上传图片 27711.2.4 使用AlamofireImage缓存图像 27811.2.5 使用AlamofireObjectMapper将JSON数据映射为对象 28111.3 小结 283
第12章 UIWebView与HTML 5技术 28412.1 UIWebView的使用 28412.1.1 使用UIWebView加载网页 28512.1.2 使用UIWebView加载HTML字符串和GIF动画 28712.1.3 使用UIWebView加载本地网页 28912.1.4 使用JavaScript回调原生程序 29312.2 创建一个简单的笔记本 29612.2.1 创建一个可编辑的div 29612.2.2 设置网页的CSS样式 29612.2.3 添加插入笔记图片的方法 29712.2.4 添加删除图片和获得笔记的方法 29912.2.5 实现笔记本的用户界面 29912.3 小结 302
第13章 数据的持久化 30313.1 解析plist文件 30313.1.1 创建和解析plist文件 30413.1.2 将信息写入plist文件 30613.2 使用CoreData进行数据的持久化 30813.2.1 创建Core Data实体并插入数据 30913.2.2 检索Core Data中的数据 31213.2.3 修改和删除Core Data数据 31313.3 小结 316
第14章 多线程技术 31714.1 多线程的概念 31714.1.1 任务、进程和线程 31814.1.2 线程的Stack Space 31814.1.3 线程的优先级 31814.1.4 线程的生命周期 31914.1.5 线程和RunLoop 31914.2 使用Thread 32014.2.1 创建Thread下载图片 32014.2.2 给Thread加锁使线程同步 32214.3 Operation技术的使用 32514.4 Grand Central Dispatch的使用 32814.4.1 使用GCD查询IP地址信息 32914.4.2 DispatchGroup调度组的使用 33114.5 小结 333
第15章 MapKit地图 33415.1 MapKit的概念 33415.1.1 MKMapView的显示区域 33515.1.2 MKMapView的跟踪和定位 33615.1.3 MKMapView的交互选项和装饰物 33615.1.4 创建一个MKMapView地图 33715.1.5 MKMapView代理的使用 33915.1.6 自定义annotationView和calloutView 34115.1.7 Camera的使用 34415.2 小结 346
第16章 iOS的图文混排技术 34716.1 Core Text的使用 34716.1.1 文字排版方面的一些基本概念 34816.1.2 列出设备中的所有字体 35016.1.3 富文本的创建 35116.1.4 图文混排的实现 35316.2 Text Kit的使用 35816.2.1 使用Text Kit对文字进行分栏 35816.2.2 使用Text Kit制作图文混排效果 36016.3 小结 362
第17章 iOS的图像和视频处理技术 36317.1 Core Image概述 36317.1.1 使用Core Image的三个类制作单色调效果 36417.1.2 使用Core Image给图片添加马赛克 36617.1.3 使用Core Image处理视频画面 36717.1.4 输出Core Image的所有滤镜 37217.1.5 使用CIDetector和CIFeature进行人脸检测 37317.2 UIBlurEffect和CGBlendMode 37517.2.1 使用UIBlurEffect实现毛玻璃效果 37517.2.2 使用CGBlendMode实现颜色混合效果 37617.3 小结 378
第18章 iOS常用设备的使用 37918.1 照片和相机的使用 37918.1.1 读取照片中的图片 38018.1.2 调用相机拍摄照片 38418.2 定位设备的使用 38518.2.1 使用定位设备获取设备地理位置 38618.2.2 将地理坐标转换为实际地名 38918.3 陀螺仪和加速计设备的使用 39118.3.1 陀螺仪的原理和应用 39118.3.2 加速计的原理和应用 39218.3.3 检测iOS设备的晃动 39218.4 小结 394
第19章 使用Storyboard开发用户界面 39519.1 Storyboard概述 39519.1.1 Storyboard的优缺点 39619.1.2 Storyboard的组织形式 39719.1.3 创建一个Storyboard 39819.1.4 更改Storyboard的初始视图控制器 40019.2 在Storyboard中使用标准控件 40119.2.1 添加三个控件 40119.2.2 对控件进行连接 40319.3 在Storyboard中使用表格控件 40619.3.1 在Storyboard中添加Table View 40619.3.2 添加Table View Cell 40619.3.3 设置Table View的数据源 40819.3.4 修改ViewController.swift文件 40919.4 在Storyboard中使用集合控件 41019.4.1 添加Collection View 41019.4.2 设置Collection View Cell 41019.4.3 设置Collection View的数据源和代理 41219.4.4 修改ViewController.swift文件 41319.5 Storyboard常见的层次结构 41419.6 Storyboard之间的页面跳转和参数传递 41819.6.1 单个Storyboard中页面之间的参数传递 41819.6.2 多个Storyboard中的页面跳转及参数传递 42119.7 使用约束功能适配多分辨率 42619.7.1 打开并运行示例项目 42719.7.2 给父视图MainView添加约束 42819.7.3 给三条分隔线添加约束 43019.7.4 给两个小箭头添加约束 43219.7.5 给“添加新的会员”按钮添加约束 43419.7.6 给图标添加约束 43519.8 小结 437
第20章 单元测试和界面测试 43820.1 单元测试概述 43820.1.1 Xocde的XCTest框架 43920.1.2 对自定义类的方法进行单元测试 44220.1.3 使用XCTest框架进行性能测试 44520.2 UI Testing界面测试 44620.2.1 往项目中插入UI Testing 44620.2.2 制作UI测试的程序 44820.2.3 录制UI Testing的步骤 45020.2.4 播放UI Testing的录制步骤 45020.3 小结 451
第21章 iOS应用内存泄漏的检测 45221.1 Allocations工具的使用 45221.2 Leaks工具的使用 45921.3 小结 462
第22章 iOS应用程序的本地化 46322.1 应用程序的本地化 46322.1.1 应用程序名称的本地化 46422.1.2 应用程序文字内容的本地化 46822.1.3 Storyboard的本地化 47222.1.4 图片素材的本地化 47422.2 小结 477
第23章 加密与安全 47823.1 加密与安全 47823.1.1 对称加密和非对称加密 47923.1.2 3DES加密 47923.1.3 SHA1加密 48523.1.4 MD5加密 48723.1.5 越狱情况的判断 48923.2 小结 491
第24章 iOS 11新增开发功能 49224.1 Assets.xcassets的新特性 49224.1.1 在Assets.xcassets中添加Color Set 49324.1.2 在Assets.xcassets中添加矢量图片 49524.2 UIPasteConfiguration和Drag and Drop 49624.2.1 实现Drag to paste text功能 49724.2.2 实现拖放粘贴图片功能 49924.3 UISwipeActionsConfiguration的使用 50224.4 ARKit增强现实框架 50524.4.1 什么是AR增强现实 50624.4.2 基于ARKit的应用程序 50624.4.3 创建一个ARKit项目 50724.5 CoreML机器学习框架 51124.6 小结 515
第25章 在iTunes Connect上创建App 51625.1 创建一款新App 51625.1.1 登录iTunes Connect并创建App 51725.1.2 创建In-App Purchase内购项目 51925.1.3 为IAP内购添加沙箱技术测试账号 52125.2 小结 522
第26章 版本控制和开源类库安装 52326.1 将项目添加到GitHub 52326.1.1 Git和GitHub 52326.1.2 创建一个GitHub账号 52426.1.3 将新建项目上传到GitHub 52526.2 使用CocoaPods安装第三方类库 52826.2.1 安装CocoaPods 52826.2.2 安装第三方开源类库 52926.3 小结 531
第27章 App项目结构的搭建 53227.1 项目目录结构的创建 53227.1.1 创建New Group新组 53227.1.2 Utils目录中的工具类 53327.1.3 Models目录中的实体类 53527.2 完成项目的信息配置 53627.2.1 设置项目的通用属性 53627.2.2 设置应用程序的图标 53727.2.3 设置应用程序的启动图 53827.3 制作引导页 53927.3.1 下载和安装BWWalkthrough 53927.3.2 创建引导页 53927.4 制作动态标签控制器 54527.4.1 下载和安装RAMAnimatedTabBarController 54527.4.2 创建Tab Bar Controller 54627.4.3 制作Tab动画效果 54727.5 小结 549
第28章 开发笔试和随机答题功能应用 55028.1 开发笔试答题功能 55028.1.1 创建自定义视图 55128.1.2 FoldingCell的下载和安装 55428.1.3 在故事板中搭建界面 55428.1.4 创建答题页面QuestionCell 55628.1.5 创建QuizViewController 55928.2 开发随机答题功能 56228.2.1 在故事板中搭建界面 56228.2.2 创建RandomViewController 56328.3 小结 565
第29章 开发错题集和面试题功能应用 56629.1 开发错题集功能 56629.1.1 在故事板中搭建错题集界面 56729.1.2 创建FailedItemsViewController 56729.2 开发面试题功能 57029.2.1 在故事板中搭建面试题界面 57029.2.2 创建InterviewItemsViewController 57129.3 小结 574
第30章 开发App盈利模式和分享传播应用 57530.1 App的盈利模式和分享传播 57530.1.1 谷歌AdMob广告的申请和植入 57630.1.2 在故事板中搭建界面 57930.1.3 使用Alamofire获取产品列表 58030.1.4 实现In App Purchases内购功能 58230.1.5 使用ShareSDK实现App的社会化分享 58530.1.6 多种分辨率的适配 59130.2 小结 594
第31章 应用程序的打包和发布 59531.1 iOS应用商店概述 59531.1.1 App Store的重大更新 59631.1.2 在iTunes Connect配置一个App 59831.1.3 打包App为IPA文件 60031.1.4 自动化打包App 60231.1.5 上传App至App Store 60431.1.6 配置构建版本并提交审核 60531.2 小结 606
前 言
前 言编写本书的目的2011年9月,我次接触了macOS平台,并且学习了Xcode工具和Objective-C语言。当时市面上的学习资料比较少,所以学习iOS开发时,即便是对于我这个曾经从事过3年PHP编程和4年J2EE开发的程序员来说,也是比较吃力的事情。而对于现在的读者来说,几乎有数十种iOS入门的教程可供选择。不过令人感到困惑的是,还没有一本书籍能够作为初学者向更高阶内容前进的桥梁。本书针对没有任何iOS应用程序开发基础的开发者,从基本的iOS程序语言Swift 4.0开始介绍,接着对苹果公司提供的API开发框架Cocoa Touch的原理进行分类和详细讲解,进而对iOS的技术进行梳理和讲解。后结合实际的案例整合出一款符合MVC设计模式并包含大量实用iOS开发技能的商业App,让读者能够成为在iOS 应用开发领域中驰骋的高手。iOS系统已经陪伴我们走到了第11个年头,iPhone、iPod Touch、iPad这些搭载着iOS系统的设备,以其丰富的功能和出色的用户体验改变了我们日常的生活、工作和娱乐方式。当全世界都在赞叹苹果的iOS时,iOS开发的就业大门也面向全世界打开了。随着移动互联网渐入佳境,越来越多的组织和个人开始进入移动互联网领域。在这个充满机会的移动互联时代,赶快加入iOS App的开发行列吧!本书主要内容本书内容全面,几乎涵盖了iOS 11应用开发所需要的内容,全书内容言简意赅,讲解方法通俗易懂,特别适合初学者学习使用。本书内容共分三篇,篇为基础篇,主要介绍了iOS开发的基础知识,包括iOS系统的历史、Swift 4.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等;第二篇为进阶篇,主要介绍了Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、CoreML机器学习、ARKit增强现实、自动化测试、性能分析、本地化、加密与安全等实用技术;第三篇为实例篇,通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并终创建一个成熟的商业项目。本书采用丰富的实例、直观的代码展示向读者形象地讲解了在创建一款优秀的iOS应用程序时所需要的大部分技巧,帮助读者轻松掌握并高效开发iOS程序。本书特点内容全面:包含Swift 4.0语言、Cocoa Touch、视图控制器、控件、表格、网络、地图、音频、视频、动画、触摸、手势、故事板、CoreData、性能测试、机器学习、增强现实、加密和解密等众多功能模块。这些内容是iOS开发必知必会的内容,需要读者重点掌握。由浅入深:内容按照原理讲解、实现过程、代码解析的编排顺序讲解,使读者朋友更容易掌握知识点。同时对重点代码做了大量的注释和讲解,以便于读者更加轻松地学习。代码精简:为了在有限的篇幅内讲解更多的实用功能,在本书中只给出了每个实例的核心代码及分析结构性代码,保留关键代码和核心代码,以节省篇幅,让本书更超值。原理图解:为复杂的原理讲解配有生动、详细的图例,以帮助读者轻松理解相关概念。重点讲解:对每个实例的核心功能都给予了专门讲解,以便于读者更好地掌握。书中的实例完全适用于全新的iOS 11开发平台,同时也兼容iOS 10等旧的开发平台。读者对象通过对本书的学习,读者可以基本建立起iOS 11技术的思想框架,并且对iOS 11开发的过程有一个全面的了解。因此,本书适合iOS开发初学者、iOS程序员、iPhone开发人员、iPad开发人员学习,同时也可以作为相关培训机构和大专院校相关专业的教学用书。练习素材和视频教程为方便读者学习,本书提供了练习素材和视频教程,具体使用方法如下:本书源代码中的文件夹名称,如17.1.3CoreTextProject_RichText,名称的前三个数字表示第17章的第1节的第3个示例项目的源代码。CoreTextProject表示当前为CoreText相关的示例项目,而RichText为示例项目的名称,所有代码均可直接使用Xcode开发工具运行(我会根据读者的意见反馈,随时更新位于此地址的源代码)。同时,相比本书版,第二版提供了更多、更实用、更精彩的配套视频教程,包含Xcode 9、Swift 4和iOS开发热门开源项目的分析与 讲解。本书中大部分示例可以在Xcode 9的iOS模拟器中运行。部分示例如相机、定位设备的使用需要连接真机进行测试。此时,你需要一个苹果开发者账户来访问大部分工具和文档,并且需要一个开发人员许可证来在真机上运行应用程序,对此请参考第1章的内容进行账号的注册和设置。勘误和支持书中所有章节的内容和源代码都根据Swift 4.0和iOS 11.0版本进行了更新。如果你遇到有关兼容性的问题请联系我,我会发布更新并进行修改。如果你对本书的内容有任何建议,或者发现了本书的一些错误,希望尽快联系我,这将对本书的后续版本有很大的帮助。我非常愿意听取任何能使本书变得更加完善的建议,并会不断致力于让本书更加完美。如果你有关于本书的任何评论或者疑问,请访问微信公众号coolketang联系我。致谢首先衷心地感谢清华大学出版社的王金柱老师及各位编辑对本书的编写给予的帮助和 关注。感谢酷课堂iOS移动开发交流群的小伙伴、广大读者朋友们及时提出的各种反馈建议。感谢好友兼版合著者王亮,以及冉玉玲、李爱民、谢美仙、李晓飞、朱小娟、李红梅、翟海岗、金善众、蔡银珠、金依灵、郑大翰、戴永威等人在写作过程中给予的支持和鼓励!感谢我的爱人金兵兵女士耐心地帮助校对书稿,提出改进意见,感谢大儿子李金诚、小女儿李开颜带给我新的见解和创意,愿你们健康快乐成长,用自己的努力去实现人生的一个个梦想!后,感谢这个时代给予每位有理想的人实现人生价值的机会!
编 者 2018年7月1日
评论
还没有评论。