Cocoa Touch 層概述

  • App ExtensionsHandOff 后繼更新
  • 參照文檔中的Cocoa Touch Layer章節(jié)進(jìn)行理解翻譯, 英語水平有限, 有不正確的地方請指出, 僅供參考!

cocoa Touch層包含了構(gòu)建iOS應(yīng)用的關(guān)鍵框架. 這些框架設(shè)定了應(yīng)用的顯示樣式. 還提供了基本App的構(gòu)造基礎(chǔ)和對關(guān)鍵技術(shù)的支持, 如多線程, 基于觸摸的輸入, 推送通知, 和許多高層級的系統(tǒng)服務(wù). 在設(shè)計(jì)應(yīng)用時(shí), 你應(yīng)該優(yōu)先調(diào)查Cocoa Touch層中的技術(shù)是否滿足你的需求.


High-Level Features | 高層級的功能

下面的章節(jié)描述了Cocoa Touch層中的一些關(guān)鍵技術(shù)


Document Picker

Document picker視圖控制器允許用戶訪問應(yīng)用沙盒外的文件. 它是一個(gè)在應(yīng)用之間分享文檔的簡單機(jī)制. 還能夠啟用復(fù)雜的工作流以支持用戶在多個(gè)應(yīng)用之間編輯同一個(gè)文件.

Document picker允許你訪問來自多個(gè)Document providers的文件. 比如, iCloud document providers提供了訪問保存在其它應(yīng)用的iCloud容器中的文件. 第三方開發(fā)者可以使用Storage Provider extension來提供額外的Document providers


AirDrop

AirDrop能讓用戶與附近的設(shè)備分享圖片, 文檔, 鏈接和其它類型的數(shù)據(jù). 現(xiàn)有的UIActivityViewController類中內(nèi)置了使用AirDrop發(fā)送文件到其它iOS設(shè)備的功能支持. 該類在分享你指定的內(nèi)容時(shí)顯示不同的選擇. 如果你還沒有使用該類, 應(yīng)該考慮將它添加到界面中.

想接收使用AirDrop發(fā)送的文件, 應(yīng)用必須做如下操作:

  • 在Xcode中聲明合適的文件類型的支持. (Xcode添加合適的Key到App的Info.plist文件中) 系統(tǒng)使用該信息來判斷你的App是否能打開該文件
  • App Deleagte中實(shí)現(xiàn)application: openURL: sourceApplication: annotation:方法 (接收到一個(gè)新文件時(shí), 系統(tǒng)會(huì)調(diào)用該方法)

發(fā)送到應(yīng)用的文件會(huì)保存在應(yīng)用的Home目錄中的Document/Inbox文件夾中. 如果你想要修改該文件, 你必須先將文件從該目錄中移出. (系統(tǒng)只允許應(yīng)用對該文件進(jìn)行讀取和刪除操作). 如果設(shè)備當(dāng)前鎖屏, 則保存在該目錄的文件都使用進(jìn)行數(shù)據(jù)保護(hù)加密, 因此你必須為文件的不可訪問做好準(zhǔn)備.


TextKit

TextKit是功能全面的, 高層級的一系列類, 用來處理文本和排版. 使用TextKit, 你可以布局文本樣式到段落, 列, 頁面當(dāng)中. 你可以圍繞任意區(qū)域布局文字, 比如段落; 你也可以使用它來管理多種字體. 如果你考慮使用Core Text實(shí)現(xiàn)文本渲染, 那你應(yīng)該考慮使用TextKit來替代. TextKit集成了UIKit中所有基于文本的控制, 使得應(yīng)用相較之前iOS的實(shí)現(xiàn)僅需要更少的代碼和更簡單操作就可以創(chuàng)建, 編輯, 顯示和存儲(chǔ)文本.

TextKitUIKit的新類, 以及對現(xiàn)有類的擴(kuò)展來組成. 包含如下:

  • NSAttributedString類被擴(kuò)展了新屬性的支持.
  • NSLayoutManager類生成符號布局文本.
  • NSTextContainer類限定文本布局的范圍.
  • NSTextStorage 類設(shè)定管理全文本內(nèi)容的基礎(chǔ)接口.

UIKit Dynamics

