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的編程介面,用來顯示建立新連絡人、編輯和選擇已有連絡人的標準系統介面。這個架構讓你可以輕鬆的在程式裡面顯示連絡人資訊,同時
確保你的程式使用和其他程式一樣的介面,保持了平台的一致性。
更多關於Address Book UI架構的類和如何使用他們的資訊,參見iOS Address Book UI架構參考手冊
。
Event Kit UI架構
從iOS 4.0開始,引入了Event Kit UI架構(EventKitUI.framework)提供了用來顯示和編輯事件的view controller。
Game Kit架構
iOS 3.0引入了Game
Kit架構(GameKit.framework)支援在程式中進行點對點的網路通訊。尤其是這個架構支援了點對點的串連和遊戲內的語音通話功能。雖然這
些功能主要是用於多人對戰網路遊戲,但是也可以在非遊戲程式中使用。這個架構提供的網路功能是構建在Bonjour之上幾個簡單的類實現的。這些類抽象了
很多網路細節,讓沒有網路編程經驗的開發人員也可以輕鬆地在程式中加入網路功能。
iAd架構
iOS 4.0引入了iAd架構(iAd.framework)支援程式中顯示banner廣告。廣告由標準的view構成,你可以把它們插入到你的使用者介面中,恰當的時候顯示。View本身和蘋果的廣告服務通訊,處理一切載入和展現廣告內容以及響應點擊等工作。
Map Kit架構
iOS 3.0引入了Map
Kit架構(MapKit.framework)提供了一個可以嵌入到程式裡的地圖介面。基於該介面的行為,它提供了可縮放的地圖view,可標記定製的
資訊。你可以把它嵌入在程式的view裡面,編程設定地圖的屬性,儲存當前顯示的地圖地區和使用者的位置。你還可以定義定製標記,或者使用標準標記(圖釘
標記),突出地圖上的地區,顯示額外的資訊。
從iOS
4.0開始,這個架構加入可拖動標記和定製覆蓋對象的功能。可拖動標記令你可以移動一個已經被放置到地圖上的標記,編程,也可以通過使用者行為。覆蓋對象提
供了建立比標記點更複雜的地表徵圖記的能力。你可以使用覆蓋對象在地圖上來放置資訊,例如大眾運輸路線,選區圖,停車地區,天氣資訊(如雷達資料)。
Message UI架構
iOS 3.0引入了Message
UI架構(MessageUI.framewok)提供了編寫和查詢發建箱訊息的能力。編寫支援包含了一個可以在程式中顯示的view
controller介面。你可以在介面中填寫你要發送資訊的內容。你可以設定收信人,主題和內容,以及附件。使用者可以選擇資訊的優先順序。選定後,資訊就
會在使用者的寄件匣裡面排隊等待發送。
iOS 4.0和以後的系統,這個架構開始支援用來編寫短訊息的view controller。你可以使用這種view controller來建立和編輯短訊息,而不用離開程式。和郵件編寫介面一樣,這個介面讓使用者選擇發送前是否編輯一下。
UIKit架構
UIKit架構
(UIKit.framework)包含iOS中實現圖形,事件驅動編程的等關鍵架構Objective-C編程介面。iOS中的每個程式都在使用這個架構來實現如下的核心特行:
◆應用程式管理
◆使用者介面管理
◆圖形和視窗支援
◆多任務支援
◆支援對觸摸的處理以及基於動作的事件
◆展現標準系統view和控制項的對象
◆對文本和web內容的支援
◆剪下,複製和粘貼的支援
◆使用者介面動畫支援
◆通過URL模式和系統內其他程式互動
◆支援蘋果推通知
◆對殘障人士的易用性支援
◆本地通知的預定和發送
◆建立PDF
◆支援使用行為類似系統鍵盤的定製輸入view
◆支援建立和系統鍵盤互動定製的text view
除了提供者的基礎代碼支援,UIKit還包括了一些裝置特性的支援,如:
◆加速度感應器資料
◆內建的網路攝影機(如果有的話)
◆使用者的照片庫
◆裝置名稱和型號資訊
◆電池狀態資訊
◆接近感應器資訊
◆耳機線控資訊