譯者序
前 言
緻 謝
第1章 手勢與觸摸 1
1.1 觸摸 1
1.1.1 觸摸操作所處的階段 2
1.1.2 UIResponder類中的觸摸事件響應方法 3
1.1.3 對視圖的觸摸 4
1.1.4 多點觸摸 4
1.1.5 手勢識彆器 5
1.2 解決方案:添加簡單的直接操縱界麵 5
1.3 解決方案:添加拖動手勢識彆器 7
1.4 解決方案:同時使用多個手勢識彆器 9
1.5 解決方案:限製移動 14
1.6 解決方案:測試觸摸 15
1.7 解決方案:針對位圖的觸摸測試 17
1.8 解決方案:根據觸摸情況在屏幕上繪製內容 19
1.9 解決方案:令繪製效果變得平滑 21
1.10 解決方案:啓用多點觸摸 24
1.11 解決方案:檢測圓圈手勢 27
1.12 解決方案:創建自定義手勢識彆器 32
1.13 解決方案:把滾動視圖中的內容拖曳到外麵 34
1.14 解決方案:實時的觸摸反饋 37
1.14.1 啓用觸摸反饋效果 38
1.14.2 攔截並轉發觸摸事件 38
1.14.3 實現TOUCHkit的TOUCHkitView類 40
1.15 解決方案:嚮視圖中添加菜單 42
1.16 小結 43
第2章 構建並使用控件 45
2.1 UIControl類 45
2.1.1 目標-動作模式 46
2.1.2 控件的種類 46
2.1.3 控件事件 46
2.2 按鈕 48
2.3 Interface Builder中的按鈕 50
2.4 解決方案:構建按鈕 51
2.4.1 多行按鈕文本 54
2.4.2 為按鈕添加動畫元件 54
2.4.3 為按鈕添加額外狀態 55
2.5 解決方案:使按鈕以動畫效果來響應用戶 55
2.6 解決方案:為滑杆控件添加自定義的滑塊 57
2.6.1 定製UISlider控件 57
2.6.2 添加優化代碼 58
2.7 解決方案:創建可以連續點擊兩次的分段選擇控件 61
2.7.1 實現第二次點擊時的反饋效果 62
2.7.2 控件及帶屬性的字符串 63
2.8 開關控件與步進控件 64
2.9 解決方案:編寫UIControl的子類 65
2.9.1 創建控件 68
2.9.2 追蹤觸摸事件 68
2.9.3 派發控件事件 69
2.10 解決方案:構建評分所用的Star Slider控件 69
2.11 解決方案:構建觸摸轉盤控件 72
2.12 解決方案:創建拉曳控件 75
2.12.1 為控件添加提示效果 75
2.12.2 測試觸摸 77
2.13 解決方案:構建自定義的鎖定控件 80
2.14 解決方案:圖片庫查看器 83
2.15 構建工具欄 85
2.16 小結 88
第3章 提醒用戶 89
3.1 直接嚮用戶彈齣警告視圖 89
3.1.1 構建簡單的警告視圖 89
3.1.2 設置UIAlertView的委托 91
3.1.3 顯示UIAlertView 92
3.1.4 各種UIAlertView 92
3.2 解決方案:構建支持塊的警告視圖 93
3.2.1 塊簡介 93
3.2.2 使用塊時避免保留循環 95
3.3 解決方案:將變長參數列錶與UIAlertView結閤起來使用 98
3.4 展示選項列錶 99
3.4.1 滾動菜單 101
3.4.2 在動作錶中顯示文本 101
3.5 將操作進度告知用戶並提示其稍等片刻 102
3.5.1 使用UIActivity-IndicatorView 103
3.5.2 使用UIProgressView 103
3.6 解決方案:在屏幕上繪製模態的進度指示器 104
3.7 解決方案:自製的模態警告視圖 106
3.8 解決方案:基本的popover 110
3.9 解決方案:本機通知 111
3.10 用網絡活動指示器提醒用戶 113
3.11 解決方案:播放簡單的提示音 114
3.11.1 System Sound 114
3.11.2 為使用係統框架而引入模塊 115
3.11.3 震動 115
3.11.4 警示音 116
3.11.5 延遲 117
3.11.6 釋放係統音 117
3.12 小結 117
第4章 編排視圖及其動畫效果 119
4.1 視圖層級 119
4.2 解決方案:用樹狀圖來描述視圖層級 121
4.3 解決方案:查詢子視圖 123
4.4 管理子視圖 125
4.4.1 添加子視圖 125
4.4.2 重排及刪除子視圖 125
4.4.3 UIView的迴調方法 125
4.5 為視圖設定標簽並查找視圖 126
4.6 解決方案:通過對象關聯機製為視圖設定名稱 127
4.7 視圖的幾何特徵 129
4.7.1 框架 130
4.7.2 與CGRect有關的工具函數 130
4.7.3 CGPoint與CGSize 131
4.7.4 CGAffineTransform 132
4.7.5 坐標係統 133
4.8 解決方案:操控視圖的框架 133
4.8.1 調整視圖的尺寸 134
4.8.2 CGRect與中心點 136
4.8.3 視圖的其他幾何特徵 137
4.9 解決方案:獲取與坐標變換有關的信息 141
4.9.1 獲取與變換有關的屬性 141
4.9.2 判斷兩個視圖是否相交 142
4.10 與顯示和交互有關的特徵 147
4.11 UIView的動畫效果 148
4.12 解決方案:視圖的淡入與淡齣 150
4.13 解決方案:交換兩個視圖的前後順序 151
4.14 解決方案:翻轉視圖 151
4.15 解決方案:采用Core Animation API來製作切換效果 153
4.16 解決方案:使視圖在齣現之後迴彈 155
4.17 解決方案:關鍵幀動畫 156
4.18 解決方案:UIImageView的動畫效果 157
4.19 小結 158
第5章 視圖的約束係統 160
5.1 什麼是約束 161
5.2 約束係統所用的屬性 161
5.3 約束係統的運作規律 163
5.4 約束規則與框架屬性 165
5.4.1 固有內容的尺寸 165
5.4.2 對齊矩形 166
5.5 創建約束規則 167
5.5.1 基本約束規則聲明 167
5.5.2 用可視化格式字符串聲明約束規則 168
5.5.3 變量綁定 169
5.6 格式字符串 169
5.6.1 方嚮 169
5.6.2 連接 171
5.7 謂詞 173
5.7.1 指標 173
5.7.2 描述兩個視圖關係的謂詞 174
5.7.3 優先級 174
5.8 格式字符串總結 174
5.9 用格式字符串將視圖對齊並靈活調整其尺寸 176
5.10 處理約束規則的流程 176
5.11 管理約束規則 177
5.12 解決方案:實現約束規則之間的對比 178
5.13 解決方案:創建尺寸固定且受規則約束的視圖 181
5.13.1 禁用translatesAutoresizing-MaskIntoConstraints 181
5.13.2 令視圖齣現在上級視圖範圍內 182
5.13.3 限定視圖的尺寸 183
5.13.4 把前麵各節內容拼裝起來 183
5.14 解決方案:將兩個視圖居中對齊 185
5.15 解決方案:設定寬高比 186
5.16 解決方案:響應屏幕方嚮的變更 188
5.17 調試約束規則 190
5.18 解決方案:描述約束規則 191
5.19 用宏來創建約束規則 194
5.20 小結 197
第6章 文本輸入 198
6.1 解決方案:隱藏UITextField的鍵盤 199
6.1.1 阻止係統把鍵盤隱藏起來 200
6.1.2 UITextInputTraits協議中的屬性 200
6.1.3 文本框的其他屬性 201
6.2 解決方案:把帶有自定義輔助視圖的鍵盤隱藏起來 203
6.3 解決方案:根據鍵盤來調整文本視圖 205
6.4 解決方案:創建自定義的輸入視圖 209
6.5 解決方案:使視圖具備文本輸入功能 213
6.6 解決方案:為非文本視圖添加自定義的輸入視圖 216
6.7 解決方案:創建更好的文本編輯器(第一部分) 218
6.8 解決方案:創建更好的文本編輯器(第二部分) 221
6.8.1 啓用Attributed Text 221
6.8.2 控製文本的樣式 221
6.8.3 可供UIResponder使用的其他功能 223
6.9 解決方案:過濾用戶所輸入的文本 224
6.10 解決方案:檢測文本模式 226
6.10.1 構建自己的正則錶達式 227
6.10.2 枚舉正則錶達式 227
6.10.3 數據探測器 228
6.10.4 使用內置類型的探測器 229
6.10.5 有用的網站 229
6.11 解決方案:檢測UITextView中的拼寫錯誤 231
6.12 搜尋文本中的字符串 232
6.13 小結 233
第7章 使用視圖控製器 234
7.1 視圖控製器 234
7.1.1 UIViewController類 235
7.1.2 導航控製器 235
7.1.3 標簽欄控製器 235
7.1.4 分欄視圖控製器 236
7.1.5 頁麵視圖控製器 236
7.1.6 popover控製器 236
7.2 使用導航控製器與分欄視圖控製器來開發程序 237
7.2.1 使用導航控製器與導航棧 238
7.2.2 推入與彈齣視圖控製器 239
7.2.3 導航欄上的按鈕 239
7.2.4 延伸至屏幕邊緣的布局形式 240
7.3 解決方案:UINavigationItem類 241
7.3.1 標題與後退按鈕 242
7.3.2 宏 242
7.4 解決方案:模態界麵 244
7.5 解決方案:構建分欄視圖控製器 248
7.6 解決方案:用分欄視圖及導航控製器創建通用的程序 253
7.7 解決方案:標簽欄 255
7.8 記住標簽的狀態 259
7.9 解決方案:頁麵視圖控製器 262
7.9.1 與書籍展示風格有關的屬性 262
7.9.2 封裝實現細節 263
7.9.3 範例代碼詳解 269
7.9.4 構建界麵索引 270
7.10 解決方案:自定義的容器 271
7.10.1 添加與移除子視圖控製器 274
7.10.2 視圖控製器之間的切換效果 275
7.11 解決方案:segue 276
7.12 小結 282
第8章 常用的控製器 284
8.1 圖像選取器控製器 284
8.1.1 圖像來源 284
8.1.2 在iPhone和iPad中顯示選取器 285
8.2 解決方案:選取圖像 286
8.2.1 嚮模擬器中添加圖片 286
8.2.2 AssetsLibrary模塊 286
8.2.3 展示選取器 287
8.2.4 處理delegate的迴調 288
8.3 解決方案:拍攝照片 293
8.3.1 配置選取器 293
8.3.2 顯示圖像 295
8.3.3 把圖像保存到相冊 295
8.4 解決方案:錄製視頻 297
8.4.1 創建錄製視頻用的選取器 298
8.4.2 保存視頻 299
8.5 解決方案:用媒體播放器播放視頻 299
8.6 解決方案:編輯視頻 302
8.7 解決方案:選取並編輯視頻 304
8.8 解決方案:通過電子郵件發送圖片 306
8.9 解決方案:發送文本消息 309
8.10 解決方案:在社交網站發布消息 311
8.11 小結 313
第9章 創建並管理錶格視圖 314
9.1 iOS的錶格 314
9.2 委托 315
9.3 創建錶格 316
9.3.1 錶格的樣式 316
9.3.2 排布錶格視圖 316
9.3.3 設置數據源 317
9.3.4 提供單元格 317
9.3.5 注冊單元格類 317
9.3.6 從隊列中取齣單元格 318
9.3.7 設置delegate 318
9.4 解決方案:實現簡單的錶格 319
9.4.1 數據源方法 319
9.4.2 響應用戶的觸摸 322
9.5 UITableViewCell類 322
9.5.1 單元格的selectionStyle屬性 323
9.5.2 添加自定義的單元格受選效果 323
9.6 解決方案:創建帶有選取標記的單元格 323
9.7 給單元格添加詳情展示控件 325
9.8 解決方案:編輯錶格 327
9.8.1 添加撤銷功能 331
9.8.2 實現撤銷功能 332
9.8.3 顯示移除單元格所用的控件 332
9.8.4 處理刪除請求 332
9.8.5 通過滑動手勢刪除單元格 333
9.8.6 調整單元格的順序 333
9.8.7 添加單元格 333
9.9 解決方案:操控錶格的區段 334
9.9.1 構建區段 334
9.9.2 區段數量與區段內的行數 335
9.9.3 返迴單元格 335
9.9.4 創建每個區段的頭部標題 337
9.9.5 定製錶格與區段的頭部及尾部 338
9.9.6 創建區段索引 338
9.9.7 處理索引與區段不匹配的問題 339
9.9.8 為分區錶格實現委托方法 339
9.10 解決方案:在錶格中搜索 339
9.10.1 創建搜索顯示控製器 341
9.10.2 為搜索顯示控製器注冊單元格 341
9.10.3 構建支持搜索功能的數據源方法 342
9.10.4 委托方法 343
9.10.5 使用與搜索功能相配套的索引 344
9.11 解決方案:給錶格添加下拉刷新功能 345
9.12 解決方案:添加指令行 348
9.13 製作自定義的分組錶格 351
9.14 解決方案:構建含有多個滾輪的錶格 352
9.14.1 創建UIPickerView 353
9.14.2 數據源方法與委托方法 353
9.14.3 使用帶有選取器的視圖 354
9.15 使用UIDatePicker 356
9.16 小結 357
第10章 集閤視圖 358
10.1 集閤視圖與錶格的異同 358
10.2 建立集閤視圖 360
10.2.1 通過控製器使用集閤視圖 361
10.2.2 直接使用集閤視圖 361
10.2.3 數據源與委托 362
10.3 流式布局 362
10.3.1 滾動方嚮 362
10.3.2 條目的尺寸以及行間距 362
10.3.3 頭部與尾部的尺寸 364
10.3.4 內邊距 365
10.4 解決方案:采用流式布局的簡單集閤視圖 366
10.5 解決方案:自定義單元格 370
10.6 解決方案:水平滾動的列錶 372
10.7 解決方案:創建交互式的布局效果 375
10.8 解決方案:滾動之後自動調整位置 377
10.9 解決方案:創建圓形布局 378
10.9.1 實現創建條目與刪除條目時的動畫效果 381
10.9.2 增強圓形布局的實用性 382
10.9.3 布局對象 383
10.10 解決方案:用手勢調整布局 383
10.11 解決方案:創建真正的網格狀布局 385
10.12 解決方案:為集閤視圖中的條目添加自定義菜單 391
10.13 小結 393
第11章 分享文檔與數據 394
11.1 解決方案:使用統一類型標識符 394
11.1.1 根據文件擴展名來決定UTI 395
11.1.2 把UTI轉換成擴展名或MIME類型 396
11.1.3 判斷兩個UTI之間是否有依從關係 397
11.1.4 獲取依從關係列錶 398
11.2 解決方案:訪問係統剪貼闆 400
11.2.1 存儲數據 401
11.2.2 存儲常見類型的數據 401
11.2.3 獲取數據 402
11.2.4 自動更新剪貼闆 402
11.3 解決方案:監控Documents文件夾 403
11.3.1 啓用文件分享功能 403
11.3.2 用戶對Documents文件夾的控製能力 403
11.3.3 在Xcode裏訪問應用程序沙盒 405
11.3.4 掃描新的文檔 405
11.4 解決方案:活動視圖控製器 408
11.4.1 展示活動視圖控製器 409
11.4.2 UIActivityItemSource協議 409
11.4.3 UIActivityItemProvider類 411
11.4.4 實現UIActivityItemSource協議中的迴調方法 411
11.4.5 添加分享服務 412
11.4.6 與各種數據類型相對應的操作 416
11.4.7 排除某些操作 417
11.5 解決方案:Quick Look預覽控製器 417
11.6 解決方案:使用文檔交互控製器 420
11.6.1 創建UIDocumentInteraction-Controller實例 420
11.6.2 UIDocumentInteraction-Controller的屬性 424
11.6.3 提供快速查看文檔的功能 424
11.6.4 判斷是否應啓用“Open in…”操作 425
11.7 解決方案:聲明程序所支持的文檔類型 426
11.7.1 創建自定義的文檔類型 427
11.7.2 實現對文檔的支持 428
11.8 解決方案:創建基於URL的服務 431
11.8.1 聲明模式 432
11.8.2 測試URL 433
11.8.3 添加處理程序方法 433
11.9 小結 434
第12章 淺談Core Data 435
12.1 Core Data簡介 435
12.2 實體與模型 436
12.2.1 構建模型文件 436
12.2.2 屬性與關係 437
12.2.3 構建NSManagedObject的子類 437
12.3 創建上下文 438
12.4 添加數據 439
12.5 查詢數據庫 441
12.5.1 配置NSFetchRequest 442
12.5.2 執行數據獲取操作 443
12.6 移除對象 444
12.7 解決方案:用Core Data來充當錶格的數據源 445
12.7.1 訪問索引路徑 445
12.7.2 sectionNameKeyPath屬性 445
12.7.3 獲取每個區段內的對象 445
12.7.4 sectionIndexTitles屬性 446
12.7.5 Core Data與錶格之間的緊密結閤 446
12.8 解決方案:用Core Data實現錶格的搜索功能 448
12.9 解決方案:為Core Data錶格視圖添加編輯功能 450
12.9.1 添加撤銷/重做功能 451
12.9.2 創建撤銷事務 452
12.9.3 重新思考編輯功能 452
12.10 解決方案:由Core Data所驅動的集閤視圖 456
12.11 小結 461
第13章 網絡編程基礎 462
13.1 解決方案:判斷網絡狀態 462
13.2 監測聯網狀況是否發生變化 465
13.3 URL加載係統 467
13.3.1 配置 467
13.3.2 任務 468
13.3.3 NSURLSession 468
13.4 解決方案:簡單的下載 469
13.5 解決方案:在下載過程中提供反饋 473
13.6 解決方案:後颱傳輸 482
13.6.1 測試後颱傳輸 484
13.6.2 Web服務 484
13.7 解決方案:使用NSJSONSeriali-zation類 485
13.8 解決方案:將XML轉換為樹狀結構 487
13.8.1 樹 489
13.8.2 構建解析樹 489
13.9 小結 492
第14章 針對特定設備的開發 493
14.1 訪問基本的設備信息 493
14.2 添加設備能力限製 494
14.2.1 提供描述信息以徵求用戶同意 496
14.2.2 Info.plist文件中其他常用的鍵 496
14.3 解決方案:檢查設備距離與電池狀態 496
14.3.1 啓用與禁用距離感應器 497
14.3.2 監控電池狀態 497
14.3.3 判斷設備是否具有Retina顯示屏 499
14.4 解決方案:獲取設備的其他信息 500
14.5 Core Motion基礎知識 502
14.5.1 判斷設備是否支持某種感應器 502
14.5.2 獲取感應器數據 503
14.6 解決方案:通過加速度來判斷“上”方嚮 503
14.7 使用基本的方嚮值 504
14.7.1 根據加速計來判斷方嚮 505
14.7.2 計算相對角度 506
14.8 解決方案:使用加速計來移動屏幕上的物體 507
14.9 解決方案:基於加速計的滾動視圖 511
14.10 解決方案:獲取並使用設備的姿態 513
14.11 用Motion Event來檢測晃動 514
14.12 使用外接屏幕 515
14.12.1 檢測屏幕 516
14.12.2 獲取屏幕分辨率 517
14.12.3 配置視頻輸齣 517
14.12.4 添加CADisplayLink 518
14.12.5 對過掃描進行補償 518
14.12.6 VIDEOkit 518
14.13 追蹤用戶 521
14.14 查詢可用的磁盤空間 522
14.15 小結 523
第15章 輔助功能 524
15.1 輔助功能基礎知識 524
15.2 啓用輔助功能 526
15.3 特徵 526
15.4 標簽 528
15.5 提示語 528
15.6 用模擬器測試輔助功能 529
15.7 把變化情況傳播齣去 531
15.8 在iOS上麵測試輔助功能 531
15.9 語音閤成 533
15.10 動態字體 534
15.11 小結 535
附錄A Objective-C字麵量 536
· · · · · · (
收起)