現(xiàn)在應(yīng)用可以為UIView對象和其它遵循了UIDynamicItem協(xié)議的對象指定動(dòng)態(tài)行為. (遵循該協(xié)議的對象稱為dynamic items). 動(dòng)態(tài)行為通過合并現(xiàn)實(shí)世界的行為和特性到應(yīng)用當(dāng)中來提高用戶體驗(yàn). UIDynamic支持如下行為:

  • UIAttachmentBehavior對象(連接行為)指定兩個(gè)dynamic item或者dynamic item與點(diǎn)之間的連接. 當(dāng)一個(gè)item(或者點(diǎn))移動(dòng)時(shí), 附屬的item也會(huì)同樣的移動(dòng). 然而連接并不是靜態(tài)的. 一個(gè)附屬行為擁有衰減和振動(dòng)屬性來決定其行為隨著時(shí)間的改變.
  • UICollisionBehavior對象(碰撞行為)能讓dynamic items與其它item或與該行為指定的邊緣產(chǎn)生碰撞. 該行為還能讓這些item在碰撞中作出適當(dāng)?shù)姆磻?yīng).
  • UIGravityBehavior對象(重力行為)為dynamic items指定了重力矢量. dynamic items會(huì)在矢量方向進(jìn)行加速, 直到與其它合適配置的item或邊緣發(fā)生碰撞.
  • UISnapBehavior對象(捕獲行為)為dynamic item指定了捕獲點(diǎn). item會(huì)以配置好的效果被拉扯到該點(diǎn)上. 比如, dynamic item能夠像系在彈簧上那樣被拉扯到點(diǎn)上.

當(dāng)你將動(dòng)態(tài)行為添加到animator對象(UIDynamicAnimatorclass的實(shí)例)時(shí)它就會(huì)生效. animator提供了動(dòng)態(tài)行為執(zhí)行的上下文環(huán)境. 一個(gè)dynamic item可以有多個(gè)行為, 但這些行為都必須由同一個(gè)animator對象來執(zhí)行動(dòng)畫


Multitasking

對于iOS設(shè)備的用戶而言, 電池續(xù)航時(shí)間是要顧及的重要因素. iOS中的multitasking(多任務(wù)處理)模式就是在應(yīng)用需要處理關(guān)鍵工作時(shí)才提供時(shí)間, 以此最大化電池續(xù)航而設(shè)計(jì)的. 當(dāng)用戶按下Home鍵, 前臺(tái)應(yīng)用切換到后臺(tái)執(zhí)行環(huán)境. 如果應(yīng)用不再需要工作, 它會(huì)被中斷有效執(zhí)行狀態(tài)并進(jìn)入freeze-dried(冷凍)狀態(tài), 此時(shí)應(yīng)用會(huì)保持在內(nèi)存中但不會(huì)執(zhí)行任何代碼. 應(yīng)用確實(shí)需要處理某類工作時(shí), 可以向系統(tǒng)請求后臺(tái)執(zhí)行時(shí)間. 比如:

  • 應(yīng)用可以請求數(shù)量有限的時(shí)間來完成一些重要的任務(wù).
  • 支持特定服務(wù)的應(yīng)用(比如音頻播放)可以請求時(shí)間來提供這些服務(wù).
  • 應(yīng)用可以使用本地通知在指定時(shí)間產(chǎn)生用戶提醒, 不管應(yīng)用是否在運(yùn)行.
  • 應(yīng)用可以定期的從網(wǎng)絡(luò)上下載數(shù)據(jù).
  • 應(yīng)用可以在響應(yīng)遠(yuǎn)程推送通知的操作里執(zhí)行內(nèi)容下載.

Auto Layout

自動(dòng)布局可以幫助你使用少量的代碼實(shí)現(xiàn)動(dòng)態(tài)的界面. 使用自動(dòng)布局, 你會(huì)設(shè)定在用戶交互界面如何布局多個(gè)元素的規(guī)則. 相比之前使用的Springs(在Storyboard中以界面元素操作, 配合AutoResizing Mark)和Struts(純代碼)模式, 這些規(guī)則表達(dá)了一大類關(guān)系并且使用起來更加直觀. 比如, 你可以指定一個(gè)按鈕總是距離它父視圖左邊緣20個(gè)像素點(diǎn).

在自動(dòng)布局中使用的實(shí)體是稱為constraints(約束)的Object-C對象. 約束提供了數(shù)個(gè)優(yōu)勢:

  • 僅需要替換字符串即可支持本地化, 而不是要求你更新約束.
  • 為從右向左的語言提供了用戶交互界面元素"映射"的功能, 如希伯來語和阿拉伯語
  • 自動(dòng)布局促進(jìn)了在視圖層的對象和控制層的對象之間職責(zé)的分離.

一個(gè)視圖對象通常都有自身標(biāo)準(zhǔn)尺寸的值, 它在父視圖中的位置的值, 它的位置與兄弟視圖之間的關(guān)系值. 在一些非標(biāo)準(zhǔn)要求時(shí)視圖控制器可以重寫這些值.


