編輯推薦
基於iOS 7平台,全部案例均通過iPhone 5s真機測試。商業級手遊代碼無保留全盤呈現。國家級行業大獎得主、電子工業出版社優秀作者、IT名家李剛老師出品,一如既往的質量保障。iOS開發零基礎入門請閱讀《瘋狂iOS講義(下)--Objective-C 2.0與iPhone/iPad套用開發基礎》。Android套用開發請閱讀15次印刷旗艦作品《瘋狂Android講義(第2版)》
目錄
第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處理輕掃手勢 10
實例:貪食蛇 12
1.3.5 使用UIPanGestureRecognizer處理拖動手勢18
1.3.6 使用UILongPressGestureRecognizer處理長按手勢 19
實例:長按添加按鈕20
1.4 創建和使用自定義手勢處理器 21
1.4.1 開發自定義手勢處理器 21
1.4.2 使用自定義手勢處理器 23
1.5本章小結 24
第2章 國際化25
2.1iOS套用國際化的基礎 26
2.1.1 iOS套用的國際化思路26
2.1.2 Objective-C國際化支持的語言和國家 28
2.2 國際化界面設計檔案 29
2.3國際化應用程式的顯示名稱 32
2.4國際化圖片 34
2.5國際化文本 35
2.6本章小結 38
第3章 iOS的數據存儲與IO39
3.1應用程式沙盒 40
3.1.1獲取Documents目錄 41
3.1.2獲取tmp目錄41
3.1.3檔案保存策略思考41
3.2應用程式參數與用戶默認設定42
3.2.1使用Settings Bundle 42
3.2.2使用NSUserDefaults讀取、保存應用程式參數50
3.3屬性列表 54
實例:備忘錄 55
3.4對象歸檔和原生I/O API58
3.5使用SQLite 3資料庫 58
3.5.1iOS的SQLite編程58
3.5.2創建資料庫和表 63
3.5.3使用SQL語句執行查詢63
實例:英文生詞本 64
3.5.4使用sqlite3工具 67
3.5.5使用SQLite Manager管理資料庫69
3.6使用Core Data框架 71
3.6.1Core Data簡介 71
3.6.2初始化Core Data項目 73
3.6.3設計實體模型76
3.6.4使用Core Data實現數據的增、刪、改、查 78
3.6.5管理實體的關聯關係 84
實例:圖書管理系統84
3.7本章小結 95
第4章 多媒體套用開發 96
4.1音頻和視頻的播放 97
4.1.1使用System Sound Services播放音效97
4.1.2使用AVAudioPlayer播放音樂 98
4.1.3使用MPMediaPickerController選擇系統音樂 102
實例:簡單音樂播放器 103
4.1.4使用MPMoviePlayerController播放視頻 106
4.2使用AVAudioRecorder錄製音頻 108
4.3拍照和錄製視頻112
4.3.1使用UIImagePickerController拍照和錄製視頻112
4.3.2使用AVFoundation拍照和錄製視頻 116
實例:完全自定義的相機118
4.4使用AVFoundation生成視頻縮略圖135
4.5本章小結 137
第5章 管理手機 138
5.1使用AddressBook管理聯繫人 139
5.1.1刪除聯繫人 142
5.1.2添加聯繫人 144
5.1.3修改聯繫人 147
5.2使用AddressBookUI管理聯繫人 151
5.2.1使用ABNewPersonViewController添加聯繫人 153
5.2.2使用ABUnknownPersonViewController顯示未知聯繫人 154
5.2.3使用ABPeoplePickerNavigationController選擇聯繫人 156
5.2.4使用ABPersonViewController顯示指定聯繫人 157
5.3使用UIApplication打電話、發簡訊 159
5.4使用MFMessageComposeViewController發簡訊160
5.5使用MFMailComposeViewController傳送郵件 162
5.6本章小結 165
第6章 加速計與陀螺儀 166
6.1iOS支持的加速計和陀螺儀 167
6.1.1iOS加速計和陀螺儀的理論基礎167
6.1.2基於代碼塊方式獲取加速度數據、陀螺儀數據、磁場數據 168
6.1.3主動請求獲取加速度數據、陀螺儀數據、磁場數據172
實例:怪物足球173
6.2感知設備移動 178
實例:水平儀 181
6.3iOS 7新增的計步器184
6.4iOS 7新增的CMMotionActivityManager 186
6.5本章小結 188
第7章 多執行緒 189
7.1執行緒概述 190
7.1.1執行緒和進程 190
7.1.2多執行緒的優勢191
7.2使用NSThread實現多執行緒192
7.2.1創建和啟動執行緒 192
7.2.2執行緒的狀態 194
7.2.3終止子執行緒 194
7.2.4執行緒睡眠195
實例:使用執行緒下載網路圖片196
7.2.5改變執行緒優先權 197
7.3執行緒同步與執行緒通信199
7.3.1執行緒安全問題199
7.3.2使用@synchronized實現同步201
7.3.3釋放對同步監視器的鎖定 203
7.3.4同步鎖(NSLock)203
7.3.5使用NSCondition控制執行緒通信 205
實例:生產者-消費者 205
7.4使用GCD實現多執行緒208
7.4.1創建佇列209
7.4.2異步提交任務210
實例:使用GCD下載圖片212
7.4.3同步提交任務213
7.4.4多次執行的任務 214
7.4.5隻執行一次的任務215
7.5後台運行 216
7.5.1進入後台時釋放記憶體 216
實例:瘋狂飛機大戰216
7.5.2進入後台時保存狀態 223
7.5.3請求更多的後台時間 223
7.6使用NSOperation與NSOperationQueue實現多執行緒225
7.6.1使用NSInvocationOperation和NSBlockOperation226
實例:使用NSBlockOperation下載圖片 226
7.6.2定義NSOperation子類 227
7.7本章小結 229
第8章 iOS網路套用編程 230
8.1檢測網路狀態 231
8.1.1檢查網路狀態 231
8.1.2監聽網路狀態改變 234
8.2使用CFNetwork實現TCP協定的通信 235
8.2.1IP位址與連線埠號 236
8.2.2TCP協定基礎236
8.2.3使用CFSocket實現TCP伺服器端 237
8.2.4使用CFSocket實現TCP客戶端241
實例:網路聊天程式244
8.2.5使用CocoaAsyncSocket實現TCP客戶端247
8.3使用NSURLConnection 250
8.3.1使用NSURLConnection從網路獲取數據 250
8.3.2使用NSMutableURLRequest向伺服器傳送數據 253
8.4XML解析 255
8.4.1DOM與SAX 255
8.4.2使用NSXMLParser解析XML文檔 257
8.4.3使用libxml2解析XML文檔 262
8.4.4使用GDataXML解析XML文檔 266
8.4.5使用GDataXML生成、修改XML文檔268
8.5JSON解析 271
8.5.1JSON的基本知識 271
8.5.2使用NSJSONSerialization處理JSON數據 274
8.5.3使用SBJson解析JSON數據 274
8.5.4使用JSONKit解析JSON數據 275
8.6使用AFNetworking實現網路通信280
8.6.1提交GET請求與提交POST請求280
實例:訪問被保護資源 281
8.6.2處理JSON或Plist回響 284
8.6.3處理XML回響 288
8.6.4上傳檔案 290
8.7使用ASIHTTPRequest框架實現網路編程 293
8.7.1傳送同步或異步的GET請求 293
8.7.2使用代碼塊 296
8.7.3使用NSOperationQueue管理請求 297
8.7.4傳送請求參數和檔案上傳 299
實例:天氣預報300
8.8本章小結 311
第9章 使用CoreLocation定位 312
9.1iOS的定位支持313
9.1.1GPS衛星定位313
9.1.2基站定位 314
9.1.3WiFi定位 314
9.2獲取定位信息 314
9.2.1獲取位置信息 315
9.2.2使用iOS模擬器模擬位置 318
9.2.3監控行車速度和行車距離 318
9.3方向監測 320
實例:指南針 322
9.4區域監測 323
9.5本章小結 325
第10章 使用MapKit開發地圖服務 326
10.1使用MapKit框架 327
10.1.1使用MKMapView控制項328
10.1.2指定地圖顯示中心和顯示區域329
10.1.3使用iOS 7新增的MKMapCamera 332
10.2根據地址定位333
10.2.1地址解析與反向地址解析333
10.2.2根據地址定位 337
10.3在地圖上添加錨點340
10.3.1添加簡單的錨點340
10.3.2添加自定義錨點343
10.4在地圖上添加覆蓋層 345
10.4.1添加幾何覆蓋層346
10.4.2使用iOS 7新增的MKTileOverlay覆蓋層 348
10.5使用iOS 7新增的MKDirections獲取導航路線 350
實例:行車導航儀 351
10.6本章小結 354
第11章 推送機制 355
11.1使用NSNotificationCenter通信 356
11.1.1使用NSNotificationCenter監聽系統組件的通知 358
11.1.2使用NSNotificationCenter監聽自定義通知 359
11.2iOS本地通知 361
11.3iOS遠程推送通知 364
11.3.1開發Push客戶端套用366
11.3.2開發Push服務端程式377
11.4本章小結 381
第12章 iCloud服務與套用 382
12.1iCloud入門 383
12.1.1為套用開啟iCloud服務 384
12.1.2使用NSMetadataQuery查詢文檔389
12.1.3添加文檔 393
12.1.4編輯文檔 395
12.1.5刪除文檔 397
12.2使用iCloud保存雲端首選項 398
12.3本章小結 401
第13章 使用cocos2d開發2D遊戲402
13.1cocos2d簡介 403
13.1.1cocos2d的特點 403
13.1.2cocos2d的主要功能 403
13.2cocos2d的下載與安裝 404
13.2.1 下載cocos2d 404
13.2.2安裝cocos2d405
13.2.3使用cocos2d-iPhone的幫助文檔 405
13.2.4cocos2d中內置的項 406
13.3創建cocos2d項目 407
13.3.1HelloWorld cocos2d項目 407
13.3.2cocos2d項目如何支持ARC 408
13.3.3cocos2d項目結構和代碼分析 413
13.4CCNode節點類 419
13.4.1CCNode類的屬性 419
13.4.2CCNode類的方法420
13.5CCScene場景類 423
13.5.1CCTransitionScene 場景切換423
13.5.2cocos2d支持的場景過渡效果 424
13.6CCLayer類 424
13.6.1CCLayer類的屬性 425
13.6.2CCLayer類的常用方法 425
13.6.3CCLayer類的作用 425
13.6.4CCLayerColor類的屬性和方法425
13.6.5CCLayerGradient漸變色層類 426
13.6.6CCMenu選單類 426
13.7CCDirector導演類429
13.7.1CCDirector導演類的屬性430
13.7.2CCDirector導演類的方法430
13.8CCTexture紋理類 431
13.8.1紋理的相關概念431
13.8.2紋理相關的類 431
13.9CCSprite精靈類 432
13.9.1CCSprite精靈類的屬性 432
13.9.2CCSprite精靈類的方法 432
13.9.3CCSpriteFrame精靈幀 435
13.9.4CCSpriteFrameCache精靈幀快取 436
13.9.5CCSpriteBatchNode精靈表單 436
13.9.6製作精靈表單 438
13.9.7精靈表單示例 440
13.10cocos2d中的動作442
13.10.1cocos2d中的動作類443
13.10.2基本動作 444
13.10.3組合動作 453
13.10.4Ease動作 454
13.10.5延遲動作 456
13.10.6方法回調動作 456
13.10.7代碼塊調用動作 460
13.11cocos2d中的動畫462
13.11.1cocos2d中動畫相關的類462
13.11.2簡單動畫效果 463
13.11.3使用精靈表單實現動畫效果 464
13.12cocos2d中的文本466
13.12.1CCLabelTTF類 466
13.12.2CCLabelBMFont類 467
13.13cocos2d中的聲音470
13.13.1SimpleAudioEngine470
13.13.2遊戲中的聲音設定選項功能實現 474
13.14瘋狂打飛機遊戲 477
13.14.1開始前的準備工作 477
13.14.2添加遊戲選單項功能 478
13.14.3預載入遊戲資源 480
13.14.4玩家飛機飛行效果 485
13.14.5玩家飛機Touch實現 487
13.14.6背景滾動效果 488
13.14.7添加敵機 491
13.14.8玩家飛機添加子彈並射擊 494
13.14.9添加背景音樂 498
13.14.10 添加遊戲積分統計 498
13.14.11 添加遊戲大Boss 500
13.15本章小結 504
第14章 粒子效果、瓦片地圖和物理引擎 505
14.1粒子系統相關的類506
14.1.1CCParticleSystem類506
14.1.2CCParticleSystemQuad類511
14.1.3CCParticleBatchNode類 512
14.2cocos2d中內置的粒子系統 512
14.2.1使用cocos2d內置的粒子系統513
14.2.2手動創建粒子系統類514
14.3使用Particle Designer生成粒子效果 517
14.3.1Particle Designer粒子工具的使用 518
14.3.2使用plist檔案創建粒子系統520
14.4瓦片地圖520
14.4.1下載和安裝Tiled地圖編輯器521
14.4.2使用Tiled繪製地圖522
14.5Tiled地圖相關的類 527
14.5.1CCTMXTiledMap類 527
14.5.2CCTMXLayer類 529
14.5.3CCTMXObjectGroup類530
14.6在項目中使用Tiled地圖 530
14.7真實手遊:萌仙 535
14.7.1設計地圖場景 535
14.7.2載入地圖 535
14.7.3地圖的移動537
14.7.4物體遮擋效果 539
14.7.5設定障礙物542
14.7.6尋路算法 544
14.7.7隨機出現怪物 549
14.7.8玩家和怪物進行戰鬥552
14.8Box2D物理引擎 559
14.8.1物理引擎概述 559
14.8.2Box2D的核心概念 559
14.8.3Box2D常用的屬性和方法 562
14.8.4Box2D模板項目HelloBox2D 563
14.8.5HelloBox2D模板項目代碼分析565
14.8.6cocos2d和Box2D 573
14.8.7Box2D開發步驟 575
14.9開發Box2D項目 575
14.10憤怒的小鳥 581
14.10.1開始前的準備工作 581
14.10.2製作遊戲啟動畫面 581
14.10.3進度條製作 582
14.10.4遊戲中的粒子效果 585
14.10.5遊戲選關操作 590
14.10.6設計關卡數據 594
14.10.7設計精靈類 596
14.10.8遊戲主界面 601
14.10.9彈弓發射小鳥 604
14.10.10 整合Box2D物理引擎 609
14.10.11 遊戲過關設計 613
14.11本章小結 616
前言
《瘋 狂iOS講義》下冊來了--作為上冊的延續,本書的內容更加深入,更加"有趣",如果你已經挺過了上冊中Objective-C語法的介紹、iOS界面開 發中繁多的UI控制項,恭喜你可以順利進入下冊學習了。本書內容包括《萌仙》模組、《打飛機》、《貪食蛇》、《天氣預報》、《憤怒的小鳥》等大量精彩的 iOS套用和遊戲,本書不僅會細緻地介紹開發這些套用和遊戲所需的基礎知識,而且會真正帶領讀者從零開始,逐步完成這些套用和遊戲。如果讀者認真學完本 書,並掌握書中內容,將可以完全勝任iOS套用和遊戲開發。
雖然本書的知識點足夠深入、實用,但對於已經掌握《瘋狂iOS講義》上冊內容的讀者來說,本書的知識依然很容易看懂、理解,並很容易動手做出來。只要讀者真正對書中套用、遊戲感興趣,並願意扎紮實實地動手實踐,完全可以很好地學會、掌握書中這些知識點。
有些讀者可能會被市面上某些薄薄的圖書吸引:他們以為閱讀一本薄薄的圖書更容易掌握這門技術。但實際上,無論你學還是不學,技術就在那裡;無論作者寫還是不寫,技術就在那裡。如果一本技術圖書太過單薄,則可能有以下三種情況:
技術本身就簡單,只要簡單的介紹即可。
技術並不簡單,但圖書只介紹了該技術的皮毛,讀者學起來很輕鬆,但實際開發時就感覺"書到用時方恨少"。
技術並不簡單,該圖書高度概括、提綱挈領地歸納該技術的要點。
iOS開發絕不是三言兩語就可以說清的一門技術,而《瘋狂iOS講義》並不打算只歸納該技術的要點,而是力求全面、 細緻地介紹iOS開發的相關內容,《瘋狂iOS講義》包括了兩大塊知識:Objective-C語言和iOS平台的套用開發,因此不得不將《瘋狂iOS講 義》分為上、下冊(最初打算用一本書介紹完,但後來發現這個想法做不到)。
寫一本全面、系統的圖書比寫一本薄薄的書辛苦多了!如果只是寫一本薄薄的書,則可以隨便介紹點常見的知識,加點例子就行了。但如果打算全面、系統地講清楚一門技術,就需要高屋建瓴地把握整個技術的大綱,並理清各知識點之間的關聯,然後還需要逐個介紹每個知識點的細節。
有一點小小的遺憾:出於篇幅限制,《瘋狂iOS講義》下冊中沒有包括SpriteKit(iOS 7新增的遊戲引擎)相關內容,除此之外,本書基本全面介紹了iOS 7新增的API,這是考慮到iOS遊戲開發者普遍依然採用cocos2d,因此本書暫時沒有涉及SpriteKit相關內容。
本書有什麼特點
本書以《瘋狂iOS講義》上冊為基礎,本書中不包含Objective-C語法、iOS界面編程、圖形圖像處理等基礎知識。
本書包含多點觸摸與手勢檢測、套用國際化、數據存儲、SQLite資料庫與Core Data、iOS多媒體開發、加速計和陀螺儀、多執行緒、網路編程、定位、地圖、推送機制、iCloud服務等內容,本書還通過瘋狂打飛機、萌仙、憤怒的小 鳥等實例介紹了cocos2d框架的功能和用法。
本書大部分章節由李剛執筆,本書最後兩章由瘋狂軟體教育中心的肖文吉老師執筆,最後由李剛統稿。
本書保持了"瘋狂體系"的一貫風格:操作步驟詳細,編程思路清晰,語言平實。認真看完本書,把書中所有示例都練習一 遍,本書帶給你的只是9個字:"看得懂、學得會、做得出"。本書不會讓你認識一堆新名詞,只會讓你學會實際的iOS套用開發。只要讀者認真閱讀本書,並掌 握書中知識,那么就完全可以勝任企業中iOS套用開發、iOS手機遊戲開發的要求。
讀者在閱讀本書時如果遇到知識上的問題,則可以登錄瘋狂Java聯盟與廣大學習者交流,筆者也會通過該平台與大家一起交流、學習。
本書還具有如下幾個特點:
1.知識全面,覆蓋面廣
不得不說,本書是市面上所有iOS圖書中內容最全面、體系最龐大的。本書上、下冊全方位地涵蓋了 Objective-C語法、iOS開發基礎知識,iOS開發高級知識、cocos2d遊戲開發框架等內容。這些知識將帶領讀者從零開始,逐步掌握iOS 開發的基礎,直至步入iOS開發殿堂。
2.內容實際,實用性強
本書並不局限於枯燥的理論介紹,而是採用了"項目驅動"的方式來講授知識點。全書有近百個實例,幾乎每個知識點都可以找到對應的參考實例。書中還提供了天氣預報、瘋狂打飛機、萌仙、憤怒的小鳥等真實的套用和手遊,具有極高的參考價值。
3.講解詳細,上手容易
本書保持了"瘋狂系列"的一貫風格:操作步驟詳細,編程思路清晰,語言平實。只要讀者有學習的決心和毅力,認真掌握本書上、下冊的知識,即可完全勝任實際企業中 iOS開發的要求。
(注:因百度百科對詞條語言風格與措辭限制較為嚴格,故對前言內容進行部分刪減。詳細內容參見原書)
2014-1-8