Cocoa Touch層包含了構建iOS程式的關鍵framework。這層定義了程式的基本結構,支援如多任務,基於觸摸的輸入,push notification等關鍵技術,以及很多上層系統服務。設計你的程式時,你應該首先查看這個層包含的技術,看看他們是否符合你的需要。
上層特性
下面介紹一些Cocoa Touch層的關鍵技術。
◆多任務
iOS SDK 4.0以及以後的SDK構建的程式且運行在iOS 4.0和以後版本的裝置上),使用者按下Home按鈕的時候程式不會結束;它們會挪到後台運行。UIKit協助實現的多任務支援,讓程式可以平滑切換到後台,或者切換回來。
為了節省電力,大多數程式進入後台後馬上就會被系統暫停。暫停程式還在記憶體裡,但是不執行任何代碼。這樣程式需要重新啟用的時候可以快速恢複,但是同時不浪費任何電力。然而,在如下原因下,程式也可以在後台下運行:
程式可以申請有限的時間完成一些重要的任務。
程式可以聲明支援某種特定的服務,需要周期的後台已耗用時間。
程式可以使用本地通知在指定的時間給使用者發資訊,不管程式是否在運行。
不管你的程式在後台是被暫停還是繼續運行,支援多任務都不需要你做什麼額外的事情。系統會在切換到後台或者切換回來的時候,通知程式。在這個時刻,程式可以直接執行一些重要的任務,例如儲存使用者資料等。
◆列印
從iOS 4.2開始,UIKit引入了列印支援,允許程式把內容通過無線網路發送給附近的印表機。關於列印,大部分重體力勞動由UIKit承擔。它管理列印介面,和你的程式協作渲染列印的內容,管理印表機裡列印工作的計劃和執行。
程式提交的列印工作會被傳遞給列印系統,它管理真正的列印流程。裝置上所有程式的列印工作會被排成隊列,先入先出的列印。使用者可以從列印中心程式看到列印工作的狀態。所有這些列印細節都由系統自動處理。
注意:僅有支援多任務的裝置才支援無線列印。你的程式可使用UIPrintInteractionController對象來檢測裝置是否支援無線列印。
◆資料保護
iOS4.0起引入了資料保護功能,需要處理敏感使用者資料的應用程式可以使用某些裝置內建的加密功能某些裝置不支援)。當程式指定某檔案受保護的時候,系統就會把這個檔案用加密的格式儲存起來。鎖定裝置的時候,你的程式和潛在入侵者都無法訪問這些資料。然而,當裝置由使用者解鎖後,會產生一個密鑰讓你的程式訪問檔案。
要實現良好的資料保護,需要仔細考慮如何建立和管理你需要保護的資料。應用程式必須在資料建立時確保資料安全,並適應裝置上鎖與否帶來的檔案可訪問性的變化。
◆蘋果推通知服務
從iOS 3.0開始,蘋果發布了蘋果推通知服務,這一服務提供了一種機制,即使你的程式已經退出,仍舊可以發送一些新資訊給使用者。使用這種服務,你可以在任何時候,推送文本通知給使用者的裝置,可以包含程式表徵圖作為標識,發出提示聲音。這些訊息提示使用者,應該開啟你的程式接收查看相關的資訊。
從設計的角度看,要讓iOS程式可以發送推通知,需要兩部分的工作。首先,程式必須請求通知的發送,且在送達的時候能夠處理通知數據。然後,你需要提供一個服務端流程去產生這些通知。這一流程發生在你自己的伺服器上,和蘋果的推通知服務一起觸發通知。
◆本地通知
從iOS 4.0開始,蘋果推出了本地通知,作為推通知機制的補充,應用程式使用這一方法可以在本地建立通知資訊,而不用依賴一個外部的伺服器。運行在背景程式,可以在重要時間發生的時候利用本地通知提醒使用者注意。例如,一個運行在背景導航程式可以利用本地通知,提示使用者該轉彎了。程式還可以預定在未來的某個時刻發送本地通知,這種通知即使程式已經被終止也是可以被發送的。
本地通知的優勢在於它獨立與你的程式。一旦通知被預定,系統就會來管理它的發送。在訊息發送的時候,甚至不需要應用程式還在運行。
◆手勢辨識器
從iOS 3.2起,引入了手勢辨識器,你可以把它附加到view上,然後用它們檢測通用的手勢,如划過或者捏合。附加手勢辨識器到view後,設定手勢發生時執行什麼操作。手勢辨識器會跟蹤原始的觸摸事件,使用系統預置的演算法判斷目前的手勢。沒有手勢辨識器,你就必須自己做這些計算,很多都相當的複雜。
UIKit包含了UIGestureRecognizer 類,定義了所有手勢辨識器的標準行為。你可以定義自己的定製手勢辨識器子類,或者是使用UIKit提供的手勢辨識器子類來處理如下的標準手勢:
◆點擊任何次數)
◆捏合縮放
◆平移或者拖動
◆划過任何方向)
◆旋轉手指分別向相反方向)
◆長按
◆檔案分享權限設定支援
檔案分享權限設定支援是從iOS 3.2開始引入的,利用它程式可以把使用者的資料檔案開發給iTunes 9.1以及以後版本。程式一旦聲明支援檔案分享權限設定,那麼它的/Documents目錄下的檔案就會開放給使用者。使用者可以用iTunes放檔案進去,或者取出來。這一特性並不允許你的程式和同一裝置裡面的其他程式共用檔案;那種行為需要用剪貼簿,或者文本互動控制對象UIDocumentInteractionController)來實現。
要開啟檔案分享權限設定支援,請:
◆在程式的Info.ppst檔案內加入鍵UIFileSharingEnabled,值設定為YES。
◆把你要共用的檔案放在程式的Documents目錄內。
◆裝置插到使用者電腦時,iTunes在選定裝置的程式頁下面顯示檔案分享權限設定塊。
◆使用者可以在案頭上增加和刪除檔案。
支援檔案分享權限設定的程式必須能夠識別放到Documents目錄內的檔案,並正確的處理它們。例如,程式應該用自己的介面顯示新出現的檔案,而不是把這些檔案列在目錄裡,問使用者該如何處理這些檔案。
◆點對點對戰服務
從iOS 3.0起引入的Game Kit架構提供了基於藍芽的點對點對戰功能。你可以使用點對點連接和附近的裝置建立通訊,是實現很多多人遊戲中需要的特性。雖然這主要是用於遊戲的,但是也可以用於其他類型的程式中。
◆標準系統View Controller
Cocoa Touch層的很多架構提供了用來展現標準系統介面的View Controller。你應該盡量使用這些View Controller,以保持使用者體驗的一致性。任何時候你需要做如下操作的時候,你都應該用對應架構提供的View Controller:
顯示和編輯連絡人資訊◆使用Address Book UI架構提供的View Controller。
建立和編輯日曆事件◆使用Event Kit UI架構提供的View Controller。
編寫email或者短訊息◆使用Message UI架構提供的View Controller。
開啟或者預覽檔案的內容◆使用UIKit架構裡的UIDocumentInteractionController類。
拍攝一張照片,或者從使用者的照片庫裡面選擇一張照片◆使用UIKit架構內的UIImagePickerController類。
拍攝一段視頻◆使用UIKit架構內的UIImagePickerController類。
◆外部顯示支援
iOS 3.2開始,引入了外部顯示支援,允許一些iOS裝置可以通過支援的纜線串連到外部的顯示器上。串連時,程式可以用對應的螢幕來顯示內容。螢幕的資訊,包括它支援的解析度,都可以用UIKit架構提供的介面訪問。你也可以用這個架構來把程式的視窗串連到一個螢幕,或另外一個螢幕。
Cocoa Touch架構
下面的章節介紹Cocoa Touch層的架構和它們提供的服務。
Address Book UI架構
Address Book UI架構AddressBookUI.framework)是一個Objective-C的編程介面,用來顯示建立新連絡人、編輯和選擇已有連絡人的標準系統介面。這個架構讓你可以輕鬆的在程式裡面顯示連絡人資訊,同時確保你的程式使用和其他程式一樣的介面,保持了平台的一致性。