內容提要
《瘋狂iOS講義(提高篇)(含光碟1張)》基於《瘋狂iOS講義(下)》升級而來,已真正升級成Swift、Objective-C雙語講解。本書所有案例全部提供Swift、Objective-C兩個語言的版本。《瘋狂iOS講義(提高篇)》基於最新的iOS 9.3、Xcode 7.3平台,全面介紹iOS套用開發的高級知識。
本書包含多點觸摸與手勢處理、套用國際化、數據存儲、SQLite資料庫與Core Data、iOS多媒體開發、加速計和陀螺儀、多執行緒、網路編程、XMPP即時通信、定位、地圖、推送機制、iCloud服務、HealthKit框架等內容,最後還通過瘋狂軟體商城App整合介紹了iOS App的界面開發、自定義UI控制項、手勢處理、網路通信、本地數據存儲、線上支付等功能的用法。
讀者在閱讀《瘋狂iOS講義(提高篇)》之前,建議先掌握《瘋狂iOS講義(基礎篇)》中的知識。
本書並不局限於介紹iOS編程的各種理論知識,而是從“項目驅動”的角度來講授理論,全書一共包括近百個實例,這些示範性的實例既可幫助讀者更好地理解各知識點在實際開發中的套用,也可供讀者在實際開發時作為參考、拿來就用。如果讀者在閱讀本書時遇到技術問題,可以登錄瘋狂Java聯盟發帖,筆者將會及時予以解答。
《瘋狂iOS講義(提高篇)》為所有打算深入掌握iOS編程的讀者而編寫,適合各種層次的iOS學習者和開發者閱讀,也適合作為大學教育、培訓機構的iOS教材。
目錄
第1章 多點觸摸與手勢檢測 1
1.1 回響者鏈 2
1.2 回響觸碰方法 3
1.3 使用手勢處理器(UIGestureRecognizer) 3
1.3.1 使用UITapGestureRecognizer處理點擊手勢 4
1.3.2 使用UIPinchGestureRecognizer處理捏合手勢 6
實例:通過捏合手勢縮放圖片 7
1.3.3 使用UIRotationGestureRecognizer處理旋轉手勢 9
實例:通過旋轉手勢旋轉圖片 9
1.3.4 使用UISwipeGestureRecognizer處理輕掃手勢 11
實例:貪食蛇 13
1.3.5 使用UIPanGestureRecognizer處理拖動手勢 19
1.3.6 使用UILongPressGestureRecognizer處理長按手勢 21
實例:長按添加按鈕 22
1.4 創建和使用自定義手勢處理器 24
1.4.1 開發自定義手勢處理器 24
1.4.2 使用自定義手勢處理器 26
1.5 本章小結 27
第2章 國際化 28
2.1 iOS套用國際化的基礎 29
2.1.1 iOS套用的國際化思路 29
2.1.2 國際化支持的語言和國家 31
2.2 國際化界面設計檔案 32
2.3 國際化應用程式的顯示名稱 36
2.4 國際化圖片 39
2.5 國際化文本 41
2.6 本章小結 43
第3章 iOS的數據存儲 44
3.1 應用程式沙盒 45
3.1.1 獲取Documents目錄 47
3.1.2 獲取tmp目錄 47
3.1.3 檔案保存策略思考 47
3.2 應用程式參數與用戶默認設定 48
3.2.1 使用Settings Bundle 48
3.2.2 使用NSUserDefaults讀取、保
存應用程式參數 57
3.3 屬性列表 62
實例:備忘錄 62
3.4 對象歸檔和原生I/O API 66
3.5 使用SQLite 3資料庫 66
3.5.1 iOS的SQLite編程 67
3.5.2 創建資料庫和表 71
3.5.3 使用SQL語句執行查詢 71
實例:英文生詞本 72
3.5.4 使用sqlite3工具 76
3.5.5 使用SQLite Manager管理資料庫 77
3.6 使用Core Data框架 79
3.6.1 Core Data簡介 80
3.6.2 初始化Core Data項目 82
3.6.3 設計實體模型 86
3.6.4 使用Core Data實現數據的增、
刪、改、查 88
3.6.5 管理實體的關聯關係 95
實例:圖書管理系統 95
3.7 本章小結 102
第4章 多媒體套用開發 103
4.1 音頻和視頻的播放 104
4.1.1 使用System Sound Services播放音效 104
4.1.2 使用AVAudioPlayer播放音樂 106
4.1.3 使用MPMediaPickerController選擇系統音樂 110
實例:簡單音樂播放器 111
4.1.4 使用AVPlayer播放視頻 114
4.2 使用AVAudioRecorder錄製音頻 121
4.3 拍照和錄製視頻 125
4.3.1 使用UIImagePickerController拍照和錄製視頻 125
4.3.2 使用AVFoundation拍照和錄製視頻 130
實例:完全自定義的相機 132
4.4 使用AVFoundation生成視頻縮略圖 143
4.5 本章小結 145
第5章 管理手機 146
5.1 使用iOS 9新增的Contacts管理聯繫人 147
5.1.1 查詢聯繫人 151
5.1.2 刪除聯繫人 154
5.1.3 添加聯繫人 155
5.1.4 修改聯繫人 157
5.2 使用iOS 9的ContactsUI管理聯繫人 163
5.2.1 使用CNContactViewController添加聯繫人 164
5.2.2 使用CNContactViewController顯示未知聯繫人 165
5.2.3 使用CNContactPickerViewController選擇聯繫人 167
5.3 使用UIApplication打電話、發簡訊 169
5.4 使用MFMessageComposeViewController傳送簡訊 171
5.5 使用MFMailComposeViewController傳送郵件 174
5.6 本章小結 178
第6章 加速計與陀螺儀 179
6.1 iOS支持的加速計和陀螺儀 180
6.1.1 iOS加速計和陀螺儀的理論基礎 180
6.1.2 基於代碼塊方式獲取加速度數
據、陀螺儀數據、磁場數據 181
6.1.3 主動請求獲取加速度數據、陀
螺儀數據、磁場數據 184
實例:怪物足球 187
6.2 感知設備移動 192
實例:水平儀 195
6.3 健康相關感測器 199
6.3.1 使用CMMotionActivityManager 199
6.3.2 使用CMPedometer獲取步行數據 201
6.4 使用CMAltimeter獲取高度改變信息 203
6.5 iOS 9新增的CMSensorRecorder 205
6.6 本章小結 207
第7章 多執行緒 208
7.1 執行緒概述 209
7.1.1 執行緒和進程 209
7.1.2 多執行緒的優勢 210
7.2 使用NSThread實現多執行緒 211
7.2.1 創建和啟動執行緒 211
7.2.2 執行緒的狀態 213
7.2.3 終止子執行緒 213
7.2.4 執行緒睡眠 215
實例:使用執行緒下載網路圖片 215
7.2.5 改變執行緒優先權 217
7.3 執行緒同步與執行緒通信 218
7.3.1 執行緒安全問題 218
7.3.2 使用同步代碼塊實現同步 220
7.3.3 釋放對同步監視器的鎖定 223
7.3.4 同步鎖(NSLock) 223
7.3.5 使用NSCondition控制執行緒通信 224
實例:生產者-消費者 224
7.4 使用GCD實現多執行緒 228
7.4.1 創建佇列 229
7.4.2 異步提交任務 230
實例:使用GCD下載圖片 233
7.4.3 同步提交任務 234
7.4.4 多次執行的任務 235
7.4.5 只執行一次的任務 237
7.5 後台運行 238
7.5.1 進入後台時釋放記憶體 238
實例:瘋狂飛機大戰 238
7.5.2 進入後台時保存狀態 245
7.5.3 請求更多的後台時間 246
7.6 使用NSOperation與NSOperationQueue實現多執行緒 248
7.6.1 使用NSInvocationOperation和NSBlockOperation 249
實例:使用NSBlockOperation下載圖片 249
7.6.2 定義NSOperation子類 251
7.7 本章小結 253
第8章 iOS網路編程 254
8.1 檢測網路狀態 255
8.1.1 檢查網路狀態 255
8.1.2 監聽網路狀態改變 259
8.2 使用CFNetwork實現TCP協定的通信 260
8.2.1 IP位址與連線埠號 260
8.2.2 TCP協定基礎 261
8.2.3 使用CFSocket實現TCP伺服器端 262
8.2.4 使用CFSocket實現TCP客戶端 266
實例:網路聊天程式 268
8.2.5 使用CocoaAsyncSocket實現TCP客戶端 271
8.3 使用NSURLSession 275
8.3.1 使用NSURLSession從網路獲取數據 275
8.3.2 使用NSMutableURLRequest向伺服器傳送數據 280
8.4 XML解析 282
8.4.1 DOM與SAX 282
8.4.2 使用NSXMLParser解析XML文檔 284
8.4.3 使用libxml2解析XML文檔 289
8.4.4 使用KissXML解析XML文檔 293
8.4.5 使用KissXML生成、修改XML文檔 296
8.5 JSON解析 299
8.5.1 JSON的基本知識 299
8.5.2 使用NSJSONSerialization處理JSON數據 302
8.5.3 使用SBJson解析JSON數據 302
8.6 使用AFNetworking實現網路通信 307
8.6.1 提交GET請求與提交POST請求 307
實例:訪問被保護資源 308
8.6.2 處理JSON或Plist回響 312
8.6.3 處理XML回響 315
8.6.4 上傳檔案 317
8.7 使用ASIHTTPRequest框架實現網路編程 320
8.7.1 傳送同步或異步的GET請求 321
8.7.2 使用代碼塊 325
8.7.3 使用NSOperationQueue管理請求 326
8.7.4 傳送請求參數和檔案上傳 328
實例:天氣預報 330
8.8 本章小結 340
第9章 使用CoreLocation定位 341
9.1 iOS的定位支持 342
9.1.1 GPS衛星定位 342
9.1.2 基站定位 343
9.1.3 WiFi定位 343
9.2 獲取定位信息 343
9.2.1 iOS 9增強的後台定位 344
9.2.2 使用iOS模擬器模擬位置 349
9.2.3 監控行車速度和行車距離 349
9.3 方向監測 352
實例:指南針 353
9.4 區域監測 355
9.5 本章小結 358
第10章 使用MapKit開發地圖服務 359
10.1 使用MapKit框架 360
10.1.1 使用MKMapView控制項 361
10.1.2 指定地圖顯示中心和顯示區域 362
10.1.3 在地圖上使用MKMapCamera 366
10.2 根據地址定位 367
10.2.1 地址解析與反向地址解析 367
10.2.2 根據地址定位 373
10.3 在地圖上添加錨點 376
10.3.1 添加簡單的錨點 376
10.3.2 添加自定義錨點 380
10.4 在地圖上添加覆蓋層 383
10.4.1 添加幾何覆蓋層 384
10.4.2 添加MKTileOverlay覆蓋層 386
10.5 使用MKDirections獲取導航路線 389
實例:行車導航儀 389
10.6 本章小結 393
第11章 訊息推送與XMPP即時通信 394
11.1 使用NSNotificationCenter通信 395
11.1.1 使用NSNotificationCenter監聽系統組件的通知 396
11.1.2 使用NSNotificationCenter監聽自定義通知 398
11.2 iOS本地通知 400
11.3 iOS遠程推送通知 405
11.3.1 開發遠程推送客戶端套用 407
11.3.2 開發推送通知的服務端程式 415
11.4 基於XMPP的即時通信 422
11.4.1 XMPP簡介 422
11.4.2 下載和安裝ejabberd 424
11.4.3 下載和安裝XMPPFramework 427
實例:即時通信App 428
11.4.4 註冊登錄 429
11.4.5 查詢好友列表 434
11.4.6 好友上線、下線 441
11.4.7 添加、刪除好友 442
11.4.8 查詢聊天室列表 443
11.4.9 創建、加入聊天室 447
11.4.10 接收、傳送聊天訊息 449
11.5 本章小結 459
第12章 iCloud服務 460
12.1 iCloud入門 461
12.1.1 為套用開啟iCloud服務 462
12.1.2 使用NSMetadataQuery查詢
文檔 464
12.1.3 添加文檔 469
12.1.4 編輯文檔 472
12.1.5 刪除文檔 474
12.2 使用iCloud保存雲端首選項 475
12.3 使用CloudKit保存數據 479
12.3.1 設計雲端資料庫 479
12.3.2 查詢雲端記錄 481
實例:雲端圖書管理 482
12.3.3 刪除雲端記錄 485
12.3.4 添加雲端記錄 486
12.3.5 修改雲端記錄 488
12.4 本章小結 490
第13章 HealthKit框架 491
13.1 HealthKit簡介 492
13.1.1 HealthKit常識 492
13.1.2 HealthKit的基礎API 493
13.1.3 HealthKit的數據簡介 494
13.2 讀取特徵數據 494
13.2.1 請求獲取授權 495
13.2.2 使用HKHealthStore讀取數據 499
13.2.3 查詢樣本數據 503
13.2.4 添加樣本數據 509
13.3 操作鍛鍊數據 510
13.3.1 查詢鍛鍊數據 511
13.3.2 添加鍛鍊數據 515
13.4 本章小結 523
第14章 瘋狂軟體商城App 524
14.1 系統功能簡介和架構設計 525
14.1.1 系統功能簡介 525
14.1.2 系統架構設計 525
14.2 傳送請求的工具類 526
14.3 套用界面設計 528
14.4 顯示熱賣商品 531
14.4.1 熱賣商品的伺服器端接口 532
14.4.2 載入顯示熱賣商品 532
14.5 顯示商品詳情 540
14.5.1 顯示商品 540
14.5.2 加入購物車 544
14.6 處理訂單 547
14.6.1 處理購物車 547
14.6.2 確認訂單 553
14.6.3 微信支付 558
14.7 分類瀏覽 570
14.7.1 商品類別的伺服器端接口 570
14.7.2 載入、顯示商品分類 570
14.7.3 載入、顯示指定分類的商品 573
14.8 商家介紹 576
14.9 本章小結 578