目 录
第1章 开发准备 1
1.1 iOS移动开发现状 2
1.1.1 iOS的历史 2
1.1.2 iOS 10的十大变化 4
1.1.3 iOS应用开发的八个特点 5
1.2 iOS 10的新功能 5
1.2.1 SiriKit 6
1.2.2 Proactive Suggestions
(预建议) 6
1.2.3 Integrating with the Messages
App 7
1.2.4 User Notifications 7<p>目 录</p> <p> </p> <p>第1章 开发准备 1</p> <p>1.1 iOS移动开发现状 2</p> <p>1.1.1 iOS的历史 2</p> <p>1.1.2 iOS 10的十大变化 4</p> <p>1.1.3 iOS应用开发的八个特点 5</p> <p>1.2 iOS 10的新功能 5</p> <p>1.2.1 SiriKit 6</p> <p>1.2.2 Proactive Suggestions</p> <p>(预建议) 6</p> <p>1.2.3 Integrating with the Messages </p> <p>App 7</p> <p>1.2.4 User Notifications 7</p> <p>1.2.5 Speech Recognition 8</p> <p>1.2.6 Wide Color 9</p> <p>1.2.7 Adapting to the True Tone </p> <p>Display 9</p> <p>1.2.8 Widget Enhancements 9</p> <p>1.2.9 Security and Privacy </p> <p>Enhancements 9</p> <p>1.3 成为一名iOS*** 11</p> <p>1.3.1 硬件上的需求 11</p> <p>1.3.2 加入Apple***计划 11</p> <p>1.3.3 下载安装Xcode和模拟器 13</p> <p>1.3.4 创建开发和发布配置文件Provisioning Profile 14</p> <p>1.4 创建一个基本的iOS项目 17</p> <p>1.4.1 项目的创建 17</p> <p>1.4.2 设置项目的信息 19</p> <p>1.4.3 设置应用的Icon图标 19</p> <p>1.4.4 设置应用的Launch图片 20</p> <p>1.4.5 编译并运行项目 22</p> <p>1.5 iOS应用的生命周期 23</p> <p>1.5.1 iOS应用程序的状态 24</p> <p>1.5.2 演示iOS应用程序的各种</p> <p>状态 25</p> <p>1.6 小结 26</p> <p>第2章 Xcode 8 IDE和iOS模拟器 27</p> <p>2.1 Xcode 8的使用 28</p> <p>2.1.1 工具栏的使用 28</p> <p>2.1.2 导航器的功能介绍 29</p> <p>2.1.3 项目导航器中的内容 30</p> <p>2.1.4 创建一个组和Swift文件 30</p> <p>2.1.5 在项目中搜索文件 33</p> <p>2.1.6 代码的查找和替换 36</p> <p>2.1.7 代码的Debug调试 36</p> <p>2.2 iOS模拟器的使用 39</p> <p>2.2.1 使用多种iOS模拟器 39</p> <p>2.2.2 iOS模拟器方向的切换 40</p> <p>2.2.3 iOS模拟器语言的切换 40</p> <p>2.2.4 截取模拟器屏幕 41</p> <p>2.2.5 应用程序的退出和删除 41</p> <p>2.3 小结 42</p> <p>第3章 Swift 3.0的基础知识 43</p> <p>3.1 Swift的基本概念 44</p> <p>3.1.1 Swift语言的特点 44</p> <p>3.1.2 Swift常量和变量的定义 45</p> <p>3.1.3 常量和变量的输出 46</p> <p>3.1.4 注释 47</p> <p>3.1.5 Playground 47</p> <p>3.2 数据类型与运算 49</p> <p>3.2.1 布尔类型 49</p> <p>3.2.2 Int类型及实例属性 50</p> <p>3.2.3 浮点类型及实例属性 51</p> <p>3.2.4 字符和字符串 51</p> <p>3.2.5 元组类型 54</p> <p>3.2.6 一元、二元和三元运算符 55</p> <p>3.2.7 比较运算符 56</p> <p>3.3 循环语句和条件判断语句 57</p> <p>3.3.1 for循环 57</p> <p>3.3.2 while循环语句 58</p> <p>3.3.3 repeat-while循环语句 59</p> <p>3.3.4 if条件判断语句 60</p> <p>3.3.5 switch条件判断语句 60</p> <p>3.3.6 continue语句和forthrough</p> <p>语句 61</p> <p>3.4 数组和字典 62</p> <p>3.4.1 数组 62</p> <p>3.4.2 多维数组 64</p> <p>3.4.3 数组的遍历 65</p> <p>3.4.4 字典 66</p> <p>3.5 小结 68</p> <p>��4章 Swift 3.0的进阶内容 69</p> <p>4.1 函数 70</p> <p>4.1.1 函数的定义和调用 70</p> <p>4.1.2 为参数设置默认值 71</p> <p>4.1.3 设置可变的函数参数数量 71</p> <p>4.1.4 函数作为参数和返回类型 72</p> <p>4.1.5 元组作为函数的返回类型,</p> <p>实现多个返回值 74</p> <p>4.1.6 使用函数类型 74</p> <p>4.1.7 函数的输入输出参数 75</p> <p>4.1.8 函数的嵌套 76</p> <p>4.1.9 函数的递归用法 76</p> <p>4.1.10 常用的内置函数 77</p> <p>4.2 枚举和结构体 79</p> <p>4.2.1 枚举 79</p> <p>4.2.2 结构体 83</p> <p>4.3 类 85</p> <p>4.3.1 类的创建 85</p> <p>4.3.2 类属性的set和get方法 88</p> <p>4.3.3 类属性的willSet和didSet</p> <p>方法 89</p> <p>4.3.4 类的静态方法 90</p> <p>4.3.5 类的析构 91</p> <p>4.3.6 类的继承 92</p> <p>4.3.7 类的延迟加载属性lazy 93</p> <p>4.3.8 类的引用特征 95</p> <p>4.3.9 类型检查 95</p> <p>4.3.10 Any和Anyobject 98</p> <p>4.4 扩展、协议和其他 99</p> <p>4.4.1 扩展 99</p> <p>4.4.2 协议 101</p> <p>4.4.3 问号?和感叹号! 103</p> <p>4.5 小结 105</p> <p>第5章 视图UIView和层CALayer 106</p> <p>5.1 视图UIView 107</p> <p>5.1.1 UIView概述 107</p> <p>5.1.2 UIView的外观属性 109</p> <p>5.1.3 UIView的几何属性 112</p> <p>5.1.4 UIView的嵌套和层次关系 114</p> <p>5.1.5 UIView的交互属性 116</p> <p>5.1.6 UIView的变形操作 118</p> <p>5.1.7 自定义UIView视图 120</p> <p>5.2 CALayer层 124</p> <p>5.2.1 CALayer边框 124</p> <p>5.2.2 CALayer阴影 125</p> <p>5.2.3 CALayer圆角 126</p> <p>5.2.4 CALayer渐变 127</p> <p>5.3 小结 129</p> <p>第6章 视图控制器UIViewController 130</p> <p>6.1 UIViewController视图控制器概述 131</p> <p>6.1.1 视图控制器与MVC 131</p> <p>6.1.2 创建一个视图控制器 132</p> <p>6.1.3 以模态方式弹出视图控制器 136</p> <p>6.1.4 视图控制器的生命周期 139</p> <p>6.1.5 视图控制器和UIScrollView 141</p> <p> </p> <p>6.2 UITabBarController 145</p> <p>6.2.1 创建一个UITabBarController 145</p> <p>6.2.2 改变Tab bar的位置 147</p> <p>6.2.3 改变UITabBarController</p> <p>索引 149</p> <p>6.2.4 在Tab图标上显示角标 149</p> <p>6.3 UINavigationController 150</p> <p>6.3.1 创建一个UINavigationController</p> <p> 151</p> <p>6.3.2 UINavigationController视图</p> <p>入栈和出栈 153</p> <p>6.3.3 导航栏和工具栏的显示和</p> <p>隐藏 157</p> <p>6.3.4 导航栏样式的修改 157</p> <p>6.4 导航控制器和标签控制器 158</p> <p>6.5 小结 161</p> <p>第7章 常用经典控件 162</p> <p>7.1 控件概述 163</p> <p>7.1.1 何为Target-Action机制 163</p> <p>7.1.2 UIControl类的方法和属性 165</p> <p>7.1.3 让我们一起动手来实现一个UIControl吧 167</p> <p>7.2 UIButton的概述 168</p> <p>7.3 UILabel文本视图 171</p> <p>7.3.1 UILabel的创建和文案显示 172</p> <p>7.3.2 UILabel处理过长的文案 173</p> <p>7.3.3 UILabel的阴影 174</p> <p>7.4 UISwitch开关视图 175</p> <p>7.4.1 UISwitch的创建 175</p> <p>7.4.2 UISwitch的开关使用 176</p> <p>7.5 UIRefreshControl 刷新控件 176</p> <p>7.6 UITextField文本框控件 178</p> <p>7.6.1 UITextField的创建和基本</p> <p>应用 179</p> <p>7.6.2 UITextField的背景图 180</p> <p> </p> <p> </p> <p>7.6.3 UITextField的浮动视图(Overlay view) 181</p> <p>7.6.4 UITextField的代理UITextFieldDelegate 183</p> <p>7.7 小结 185</p> <p>第8章 UITableView和UICollectionView</p> <p> 186</p> <p>8.1 UITableView概述 187</p> <p>8.1.1 UITableViewCell单元格 187</p> <p>8.1.2 创建一个简单的表格 189</p> <p>8.1.3 自定义单元格UITableViewCell</p> <p> 193</p> <p>8.1.4 自定义单元格的高度 196</p> <p>8.1.5 给表格添加章节和索引 198</p> <p>8.1.6 单元格的选择与取消选择 201</p> <p>8.1.7 单元格的插入和删除 204</p> <p>8.1.8 移动单元格的位置 209</p> <p>8.1.9 表格之间的嵌套 213</p> <p>8.2 UICollectionView概述 219</p> <p>8.2.1 UICollectionView的实现</p> <p>原理 220</p> <p>8.2.2 创建一个 UICollectionView对象并添加点击事件 221</p> <p>8.3 小结 225</p> <p>第9章 触屏事件和触摸手势 226</p> <p>9.1 触摸事件的监测 227</p> <p>9.1.1 对触摸事件阶段的监测 227</p> <p>9.1.2 监测是否触摸到某个视图 229</p> <p>9.1.3 实现图像视图的拖动 231</p> <p>9.2 触摸手势的使用 232</p> <p>9.2.1 实现单点触摸手势 233</p> <p>9.2.2 实现双击触摸手势 235</p> <p>9.2.3 实现长按手势的监测 236</p> <p>9.2.4 捏合手势的监测 238</p> <p>9.3 3D Touch的使用 239</p> <p>9.4 小结 242</p> <p>第10章 动画、声音与视频 243</p> <p>10.1 制作动画 244</p> <p>10.1.1 UIView的动画 244</p> <p>10.1.2 使用UIImageView播放帧</p> <p>动画 249</p> <p>10.1.3 位移关键帧动画的制作 251</p> <p>10.2 音频的播放 254</p> <p>10.2.1 使用System Sound Services</p> <p>播放简短声音 255</p> <p>10.2.2 使用AVAudioPlayer播放</p> <p>音乐 256</p> <p>10.3 视频的播放 260</p> <p>10.3.1 使用AVPlayer播放影片 260</p> <p>10.3.2 实现影片的画中画功能 262</p> <p>10.4 小结 265</p> <p>第11章 Alamofire网络请求框架 266</p> <p>11.1 Alamofire的前世今生 267</p> <p>11.1.1 Alamofire的手动集成 267</p> <p>11.1.2 Alamofire的网络是否联通和</p> <p>连接方式 269</p> <p>11.1.3 Alamofire的GET和POST</p> <p>请求 272</p> <p>11.1.4 Alamofire的文件上传及</p> <p>进度显示 274</p> <p>11.1.5 Alamofire的文件下载及</p> <p>进度显示 278</p> <p>11.2 小结 279</p> <p>第12章 UIWebView与HTML 5技术 280</p> <p>12.1 UIWebView的使用 281</p> <p>12.1.1 使用UIWebView加载网页 281</p> <p>12.1.2 使用UIWebView加载HTML</p> <p>字符串和GIF动画 283</p> <p>12.1.3 使用UIWebView加载本地</p> <p>网页 286</p> <p>12.1.4 使用Javascript回调原生</p> <p>程序 289</p> <p>12.2 创建一个简单的笔记本 292</p> <p>12.2.1 创建一个可编辑的div 292</p> <p>12.2.2 设置网页的CSS样式 293</p> <p>12.2.3 添加插入笔记图片的方法 294</p> <p>12.2.4 添加删除图片和获得笔记的</p> <p>方法 295</p> <p>12.2.5 实现笔记本的用户界面 296</p> <p>12.3 小结 298</p> <p>第13章 数据的持久化 299</p> <p>13.1 解析plist文件 300</p> <p>13.1.1 创建和解析plist文件 300</p> <p>13.1.2 将信息写入plist文件 303</p> <p>13.2 使用CoreData进行数据的持久化 304</p> <p>13.2.1 创建Core Data实体并插入</p> <p>数据 306</p> <p>13.2.2 检索Core Data中的数据 308</p> <p>13.2.3 修改和删除Core Data数据 310</p> <p>13.3 小结 312</p> <p>第14章 多线程技术 313</p> <p>14.1 多线程的概念 314</p> <p>14.1.1 任务、进程和线程 314</p> <p>14.1.2 线程的Stack space 315</p> <p>14.1.3 线程的优先级 315</p> <p>14.1.4 线程的生命周期 315</p> <p>14.1.5 线程和Run loop 316</p> <p>14.2 使用Thread 316</p> <p>14.2.1 创建Thread下载图片 317</p> <p>14.2.2 给Thread加锁使线程同步 319</p> <p>14.3 Operation技术的使用 322</p> <p>14.4 Grand Central Dispatch的使用 325</p> <p>14.4.1 使用GCD查询IP地址</p> <p>信息 326</p> <p>14.4.2 DispatchGroup调度组的</p> <p>使用 328</p> <p>14.5 小结 329</p> <p>第15章 MapKit地图 330</p> <p>15.1 Map Kit的概念 331</p> <p>15.1.1 MKMapView的显示区域 331</p> <p>15.1.2 MKMapView的跟踪和</p> <p>定位 332</p> <p>15.1.3 MKMapView的交互选项和</p> <p>装饰物 333</p> <p>15.1.4 创建一个MKMapView</p> <p>地图 333</p> <p>15.1.5 MKMapView代理的使用 335</p> <p>15.1.6 自定义annotationView和</p> <p>calloutView 337</p> <p>15.1.7 Camera相机的使用 341</p> <p>15.2 小结 342</p> <p>第16章 iOS的图文混排技术 343</p> <p>16.1 Core Text的使用 344</p> <p>16.1.1 文字排版方面的一些基本</p> <p>概念 344</p> <p>16.1.2 列出设备中的所有字体 346</p> <p>16.1.3 富文本的创建 347</p> <p>16.1.4 图文混排的实现 350</p> <p>16.2 Text Kit的使用 354</p> <p>16.2.1 使用Text Kit对文字进行</p> <p>分栏 354</p> <p>16.2.2 使用Text Kit制作图文混排</p> <p>效果 357</p> <p>16.3 小结 359</p> <p>第17章 iOS的图像和视频处理技术 360</p> <p>17.1 Core Image概述 361</p> <p>17.1.1 使用Core Image的三个类</p> <p>制作单色调效果 362</p> <p>17.1.2 使用Core Image给图片添加</p> <p>马赛克 363</p> <p>17.1.3 使用Core Image处理视频</p> <p>画面 364</p> <p>17.1.4 输出Core Image的所有</p> <p>滤镜 369</p> <p>17.1.5 使用CIDetector和CIFeature</p> <p>进行人脸检测 370</p> <p>17.2 UIBlurEffect和CGBlendMode 372</p> <p>17.2.1 使用UIBlurEffect实现毛玻璃</p> <p>效果 372</p> <p>17.2.2 使用CGBlendMode实现颜色</p> <p>混合效果 373</p> <p>17.3 小结 376</p> <p>第18章 iOS常用设备的使用 377</p> <p>18.1 Photos和Camera的使用 378</p> <p>18.1.1 读取Photos中的图片 378</p> <p>18.1.2 调用相机拍摄照片 382</p> <p>18.2 定位设备的使用 384</p> <p>18.2.1 使用定位设备获取设备地理</p> <p>位置 385</p> <p>18.2.2 将地理坐标转换为实际</p> <p>地名 388</p> <p>18.3 陀螺仪和加速计设备的使用 390</p> <p>18.3.1 陀螺仪的原理和应用 390</p> <p>18.3.2 加速计的原理和应用 390</p> <p>18.3.3 检测iOS设备的晃动 391</p> <p>18.4 小结 393</p> <p>第19章 Storyboard故事板的使用 394</p> <p>19.1 Storyboard概述 395</p> <p>19.1.1 Storyboard的优缺点 395</p> <p>19.1.2 故事板的组织形式 396</p> <p>19.1.3 创建一个Storyboard 397</p> <p>19.1.4 更改故事板的初始视图</p> <p>控制器 398</p> <p>19.2 在Storyboard中使用标准控件 400</p> <p>19.2.1 添加三个控件 400</p> <p>19.2.2 对控件进行连接 402</p> <p>19.3 在Storyboard中使用表格控件 405</p> <p>19.3.1 在故事板中添加Table View 405</p> <p>19.3.2 添加Table View Cell 405</p> <p>19.3.3 设置Table View的数据源 407</p> <p>19.3.4 修改ViewController.swift</p> <p>文件 408</p> <p>19.4 在Storyboard中使用集合控件 409</p> <p>19.4.1 添加Collection View 409</p> <p>19.4.2 设置Collection View Cell 409</p> <p>19.4.3 设置Collection View的数据源</p> <p>和代理 411</p> <p>19.4.4 修改ViewController.swift</p> <p>文件 412</p> <p>19.5 Storyboard常见的层次结构 413</p> <p>19.6 Storyboard之间的页面跳转和参数</p> <p>传递 417</p> <p>19.6.1 单个Storyboard中页面间的</p> <p>参数传递 417</p> <p>19.6.2 多个Storyboard中的页面跳转</p> <p>及参数传递 420</p> <p>19.7 使用约束功能适配多分辨率 424</p> <p>19.7.1 打开并运行示例项目 424</p> <p>19.7.2 给父视图MainView添加</p> <p>约束 426</p> <p>19.7.3 给三个分隔线添加约束 428</p> <p>19.7.4 给两个小箭头添加约束 429</p> <p>19.7.5 给添加新会员按钮添加</p> <p>约束 431</p> <p>19.7.6 给无数据图标添加约束 432</p> <p>19.8 小结 433</p> <p>第20章 界面测试和自动化测试 434</p> <p>20.1 单元测试概述 435</p> <p>20.1.1 Xocde的XCTest框架 435</p> <p>20.1.2 对其他类的方法进行单元</p> <p>测试 438</p> <p>20.1.3 使用XCTest框架进行性能</p> <p>测试 441</p> <p>20.2 UI Testing界面测试 442</p> <p>20.2.1 往项目中插入UI Testing 443</p> <p>20.2.2 制作UI测试的程序 444</p> <p>20.2.3 录制UI Testing步骤 446</p> <p>20.2.4 播放UI Testing的录制</p> <p>步骤 446</p> <p>20.3 使用UIAutomation进行自动化</p> <p>测试 447</p> <p>20.3.1 使用UIAutomation录制</p> <p>自动化测试代码 447</p> <p>20.3.2 测试脚本的保存和加载 449</p> <p>20.4 小结 449</p> <p>第21章 iOS应用程序内存泄露的检测 451</p> <p>21.1 Allocations工具的使用 452</p> <p>21.2 Leaks工具的使用 458</p> <p>21.3 小结 461</p> <p>第22章 iOS应用程序的本地化 462</p> <p>22.1 应用程序的本地化 463</p> <p>22.1.1 应用程序名称的本地化 463</p> <p>22.1.2 应用程序文字内容的本</p> <p>地化 468</p> <p>22.1.3 Storyboard的本地化 471</p> <p>22.1.4 图片素材的本地化 474</p> <p>22.2 小结 477</p> <p>第23章 加密与** 478</p> <p>23.1 加密与** 479</p> <p>23.1.1 对称加密和非对称加密 479</p> <p>23.1.2 3DES加密 480</p> <p>23.1.3 SHA1加密 485</p> <p>23.1.4 MD5加密 487</p> <p>23.1.5 越狱情况的判断 490</p> <p>23.2 小结 492</p> <p>第24章 开源框架CocoaPods 493</p> <p>24.1 CocoaPods、SPM和Carthage简介 494</p> <p>24.1.1 为什么使用CocoaPods 494</p> <p>24.1.2 CocoaPods的安装及淘宝的</p> <p>镜像使用 495</p> <p>24.1.3 Podspec的镜像使用 496</p> <p>24.1.4 CocoaPods的实践 497</p> <p>24.1.5 pod install 和 pod update 的</p> <p>使用 497</p> <p>24.1.6 CocoaPods 的卸载 498</p> <p>24.2 CocoaPods-app的使用 498</p> <p>24.2.1 为新项目加入CocoaPods 499</p> <p>24.2.2 对Podfile的pod install和pod update 500</p> <p>24.2.3 删除工程中的CocoaPods 501</p> <p>24.2.4 安装命令行 502</p> <p>24.3 小结 502</p> <p>第25章 Git版本控制及GitHub社会化</p> <p>编程实践 503</p> <p>25.1 Git前奏曲 504</p> <p>25.1.1 什么是版本控制 504</p> <p>25.1.2 版本控制简史 504</p> <p>25.1.3 Git原理 506</p> <p>25.1.4 Git的安装、配置、别名和</p> <p>帮助 508</p> <p>25.2 Git基础曲 510</p> <p>25.2.1 创建本地仓库和关联远程</p> <p>仓库 510</p> <p>25.2.2 文件在工作区、暂存区和</p> <p>Git本地仓库中的操作 513</p> <p>25.2.3 查看提交历史 515</p> <p>25.2.4 撤销操作 515</p> <p>25.2.5 标签 516</p> <p>25.3 小结 519</p> <p>第26章 项目案例的架构搭建 520</p> <p>26.1 多人协作的工作流程 521</p> <p>26.2 技术选型 522</p> <p>26.3 MVC及工程结构 523</p> <p>26.4 UITabbarController、UINavigationController和Assets.xcassets的搭建 525</p> <p>26.4.1 UITabbarController和UINavigationController 525</p> <p>26.4.2 Assets.xcassets管理 527</p> <p>26.5 小结 529</p> <p>第27章 Model层相关框架 530</p> <p>27.1 XML、Plist、JSON数据格式 531</p> <p>27.2 开启ATS 532</p> <p>27.3 AlamofireObjectMapper 533</p> <p>27.3.1 AlamofireObjectMapper的</p> <p>安装 533</p> <p>27.3.2 AlamofireObjectMapper的</p> <p>使用 533</p> <p>27.4 ObjectMapper 535</p> <p>27.4.1 ObjectMapper的安装 535</p> <p>27.4.2 ObjectMapper中Model与</p> <p>JSON的转换 536</p> <p>27.5 Moya 536</p> <p>27.5.1 Moya的安装 537</p> <p>27.5.2 Moya的使用 537</p> <p>27.6 小结 540</p> <p>第28章 与众平台联姻 541</p> <p>28.1 ShareSDK 联合登录 542</p> <p>28.1.1 获取AppKey 542</p> <p>28.1.2 下载SDK 542</p> <p>28.1.3 快速集成 542</p> <p>28.1.4 新建Header File并建立</p> <p>桥接 543</p> <p>28.1.5 打开桥接文件(Bridging-Header.h) 544</p> <p>28.1.6 添加URL Types 546</p> <p>28.1.7 查看open.qq.com应用的</p> <p>审核进度 546</p> <p>28.2 ShareSDK分享 548</p> <p>28.2.1 增加QQ平台分享支持 548</p> <p>28.2.2 增加微信平台分享支持 548</p> <p>28.2.3 QQ和微信平台分享的代码</p> <p>实现 549</p> <p>28.3 聚合数据和LeanCloud 550</p> <p>28.3.1 聚合数据 550</p> <p>28.3.2 LeanCloud 551</p> <p>28.4 TalkingData统计 551</p> <p>28.5 小结 554</p> <p>第29章 开发SwiftNews新闻客户端</p> <p>App 555</p> <p>29.1 SwiftNews App概述 556</p> <p>29.1.1 修改App Name 556</p> <p>29.1.2 修改App ICON 557</p> <p>29.1.3 欢迎页面 558</p> <p>29.1.4 启动页面 559</p> <p>29.1.5 Debug模式下的print 561</p> <p>29.1.6 桥联SVProgressHUD 562</p> <p>29.1.7 自定义Cell 563</p> <p>29.1.8 国内和国际新闻模块 564</p> <p>29.1.9 图片加圆角和助手类 567</p> <p>29.2 小结 569</p> <p>第30章 应用程序的打包和发布 570</p> <p>30.1 iOS应用商店概述 571</p> <p>30.1.1 App Store的重大更新 571</p> <p>30.1.2 在iTunes Connect创建一个</p> <p>App 573</p> <p>30.1.3 打包App为IPA文件 576</p> <p>30.1.4 自动化打包App 577</p> <p>30.1.5 上传App至App Store 580</p> <p>30.1.6 配置构建版本并提交审核 580</p> <p>30.2 小结 582</p>显示全部信息前 言前 言编写本书的目的2011年9月,笔者**次接触了mac OS平台,并且学习了Xcode工具和Objective-C语言。当时市面上的学习资料也比较**,所以学习iOS开发即便是对于笔者这个曾经从事过三年PHP编程和四年J2EE开发的程序员来说,也是比较吃力的事情。而对于现在的读者来说,几乎有数十种iOS入门的教程可供选择。不过令人感到困惑的是,还没有一本书籍,能够作为初学者向更高阶内容前进的桥梁。本书针对没有任何苹果应用程序开发基础的***,从基本的iOS程序语言Swift 3.0开始,接着对苹果公司提供的开发API框架Cocoa touch的原理进行分类和详细讲解,进而对iOS的**技术进行梳理和讲解。*后结合实际案例,整合出一款符合MVC设计模式的商业App,让读者能够成为在iOS应用开发领域中驰骋的高手。iOS系统已陪伴我们走过了9个年头,iPhone、iPod touch、iPad这些搭载着iOS系统的设备,以其丰富的功能和出色的用户体验,改变了我们日常的生活、工作和娱乐方式。当全世界都在赞叹苹果的iOS时,iOS的就业大门也面向全世界打开了。随着移动互联网渐入佳境,越来越多的组织和个人开始进入移动互联网领域。在这个充满机会的移动互联时代,赶快加入iOS App的开发行列吧!本书主要内容本书内容全面,几乎涵盖了iOS 10应用开发所需要的主要内容,全书内容言简意赅,讲解方法通俗易懂,特别适合于初学者学习使用。本书共分三篇,**篇为基础篇,主要介绍了iOS开发基础知识,包括iOS系统的历史、Swift 3.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等。第二篇为进阶篇,主要介绍了Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、自动化测试、性能分析、本地化、加密与**等实用技术。第三篇为实例篇,通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并*终创建一个成熟的商业项目。本书采用丰富的实例,直观的代码展示,向读者形象地讲解了在创建一款**的iOS应用程序时,所需要的大部分技巧,帮助读者轻松掌握并**开发iOS程序。本书特点内容全面:包含Swift 3.0语言、Cocoa Touch、视图控制器、控件、表格、网络、地图、音频、视频、动画、触摸、手势、故事板、CoreData、性能测试、加密解密等众多功能模块。这些内容是iOS开发必知必会的内容,需要读者**掌握。由浅入深:内容按照原理讲解、实现过程、代码解析的编排顺序讲解,使读者朋友更容易掌握知识点。同时对**代码做了大量注释和讲解,以便于读者更加轻松地学习。代码精简:为了在有限的篇幅内讲解更多的实用功能,在本书中只给出了每个实例的核心代码及分析结构性代码,保留关键代码和核心代码,以节省篇幅,让本书更超值。原理图解:为复杂的原理讲解配有生动、详细的图例,以帮助读者轻松理解相关概念。**讲解:对每个实例的核心功能都给予了专门讲解,以便于读者更好地掌握。书中的实例完全适用于全新的iOS 10开发平台,同时也兼容iOS 9开发平台。读者对象通过对本书的学习,读者可以基本建立起iOS 10技术的思想框架,并且对iOS 10开发的过程有一个全面的了解。因此本书适合iOS开发初学者、iOS程序员、iPhone开发人员、iPad开发人员学习,同时也可以作为相关培训机构和大专院校相关专业的教学用书。配套光盘本书配套光盘提供了作者特别录制的有关iOS开发的相关视频课程和全书示例源代码,以方便读者掌握本书内容。源代码中的文件夹名称,如17.1.3 CoreTextProject_RichText,名称的前三个数字依次表示第17章的第1节的第3个示例项目的源代码。CoreTextProject表示当前为CoreText相关的示例项目,而RichText为示例项目的名称。本书中大部分示例可以在Xcode 8的iOS模拟器中运行。部分示例如相机、定位设备的使用,需要连接真机进行测试。此时你需要一个苹果***账户,来访问大部分工具和文档,并且需要一个开发人员许可证来在真机上运行应用程序,对此请参考第1章的内容进行账号的注册和设置。勘误和支持书中所有章节的内容和源码,都根据Swift 3.0和iOS 10.0版本进行了更新。如果你遇到有关兼容性的问题请联系我们,我们会发布更新并进行修改。如果你对本书的内容有任何建议,或者发现了本书的一些错误,希望尽快联系我们,这将对本书的后续版本有很大的帮助。我们非常愿意听取任何能使本书变得更加完善的建议,并会不断致力于让本书更加**。如果你有关于本书的任何评论或者疑问,请访问微信公众号coolketang联系我们。致谢对于本书的完成,要特别感谢王金柱编辑给予的帮助和指导。诸位编辑在检查书稿时认真细致的态度,也令人称赞,整个沟通过程非常愉快。感谢笔者的爱人在孕期依然帮助笔者校对书稿,感谢家里的老大和刚刚出生的小女儿给笔者莫大的精神支持。*后还要感谢冉玉玲、李爱民、谢美仙、李晓飞、朱娟、李红梅、金善众、蔡银珠、金依灵、郑大翰、戴永威等人在写作的过程中给予的支持和鼓励!前 言 <div>编写本书的目的2011年9月,笔者**次接触了mac OS平台,并且学习了Xcode工具和Objective-C语言。当时市面上的学习资料也比较**,所以学习iOS开发即便是对于笔者这个曾经从事过三年PHP编程和四年J2EE开发的程序员来说,也是比较吃力的事情。而对于现在的读者来说,几乎有数十种iOS入门的教程可供选择。不过令人感到困惑的是,还没有一本书籍,能够作为初学者向更高阶内容前进的桥梁。本书针对没有任何苹果应用程序开发基础的***,从基本的iOS程序语言Swift 3.0开始,接着对苹果公司提供的开发API框架Cocoa touch的原理进行分类和详细讲解,进而对iOS的**技术进行梳理和讲解。*后结合实际案例,整合出一款符合MVC设计模式的商业App,让读者能够成为在iOS应用开发领域中驰骋的高手。iOS系统已陪伴我们走过了9个年头,iPhone、iPod touch、iPad这些搭载着iOS系统的设备,以其丰富的功能和出色的用户体验,改变了我们日常的生活、工作和娱乐方式。当全世界都在赞叹苹果的iOS时,iOS的就业大门也面向全世界打开了。随着移动互联网渐入佳境,越来越多的组织和个人开始进入移动互联网领域。在这个充满机会的移动互联时代,赶快加入iOS App的开发行列吧!本书主要内容本书内容全面,几乎涵盖了iOS 10应用开发所需要的主要内容,全书内容言简意赅,讲解方法通俗易懂,特别适合于初学者学习使用。本书共分三篇,**篇为基础篇,主要介绍了iOS开发基础知识,包括iOS系统的历史、Swift 3.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等。第二篇为进阶篇,主要介绍了Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、自动化测试、性能分析、本地化、加密与**等实用技术。第三篇为实例篇,通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并*终创建一个成熟的商业项目。本书采用丰富的实例,直观的代码展示,向读者形象地讲解了在创建一款**的iOS应用程序时,所需要的大部分技巧,帮助读者轻松掌握并**开发iOS程序。本书特点内容全面:包含Swift 3.0语言、Cocoa Touch、视图控制器、控件、表格、网络、地图、音频、视频、动画、触摸、手势、故事板、CoreData、性能测试、加密解密等众多功能模块。这些内容是iOS开发必知必会的内容,需要读者**掌握。由浅入深:内容按照原理讲解、实现过程、代码解析的编排顺序讲解,使读者朋友更容易掌握知识点。同时对**代码做了大量注释和讲解,以便于读者更加轻松地学习。代码精简:为了在有限的篇幅内讲解更多的实用功能,在本书中只给出了每个实例的核心代码及分析结构性代码,保留关键代码和核心代码,以节省篇幅,让本书更超值。原理图解:为复杂的原理讲解配有生动、详细的图例,以帮助读者轻松理解相关概念。**讲解:对每个实例的核心功能都给予了专门讲解,以便于读者更好地掌握。书中的实例完全适用于全新的iOS 10开发平台,同时也兼容iOS 9开发平台。读者对象通过对本书的学习,读者可以基本建立起iOS 10技术的思想框架,并且对iOS 10开发的过程有一个全面的了解。因此本书适合iOS开发初学者、iOS程序员、iPhone开发人员、iPad开发人员学习,同时也可以作为相关培训机构和大专院校相关专业的教学用书。配套光盘本书配套光盘提供了作者特别录制的有关iOS开发的相关视频课程和全书示例源代码,以方便读者掌握本书内容。源代码中的文件夹名称,如17.1.3 CoreTextProject_RichText,名称的前三个数字依次表示第17章的第1节的第3个示例项目的源代码。CoreTextProject表示当前为CoreText相关的示例项目,而RichText为示例项目的名称。本书中大部分示例可以在Xcode 8的iOS模拟器中运行。部分示例如相机、定位设备的使用,需要连接真机进行测试。此时你需要一个苹果***账户,来访问大部分工具和文档,并且需要一个开发人员许可证来在真机上运行应用程序,对此请参考第1章的内容进行账号的注册和设置。勘误和支持书中所有章节的内容和源码,都根据Swift 3.0和iOS 10.0版本进行了更新。如果你遇到有关兼容性的问题请联系我们,我们会发布更新并进行修改。如果你对本书的内容有任何建议,或者发现了本书的一些错误,希望尽快联系我们,这将对本书的后续版本有很大的帮助。我们非常愿意听取任何能使本书变得更加完善的建议,并会不断致力于让本书更加**。如果你有关于本书的任何评论或者疑问,请访问微信公众号coolketang联系我们。致谢对于本书的完成,要特别感谢王金柱编辑给予的帮助和指导。诸位编辑在检查书稿时认真细致的态度,也令人称赞,整个沟通过程非常愉快。感谢笔者的爱人在孕期依然帮助笔者校对书稿,感谢家里的老大和刚刚出生的小女儿给笔者莫大的精神支持。*后还要感谢冉玉玲、李爱民、谢美仙、李晓飞、朱娟、李红梅、金善众、蔡银珠、金依灵、郑大翰、戴永威等人在写作的过程中给予的支持和鼓励!<br /><br /><br /><br /><br />编 者 2016年12月12日</div>显示全部信息媒体评论评论免费在线读视图UIView和层CALayer
窗口和UIView视图是为iOS应用程序构造用户界面的可视化组件。窗口为内容显示提供背景平台,而UIView视图负责绝大部分的内容��画,并负责响应用户的交互。UIView之所以能够显示,完全是因为其内部的CALayer层对象。UIView真正的绘图部分,就由一个CALayer类来管理,其本身更像是一个CALayer的管理器,访问它跟绘图和坐标有关的属性,例如frame、bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如阴影、圆角大小、边框宽度和颜色等。 本章将逐步讲解UIView视图及其内部的CALayer层的原理和具体的使用方法。