Storyboards

使用Storyboard來設(shè)計(jì)應(yīng)用的用戶交互界面是推薦的方式. Storyboard能讓你在一個(gè)地方設(shè)計(jì)整個(gè)應(yīng)用的全部交互界面, 因此你可以看到所有的視圖和視圖控制器并理解它們之間是如何工作的. Storyboard的一個(gè)重要部分是可以設(shè)置segues(聯(lián)線)的能力, 即可以從一個(gè)視圖控制器過渡到另一個(gè). 這些過渡允許你捕獲用戶交互界面除了內(nèi)容之外的流動(dòng). 可以在Xcode設(shè)置這些過渡可見, 或者使用編程來初始化它們.

可以使用一個(gè)Storyboard文件來保存應(yīng)用里全部的視圖和視圖控制器, 或者使用多個(gè)視圖的Storyboard來管理界面的一部分. 為了更好的執(zhí)行性能, Xcode會(huì)在編譯時(shí)獲取Storyboard文件的內(nèi)容并將其劃分為可以被單獨(dú)加載的離散的塊. 應(yīng)用需要直接操作這些塊. UIKit框架提供了便利的類, 能在代碼中訪問Storyboard的內(nèi)容.


UI State Preservation

狀態(tài)保存為用戶提供了仿佛應(yīng)用一直都在運(yùn)行的無縫體驗(yàn), 即使實(shí)際上并非一直運(yùn)行. 如果系統(tǒng)遇到內(nèi)存壓力, 它可能會(huì)平靜的強(qiáng)制終止一或多個(gè)后臺(tái)應(yīng)用. 當(dāng)一個(gè)應(yīng)用從前臺(tái)移動(dòng)到后臺(tái)時(shí), 可以保存它的視圖和視圖控制器的狀態(tài). 在它的下次運(yùn)行循環(huán), 可以使用之前保存的狀態(tài)信息來恢復(fù)它的視圖和視圖控制器到之前的配置, 使它看起來似乎并沒有被退出過.


Apple Push Notification Service

推送通知服務(wù)提供了一種提醒用戶有新消息的新方式奋隶, 即使應(yīng)用并非有效的運(yùn)行著也能提醒. 使用該服務(wù), 可以在任何時(shí)候推送文本通知, 給應(yīng)用圖標(biāo)添加邊緣數(shù)字, 或在設(shè)備觸發(fā)可聽的提示音. 這些消息能讓用戶知道他們應(yīng)該打開應(yīng)用來接收相關(guān)信息. 在iOS7后, 你甚至可以推送安靜的通知來讓你的應(yīng)用知道有新的內(nèi)容可以下載了.

從設(shè)計(jì)的觀點(diǎn)看, 讓推送通知iOS應(yīng)用上工作主要有兩個(gè)部分. 第一, 應(yīng)用必須請求通知的傳遞并在通知傳遞過來時(shí)進(jìn)行數(shù)據(jù)處理. 第二, 你需要提供服務(wù)端處理來生成通知, 該處理存在于你的服務(wù)中, 并能對蘋果遠(yuǎn)程推送服務(wù)產(chǎn)生觸發(fā)通知的作用.


Local Notification

通過為應(yīng)用提供本地化生成通知的方式來代替依賴外部服務(wù)的方式, 本地通知補(bǔ)全了現(xiàn)有的推送通知機(jī)制. 當(dāng)重要事件發(fā)生時(shí), 運(yùn)行在后臺(tái)的應(yīng)用可以使用本地通知作為吸引用戶注意的方式. 比如, 運(yùn)行在后臺(tái)的原生應(yīng)用可以使用本地通知來提醒用戶是時(shí)候要轉(zhuǎn)彎了. 應(yīng)用也可以安排本地通知在未來的日期和時(shí)間觸發(fā), 而且就算應(yīng)用并沒有在運(yùn)行也能觸發(fā)這些通知.

  • 本地通知的高級之處在于它們與你的應(yīng)用是相互獨(dú)立的. 在通知被安排后, 系統(tǒng)會(huì)管理它的遞交. 當(dāng)通知傳遞到達(dá)時(shí), 你的應(yīng)用甚至都不需要運(yùn)行.

Gesture Recognizers

