-
App Extensions
與HandOff
后繼更新 - 參照文檔中的
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ǔ)文本.
TextKit
由UIKit
的新類, 以及對現(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
類.