本書結合編者多年iOS開發(fā)經(jīng)驗,使用iOS 11 Xcode 9 Swift 4開發(fā)環(huán)境,系統(tǒng)地介紹了iOS應用程序從開發(fā)到上架的全過程。從開發(fā)環(huán)境搭建、界面開發(fā)、傳感器技術、布局與動畫技術、網(wǎng)絡和數(shù)據(jù)技術到打包與上傳發(fā)布流程等,包含了iOS軟件開發(fā)核心技術的方方面面。值得注意的是,本書針對每章的技術要點配備了來自工作實踐的項目案例,讀者可以邊學邊練,在編寫代碼中學習編程。本書深入淺出,注重實戰(zhàn),案例豐富,非常適合快速上手iOS開發(fā)的新人,也很適合有一定編程基礎但缺少開發(fā)iOS應用經(jīng)驗的開發(fā)人員,還可以作為大中專院校及培訓機構的教學用書。
截止到本書出版,圖書市場上已經(jīng)有很多關于iOS開發(fā)教學的書籍,它們各有優(yōu)勢,比如有些書籍在某個技術面講解的非常細致深入,有些書籍專注于iOS應用的性能優(yōu)化,有些書籍則注重于開發(fā)語言的語法講解等。然而如果你有一定的編程語言基礎,并且沒有任何完整的開發(fā)經(jīng)驗,想要學習iOS開發(fā),本書依然是非常好的選擇,本書為初學者定制,對基礎知識點的講解細致入微,并且配有非常詳細的示例代碼。本書的前兩版,也得到了許多讀者的認可,本版相比前兩版擴充了一些新的技術點,并且采用*的iOS 11 Xcode 9 Swift 4作為開發(fā)環(huán)境,以使讀者了解iOS技術進展,掌握*的開發(fā)技術。開發(fā)一款完整的iOS軟件是一個復雜的過程,開發(fā)者除了需要有編程語言的基礎外,還需要對程序設計有宏觀的把控。本書在編寫時,定位的目標就是要幫助并無太多基礎的讀者快速上手iOS應用開發(fā)。從開發(fā)環(huán)境準備到程序界面開發(fā),從網(wǎng)絡與數(shù)據(jù)邏輯開發(fā)到動畫與傳感器技術,本書都有專門的章節(jié)進行介紹。如果說學習理論是一個枯燥的過程,那么在編程中的動手實踐就是對理論學習成果的*好檢驗。本書中基本每一個模塊都配備了實戰(zhàn)項目,讀者可以通過實戰(zhàn)項目的練習,體會獨立開發(fā)App應用軟件的成就感。
前 言編寫本書的目的截止到本書出版,圖書市場上已經(jīng)有很多關于iOS開發(fā)教學的書籍,它們各有優(yōu)勢,比如有些書籍在某個技術面講解的非常細致深入,有些書籍專注于iOS應用的性能優(yōu)化,有些書籍則注重于開發(fā)語言的語法講解等。然而如果你有一定的編程語言基礎,并且沒有任何完整的開發(fā)經(jīng)驗,想要學習iOS開發(fā),本書依然是非常好的選擇,本書為初學者定制,對基礎知識點的講解細致入微,并且配有非常詳細的示例代碼。本書的前兩版,也得到了許多讀者的認可,本版相比前兩版擴充了一些新的技術點,并且采用最新的iOS 11 Xcode 9 Swift 4作為開發(fā)環(huán)境,以使讀者了解iOS技術進展,掌握最新的開發(fā)技術。開發(fā)一款完整的iOS軟件是一個復雜的過程,開發(fā)者除了需要有編程語言的基礎外,還需要對程序設計有宏觀的把控。本書在編寫時,定位的目標就是要幫助并無太多基礎的讀者快速上手iOS應用開發(fā)。從開發(fā)環(huán)境準備到程序界面開發(fā),從網(wǎng)絡與數(shù)據(jù)邏輯開發(fā)到動畫與傳感器技術,本書都有專門的章節(jié)進行介紹。如果說學習理論是一個枯燥的過程,那么在編程中的動手實踐就是對理論學習成果的最好檢驗。本書中基本每一個模塊都配備了實戰(zhàn)項目,讀者可以通過實戰(zhàn)項目的練習,體會獨立開發(fā)App應用軟件的成就感。本書主要內容本書在結構上分11章,下面介紹各章的主要內容。第1章是為學習應用開發(fā)做準備,介紹開發(fā)環(huán)境的搭建與開發(fā)工具的使用,這一章雖然為準備章節(jié),但對初學者來說至關重要。第2章介紹iOS開發(fā)中的一些基礎UI控件,移動端應用一個很重要的特點就是要有絢麗的界面,應用程序的界面決定了用戶使用這款應用程序的體驗與心情,這一章向讀者獨立地介紹每個基礎控件的用法,并通過一些綜合實戰(zhàn)來給讀者提供使用這些控件的機會。第3章在第2章的基礎上,向讀者介紹iOS開發(fā)中經(jīng)常使用的更多高級控件的用法,同樣也為讀者提供了實戰(zhàn)機會。第4章主要講解了iOS應用開發(fā)中的網(wǎng)絡編程技術,由于網(wǎng)絡編程的演示需要有網(wǎng)絡數(shù)據(jù)支持,很多有關網(wǎng)絡教學的文檔書籍都只是講授理論,卻沒有辦法使讀者切身地進行測試與練習。在編寫本章時,特別注意了這個問題,除了講授網(wǎng)絡編程在iOS應用開發(fā)中的相關知識外,還教讀者如何使用網(wǎng)上免費的API服務真正做出一款網(wǎng)絡應用。第5章主要講解iOS應用程序開發(fā)中的音頻與視頻技術,這類技術在開發(fā)音頻軟件和視頻軟件中意義重大。第6章將作為動畫專題,向讀者介紹iOS應用開發(fā)中的動畫技術,章節(jié)設計由簡到難,并且都配有代碼演示。第7章將作為傳感器專題,向讀者介紹iOS開發(fā)中可以調用的設備傳感器的相關知識。第8章是界面布局專題,編寫中參閱了很多iOS應用開發(fā)教材,其中都沒有過多提到界面布局的相關知識,筆者認為這是一個十分大的弊端,界面布局技術是衡量一個開發(fā)者是否合格的重要指標,筆者相信讀者學習iOS開發(fā)技術絕對不只是想簡簡單單地做出一個Demo自己玩,做出產品才是讀者的真正目標,而一款成熟的產品一定是具有兼容性的,一定是優(yōu)雅的。因此,本書特別將iOS界面布局技術作為一個單獨的章節(jié)來向讀者介紹。第9章是數(shù)據(jù)持久化專題,本章將介紹有關iOS應用開發(fā)中的文件操作、數(shù)據(jù)庫操作的相關知識。通過前9章的學習,你已經(jīng)具備獨立開發(fā)一款iOS應用的基礎能力,但是僅僅做出產品還不夠,如何讓自己的產品在市場發(fā)布,使用戶可以下載使用也是開發(fā)者不得不去了解、學習的內容,第10章將完整地向讀者介紹提交自己的應用到App Store的整個過程。第11章是擴展章節(jié),此章也是讀者開發(fā)能力提升的一個章節(jié),本章將介紹一些獨立于前面章節(jié),但在實際開發(fā)中也舉足輕重的編程技術。本版中對讀者提出的問題都一一進行了修正,在終稿前,筆者花費了很多時間反復校稿,希望本版可以完美地出現(xiàn)在讀者面前,然而世上完美之事少之又少,雖已盡力,仍不敢保證此書中再無差錯。此書一經(jīng)出版已成定局,如果你在閱讀本書時發(fā)現(xiàn)任何差錯或有任何疑問,都可以直接聯(lián)系筆者QQ。最后,本書得以順利完成和出版,要感謝清華大學出版社的王金柱編輯,感謝他在筆者寫作過程中的指導與鼓勵,可以將編程經(jīng)驗順利地分享給讀者,王金柱編輯是不可替代的橋梁。
張益琿(網(wǎng)名:琿少)2018.7.22
張益琿(網(wǎng)名:琿少),多年iOS開發(fā)經(jīng)驗,51CTO學院、CSDN學院簽約講師 ,麥子學院金牌講師,參與開發(fā)iOS平臺系列游戲:瘋狂越獄1-2、應用物通配貨軟件、VIPExam考試庫、證券財經(jīng)軟件等,曾就職于中國唯品會,主要從事移動端應用開發(fā),對iOS開發(fā)、React Native跨平臺開發(fā)及JavaScript前端開發(fā)都擁有豐富的經(jīng)驗。曾出版《iOS開發(fā)實戰(zhàn):從零基礎到App Store上架》《React Native全教程:移動端跨平臺應用開發(fā)》等多本編程著作。
目 錄第1章 開發(fā)準備 11.1 iOS 11新特性簡述 11.1.1 新增拖放交互編程接口 21.1.2 其他新增功能 41.2 熟悉iOS開發(fā)環(huán)境 41.2.1 安裝Xcode開發(fā)工具 41.2.2 了解Xcode開發(fā)工具主界面 61.2.3 Xcode開發(fā)工具的使用技巧及常用快捷鍵 71.3 創(chuàng)建第一個iOS項目 91.4 使用Git進行項目版本管理 121.4.1 Git與Github簡介 121.4.2 注冊GitHub會員 121.4.3 使用Xcode創(chuàng)建Git倉庫 131.4.4 用Xcode建立本地Git倉庫與GitHub代碼托管平臺的關聯(lián) 15第2章 基礎UI組件 182.1 iOS系統(tǒng)UI框架的介紹 182.1.1 MVC設計模式 192.1.2 代理設計模式 192.2 視圖控制器UIViewController 202.2.1 UIViewController的生命周期 202.2.2 UIViewController的視圖層級結構 242.3 文本控件UILabel 242.3.1 使用UILabel在屏幕上創(chuàng)建一個標簽控件 242.3.2 自定義標簽控件的相關屬性 252.3.3 多行顯示的UILabel控件與換行模式 262.4 按鈕控件UIButton 272.4.1 創(chuàng)建一個按鈕改變屏幕顏色 272.4.2 更加多彩的UIButton控件 292.5 文本輸入框控件UITextField 312.5.1 在屏幕上創(chuàng)建一個輸入框 312.5.2 UITextField的常用屬性介紹 332.5.3 UITextField的代理方法 332.5.4 實現(xiàn)一個監(jiān)聽輸入信息的用戶名輸入框 342.6 開關控件UISwitch 352.6.1 創(chuàng)建一個開關控件 352.6.2 為UISiwtch控件添加觸發(fā)方法 362.7 分頁控制器UIPageControl 372.8 分段控制器UISegmentedControl 372.8.1 UISegmentedControl基本屬性的應用 382.8.2 對UISegmentedControl中的按鈕進行增、刪、改操作 382.8.3 UISegmentedControl中按鈕寬度的自適應 392.9 滑塊控件UISlider 402.9.1 UISlider的創(chuàng)建與常規(guī)設置 402.9.2 對UISlider添加圖片修飾 412.10 活動指示器控件UIActivityIndicatorView 412.11 進度條控件UIProgressView 422.12 步進控制器UIStepper 432.12.1 步進控制器的基本屬性使用 432.12.2 自定義UIStepper按鈕圖片 442.13 選擇器控件UIPickerView 442.13.1 創(chuàng)建一個UIPickerView控件 442.13.2 UIPickerView選中數(shù)據(jù)時的回調代理 462.14 通過CALayer對視圖進行修飾 462.14.1 創(chuàng)建圓角的控件 472.14.2 創(chuàng)建帶邊框的控件 472.14.3 為控件添加陰影效果 482.15 警告控制器UIAlertController 482.15.1 UIAlertController的警告框 482.15.2 UIAlertController之活動列表 502.16 基礎UI控件擴展篇 512.16.1 搜索欄控件UISearchBar 512.16.2 日期時間選擇器UIDatePicker 522.16.3 警告視圖UIAlertView 542.16.4 活動列表UIActionSheet 542.17 實戰(zhàn):登錄注冊界面的搭建 55第3章 高級UI控件 593.1 導航控制器UINavigationController 603.1.1 導航控制器的工作原理 603.1.2 使用導航控制器進行多界面搭建 613.1.3 導航欄UINavigationBar 633.1.4 導航按鈕UIBarButtonItem 653.1.5 導航控制器的工具欄 673.1.6 iOS 8系統(tǒng)之后導航控制器的一些有趣功能 673.2 標簽控制器UITabBarController 683.2.1 標簽控制器的工作原理 683.2.2 標簽控制器的基礎用法解析 683.2.3 關于UITabBarItem的使用 703.3 滾動視圖UIScrollView 713.3.1 使用UIScrollView展示視圖內容 713.3.2 UIScrollView的代理方法 723.4 網(wǎng)絡視圖UIWebView 743.4.1 App網(wǎng)絡傳輸安全策略 743.4.2 通過網(wǎng)絡請求加載UIWebView 753.4.3 通過HTML字符串加載UIWebView 753.4.4 通過Data數(shù)據(jù)加載UIWebView 763.4.5 UIWebView中常用方法解析 763.4.6 UIWebView的代理方法 773.5 表格視圖UITableView 783.5.1 UITableView的創(chuàng)建與復用機制 783.5.2 創(chuàng)建一個表格視圖UITableView 793.5.3 關于表格數(shù)據(jù)的載體UITableViewCell 813.5.4 設置UITableView的行高和頭尾視圖 823.5.5 UITableView的用戶交互行為 833.5.6 為UITableView添加索引欄 853.6 復雜布局視圖UICollectionView 853.6.1 UICollectionView控件的優(yōu)勢與布局方式 863.6.2 使用UICollectionView進行九宮格式的布局 863.6.3 創(chuàng)建更加靈活的流式布局 883.6.4 自定義UICollectionViewFlowLayout進行參差瀑布流布局 883.6.5 使用UICollectionView進行圓環(huán)布局 913.7 實戰(zhàn):開發(fā)一款手機網(wǎng)頁瀏覽器 933.7.1 網(wǎng)頁瀏覽器工程的搭建 933.7.2 核心網(wǎng)頁視圖的設計 943.7.3 歷史記錄界面的設計 1013.7.4 收藏界面的設計 1023.7.5 啟動頁面、圖標及應用名稱的相關優(yōu)化 1033.8 擴展內容 1063.8.1 應用內評價組件 1063.8.2 進行系統(tǒng)撥號與短信界面的調用 1063.8.3 拖拽交互體驗 107第4章 網(wǎng)絡編程技術 1114.1 使用NSURLConnection請求網(wǎng)絡數(shù)據(jù) 1114.1.1 申請一個免費的API服務 1124.1.2 使用NSURLConnection進行API服務數(shù)據(jù)的獲取 1144.1.3 使用NSURLConnection進行異步網(wǎng)絡請求 1154.1.4 使用NSURLConnection類通過代理回調的方式異步請求 1164.2 設計封裝一個更加易用的網(wǎng)絡請求類 1174.2.1 設計自定義的網(wǎng)絡請求連接類 1174.2.2 設計自定義的網(wǎng)絡請求管理類 1184.3 JSON類型數(shù)據(jù)的解析與數(shù)據(jù)模型的設計 1204.3.1 JSON數(shù)據(jù)簡介 1204.3.2 在iOS中解析JSON數(shù)據(jù) 1214.3.3 數(shù)據(jù)模型Model類的設計 1224.4 使用CocoaPods進行第三方庫的管理 1244.4.1 在MAC上安裝CocoaPods工具 1254.4.2 用CocoaPods搭建一個使用第三方網(wǎng)絡請求框架AlamoFire的工程 1264.5 使用AlamoFire進行網(wǎng)絡請求 1284.5.1 詳解HTTP/HTTPS協(xié)議 1284.5.2 使用AlamoFire進行網(wǎng)絡請求 1294.6 實戰(zhàn):開發(fā)笑一笑應用程序 1304.6.1 工程項目框架的搭建 1304.6.2 笑一笑界面數(shù)據(jù)載體cell的設計 1324.6.3 笑一笑界面的搭建 1344.6.4 實現(xiàn)下拉刷新與加載更多功能 1374.6.5 趣圖吧界面數(shù)據(jù)載體cell的設計 1384.6.6 趣圖吧界面的設計 141第5章 音頻、視頻開發(fā)技術 1455.1 iOS音頻開發(fā)基礎AVAudioPlayer類的使用 1455.1.1 使用AVAudioPlayer進行MP3音頻文件的播放 1455.1.2 進行音頻播放相關屬性的控制 1475.1.3 后臺播放音頻及用戶交互的優(yōu)化 1525.2 iOS視頻開發(fā)基礎 1545.2.1 使用MPMoviePlayerController向應用中嵌入視頻模塊 1545.2.2 MPMoviePlayerController常用屬性與方法解析 1555.3 視頻播放器視圖控制器MPMoviePlayerViewController 1585.4 AVPlayViewController視頻播放框架與畫中畫開發(fā)技術 1595.4.1 使用AVPlayerViewController進行視頻播放 1605.4.2 iPad的畫中畫播放技術 1625.5 實戰(zhàn):歌手王菲音頻播放器的開發(fā) 1645.5.1 工程搭建與LRC歌詞文件簡介 1645.5.2 LRC歌詞解析引擎的設計 1655.5.3 核心播放器引擎的設計 1685.5.4 歌曲列表與歌詞顯示視圖界面的設計 1735.5.5 播放器主頁面的實現(xiàn) 1765.5.6 后臺播放音頻用戶交互的處理 181第6章 動畫開發(fā)技術 1836.1 使用UIImageView播放圖片組幀動畫 1846.2 UIView層動畫的應用 1856.2.1 執(zhí)行UIView層過渡動畫的3個類方法 1856.2.2 創(chuàng)建UIView層的阻尼動畫 1866.2.3 動畫參數(shù)配置與組合動畫 1866.2.4 UIView層過渡動畫支持的屬性 1886.3 使用commit方式進行UIView層動畫的創(chuàng)建 1896.3.1 使用commit方式進行UIView層過渡動畫的創(chuàng)建 1896.3.2 兩種UIView層動畫創(chuàng)建方式的優(yōu)劣 1906.4 UIView的轉場動畫 1906.4.1 重繪UIView視圖時使用的轉場動畫 1916.4.2 切換UIView視圖時使用的轉場動畫 1916.5 核心動畫編程技術CoreAnimation 1926.5.1 錨點對視圖控件幾何位置的影響 1936.5.2 色彩梯度層CAGradientLayer 1946.5.3 視圖拷貝層CAReplicatorLayer 1946.5.4 圖形渲染層CAShapeLayer 1956.5.5 文本繪制層CATextLayer 1966.5.6 CAAnimation動畫體系介紹 1976.5.7 使用CABasicAnimation創(chuàng)建基礎動畫 1986.5.8 使用CAKeyframeAnimation類創(chuàng)建關鍵幀動畫 2006.5.9 CALayer層的轉場動畫CATransition 2016.5.10 CALayer層的組合動畫CAAnimationGroup 2026.5.11 CATransform3D變換的應用 2036.6 炫酷的粒子效果 2056.6.1 粒子發(fā)射器CAEmitterLayer 2056.6.2 粒子單元CAEmitterCell 2066.6.3 創(chuàng)建粒子火焰動畫 2076.7 播放GIF動態(tài)圖 2096.7.1 使用UIWebView進行GIF動態(tài)圖播放 2096.7.2 使用UIImageView幀動畫進行GIF動態(tài)圖播放 2096.8 實戰(zhàn):小游戲Flappy Bird的設計與開發(fā) 2106.8.1 小鳥對象的設計 2116.8.2 游戲開始界面的設計 2136.8.3 游戲結束界面的設計 2146.8.4 Flappy Bird游戲主框架的搭建 215第7章 傳感器開發(fā)技術 2217.1 為應用程序添加手機密碼及指紋識別的安全驗證 2217.1.1 使用手機密碼為應用程序添加安全驗證 2227.1.2 使用用戶指紋為應用程序添加安全驗證 2237.2 使用加速度傳感器、螺旋儀傳感器與磁力傳感器獲取設備空間狀態(tài) 2247.3 距離傳感器的應用 2277.4 iOS藍牙開發(fā)技術 2287.4.1 中心設備管理類CBCentealManager 2297.4.2 外圍設備管理類CBPeripheraManager 2327.5 GPS應用與地圖編程技術 2367.5.1 進行設備地理位置定位 2367.5.2 原生地圖開發(fā)技術 2387.5.3 在地圖中添加大頭針及標注 2407.5.4 在地圖視圖中添加覆蓋物 2427.5.5 在地圖中進行線路導航與附近興趣點檢索 2447.6 實戰(zhàn):簡易藍牙對戰(zhàn)五子棋 2487.6.1 游戲核心通信類的設計 2487.6.2 棋盤瓦片的設計 2547.6.3 核心游戲視圖與游戲核心邏輯的設計 2567.6.4 核心游戲視圖控制器的設計 262第8章 界面布局技術 2668.1 iOS中傳統(tǒng)的UIViewAutoresizing布局模式 2668.1.1 通過代碼設置視圖控件的UIViewAutoresizing模式 2678.1.2 在xib文件中可視化地配置控件的autoresizing屬性 2698.2 autolayout自動布局框架 2708.2.1 初識autolayout 2708.2.2 autolayout的屬性意義與一個簡單的自動布局示例 2728.2.3 使用代碼進行autolayout布局 2758.2.4 使用格式化的字符串進行autolayout布局對象的創(chuàng)建 2778.2.5 與約束相關的幾個方法 2798.2.6 使用autolayout設計一個高度自適應的聊天輸入框及動畫優(yōu)化 2798.2.7 使用第三方庫SnapKit進行autolayout約束布局 281第9章 數(shù)據(jù)持久化技術 2869.1 使用plist文件進行輕量級數(shù)據(jù)持久化管理 2869.1.1 在工程中讀取Plist文件數(shù)據(jù) 2869.1.2 在程序沙盒Documents目錄中創(chuàng)建和使用plist文件 2889.1.3 使用NSUserDefaults類進行數(shù)據(jù)持久化 2899.2 使用歸檔技術進行數(shù)據(jù)模型持久化 2909.2.1 進行單一系統(tǒng)數(shù)據(jù)類型的歸檔與解歸檔操作 2909.2.2 對多個對象進行數(shù)據(jù)歸檔 2919.2.3 進行自定義數(shù)據(jù)模型的歸檔 2929.3 小型數(shù)據(jù)庫SQLite在iOS開發(fā)中的應用 2939.4 核心數(shù)據(jù)管理框架CoreData的使用 2969.4.1 使用CoreData設計數(shù)據(jù)模型 2969.4.2 CoreData編程框架中3個重要的類 2999.4.3 CoreData編程框架的數(shù)據(jù)操作 3019.4.4 使用CoreData進行數(shù)據(jù)與頁面的綁定 3049.5 網(wǎng)絡緩存策略 3079.5.1 為網(wǎng)絡請求設置緩存策略 3089.5.2 應用緩存管理類NSURLCache簡介 309第10章 提交應用程序到App Store 31010.1 使用Xcode開發(fā)工具進行程序調試 31010.1.1 使用自定義斷點進行代碼調試 31010.1.2 添加全局異常斷點 31210.1.3 使用LLDB調試器進行程序調試 31210.2 Apple開發(fā)者賬號的申請 31310.2.1 幾種類型的開發(fā)者賬號 31310.2.2 申請開發(fā)者賬號的過程 31410.3 進行應用程序打包 31710.3.1 在iTunes Connect中進行應用的創(chuàng)建與配置 31710.3.2 使用Xcode打包與提交iTunes 323第11章 更多功能與進階技巧 32711.1 iOS通知中心NotificaitonCenter的應用 32711.1.1 通知類Notification簡介 32711.1.2 通知中心NotificationCenter應用 32811.2 多線程開發(fā)技術 32911.2.1 使用Thread進行線程管理 32911.2.2 使用Operation類與OperationQueue類進行多任務管理 33111.2.3 iOS中GCD編程技術簡介 33311.3 3D Touch技術的應用 33411.3.1 3D Touch的3大模塊 33411.3.2 Home Screen Quick Action使用與相關API詳解 33511.4 iOS中語音識別技術的應用 33811.4.1 SpeechFramework框架中的重要類 33811.4.2 申請用戶語音識別權限與進行語音識別請求 338