手勢識(shí)別能檢測常見類型的手勢, 比如在應(yīng)用的視圖上平滑和捏合. 它們與系統(tǒng)使用同樣的觸發(fā)機(jī)制來檢測手勢, 因此手勢識(shí)別為應(yīng)用提供了一致的行為. 想使用時(shí), 要為你的視圖附加手勢識(shí)別器并給它指定手勢觸發(fā)時(shí)執(zhí)行的事件. 手勢識(shí)別器能追蹤原始的觸摸事件并它們構(gòu)成預(yù)期手勢時(shí)檢測出來.

所有的手勢識(shí)別器都基于UIGestureRecognizer類, 它定義了基本的行為. UIKit提供了標(biāo)準(zhǔn)手勢識(shí)別器的子類來識(shí)別taps(點(diǎn)擊), pinches(捏合), pans(平掃, 慢速), swipes(輕掃, 快速), rotations(旋轉(zhuǎn)). 你也可以調(diào)整大部分手勢識(shí)別器的行為來適應(yīng)應(yīng)用的需要. 比如, 你可以讓點(diǎn)擊手勢識(shí)別器來檢測指定點(diǎn)擊次數(shù)再觸發(fā)響應(yīng)事件.


Standard System View Controllers

許多系統(tǒng)框架為系統(tǒng)的標(biāo)準(zhǔn)界面定義了許多視圖控制器. 可能的情況下, 盡量使用提供的視圖控制而不是你自己創(chuàng)建的. 建議你在應(yīng)用中使用這些視圖控制器來呈現(xiàn)一致的用戶體驗(yàn). 當(dāng)你需要執(zhí)行一名多個(gè)下列任務(wù)時(shí), 應(yīng)該使用相關(guān)框架提供的視圖控制器.

  • 顯示或編輯聯(lián)系人信息, 使用Address Book UI框架提供的視圖控制器.
  • 創(chuàng)建或編輯日歷事件, 使用EventKit UI框架提供的視圖控制器.
  • 寫郵件或短信消息時(shí), 使用Message UI框架提供的視圖控制器.
  • 打開或預(yù)覽一個(gè)文件的內(nèi)容時(shí), 使用UIKit框架提供的UIDocumentInteractionController類.
  • 拍攝照片或者從用戶的照片庫中選擇圖片, 使用UIKit框架提供的UIImagePickerController類.
  • 拍攝視頻片段時(shí), 使用UIKit框架提供的UIImagePickerController類.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末削饵,一起剝皮案震驚了整個(gè)濱河市参淫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌师幕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会放,死亡現(xiàn)場離奇詭異盖腿,居然都是意外死亡修壕,警方通過查閱死者的電腦和手機(jī)愈捅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慈鸠,“玉大人蓝谨,你說我怎么就攤上這事∏嗤牛” “怎么了譬巫?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長督笆。 經(jīng)常有香客問我芦昔,道長,這世上最難降的妖魔是什么娃肿? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任烟零,我火速辦了婚禮,結(jié)果婚禮上咸作,老公的妹妹穿的比我還像新娘锨阿。我一直安慰自己,他們只是感情好记罚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布墅诡。 她就那樣靜靜地躺著,像睡著了一般桐智。 火紅的嫁衣襯著肌膚如雪末早。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天说庭,我揣著相機(jī)與錄音然磷,去河邊找鬼。 笑死刊驴,一個(gè)胖子當(dāng)著我的面吹牛姿搜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捆憎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼舅柜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躲惰?” 一聲冷哼從身側(cè)響起致份,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎础拨,沒想到半個(gè)月后氮块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绍载,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年滔蝉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击儡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锰提,死狀恐怖曙痘,靈堂內(nèi)的尸體忽然破棺而出芳悲,到底是詐尸還是另有隱情立肘,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布名扛,位于F島的核電站谅年,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肮韧。R本人自食惡果不足惜融蹂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弄企。 院中可真熱鬧超燃,春花似錦、人聲如沸拘领。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽约素。三九已至届良,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圣猎,已是汗流浹背士葫。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留送悔,地道東北人慢显。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像欠啤,于是被迫代替她去往敵國和親鳍怨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理跪妥,服務(wù)發(fā)現(xiàn)鞋喇,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫眉撵、插件侦香、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評論 4 62
  • 文|小新 我們第一次見面是在大學(xué)食堂罐韩,那應(yīng)該是純子剛?cè)雽W(xué)的第一個(gè)月憾赁,我上大四,正處在大四的看大三的教大二的怎么...
    59b806b4f1b4閱讀 304評論 0 0
  • 如果把活過的日子當(dāng)做一生散吵,我這一生都在看著別人的生活以求時(shí)光能夠穿越龙考,從未如愿卻也改不了這種傻,他們說傻是天生的矾睦。...
    鄒二狗閱讀 501評論 0 0