本文由CocoaChina譯者Creolophus(github主頁)翻譯自蘋果開發者中心
原文:Adopting 3D Touch on iPhone
重要:這是針對於正在開發中的API或技術的預備文檔(預發布版本)。蘋果提供這份文檔的目的是幫助你按照文中描述的方式對技術的選擇及界面的設計開發進行規劃。這些信息有可能發生變化,因此根據本文檔的軟件開發應當基於最終版本的操作系統和文檔進行測試。該文檔的新版本或許會隨著API或相關技術未來的發展而進行更新。
3D Touch入門
在iOS 9中,新iPhone將第三維度添加到了用戶界面。
用戶現在可以用力摁下主屏按鈕來快速調出應用提供的功能菜單。
在應用中,用戶現在可以用力摁下視圖以查看更多內容的預覽並且快速訪問一些功能。
想查閱示例代碼的話,可以下載下面的Xcode工程:
ApplicationShortcuts: Using UIApplicationShortcutItem,演示了主屏靜態和動態快速選項。
ViewControllerPreviews: Using the UIViewController previewing APIs,示范了 peek (預覽)和 pop (詳閱),以及peek快速選項。
TouchCanvas: Using UITouch efficiently and effectively,示范了在 UITouch 類中新的壓力屬性。
在你開始使用前,請閱讀 iOS Human Interface Guidelines 中 3D Touch 一節
主屏幕快速選項
用戶早已習慣了點擊一個應用按鈕來打開它,或者長按任何應用來編輯主屏。現在,通過按壓iPhone 6s或者iPhone 6s Plus上的應用icon,用戶可獲得一系列的快捷選項。用戶選擇一個快捷選項後,將會啟動或者加載應用,並且應用的 delegate 對象會接收快速選項的消息。
最棒的快速選項可預料並加速用戶與應用的交互。iOS 9 SDK提供了定義靜態或者動態快速選項的API,不過僅適用於使用最新iPhone機型的用戶。
在應用的 Info.plist 文件的 UIApplicationShortcutItems 數組中定義 靜態快速選項 。
使用 UIApplicationShortcutItem類和相關的API來定義 動態快速選項 。使用新的 shortcutItems 屬性將動態快速選項添加到你應用共享的 UIApplication 對象中。
兩種快速選項最多可以顯示兩行文本和一個可選的圖標。
Peek和Pop
現在你可以授權應用的視圖控制器來響應用戶不同的按壓力量。隨著用戶按壓力量的增加,交互會出現三個階段:
1. 暗示內容預覽是可使用的
2. 展示預覽(peek),和快捷選項菜單(peek quick actions)
3. 可選的跳轉到預覽中的視圖(pop)
當你使用 peek 和 pop 時,系統通過壓力決定從哪個階段過度至下一個。用戶可以在設置>通用>輔助功能>3D Touch中進行修改。
暗示peek是可使用的
輕按後,周圍內容會變得模糊,這告訴用戶預覽更多內容( peek )是可以使用的。
Peek
輕按,屏幕視圖就會過渡到 peek,一個你設置的用來展示更多內容的視圖-就像Mail app做的一樣。如果用戶這時結束了觸碰,peek就會消失並且應用回到交互開始之前的狀態。
或者這個時候,用戶可以在peek界面上更用力按下來跳轉到使用peek呈現的視圖,這個過渡動畫會使用系統提供的pop過渡。pop出來的視圖會填滿你應用的根視圖並顯示一個返航按鈕可以回到交互開始的地方。(圖中沒有顯示最後展示pop視圖的階段)
Peek快速選項
如果用戶一直保持觸摸,可以向上滑動Peek視圖,系統會展示出你預先設置和peek關聯的peek快速選項。
每一項peek快速選項都是你應用中的深度鏈接。當peek快速選項出現後,用戶可以停止觸摸而且peek會停留在屏幕中。用戶可點擊一個快速選項,喚出相關鏈接。
你同樣也可以在網頁視圖中開啟peek和pop,請參看 Web View Peek and Pop
壓力屬性
在iOS 9中,UITouch類新增兩個全新的屬性以支持你在應用中自定義3D Touch: force 和 maximumPossibleForce 。這是第一次應用在iOS設備上,這些屬性可以讓你偵測並響應APP接收的IEvent對象中的觸摸壓力。
觸控壓力感應有很大的動態范圍,對於你的應用來說它是個浮點值。
3D Touch的輔助功能和人機界面指
為了確保你的用戶能夠完整使用你app的功能,請根據3D Touch是否可用來分別規劃你的代碼。請參看 Checking for 3D Touch Availability
注意:3D Touch僅適用於支持3D Touch的設備上。在iOS 9中,默認3D Touch可以使用。用戶可通過Settings > General > Accessibility > 3D Touch關閉該功能。
當3D Touch可用時,盡可能利用它的能力。當它不能使用時候,提供可供替代的方案比如觸摸和長按。
3D Touch支持VoiceOver,想了解關於VoiceOver的內容,請查閱 Accessibility Programming Guide for iOS
想獲得更多關於3D Touch的重要指南,請查閱 iOS Human Interface Guidelines 中的 3D Touch 一節。
開發環境
Xcode7支持3D Touch開發。所有Xcode的調試功能對3D Touch的新功能都是可使用的。
注意下列事項:
在Xcode 7.0中,你必須在真機上調試來開發3D Touch。Xcode 7.0的模擬器不支持3D Touch。
在Xcode 7.0中,你必須通過代碼實現peek和pop視圖控制器。Xcode7.0中的Interface Builder不提供圖形支持以設置3D Touch的視圖控制器轉場。
請在3D Touch可使用和不可用兩種情況下都測試你的應用,保證所有用戶都能使用全部的功能。在一台支持3D Touch的設備上,你可以在設置>通用>輔助功能>3D Touch中關閉3D Touch。
3D Touch APIs
iOS 9提供了如下3D Touch APIs:
Home Screen quick action API,使你可以給應用圖標添加快速選項,從而讓應用預料和加速其與APP的交互。
UIKit peek and pop API,可讓你在應用中為用戶提供快速訪問更多內容的功能,而無需離開當前上下文環境。使用peek quick actions的API提供的按壓功能來替換你應用的觸摸長按操作。
Web view peek and pop API,讓你使用系統提供的HTML鏈接預覽功能。
UITouch force properties,讓你在應用增加自定義的基於壓力的用戶交互。
不管你使用以上哪些APIs,你的應用必須在運行時檢測3D Touch的可用性。
檢測3D Touch的可用性
為了在運行時檢測設別是否支持3D Touch,讀取那些擁有環境特征(a trait environment,見 UITraitEnvironment]Protocol Reference)的對象的特征集合(trait collection)的 forceTouchCapability 屬性值。由於用戶在應用運行時可以關閉3D Touch,所以在你實現的 traitCollectionDidChange: 代理方法中把讀取這個屬性的值作為其一部分。
為了確保你的用戶能夠完整使用你app的功能,請根據3D Touch是否可用來分別規劃你的代碼。當3D Touch可用時,盡可能利用它的功能。當不能使用時,提供可供替代的方案,比如由UILongPressGestureRecognizer類實現的觸摸和長按。
請參閱 iOS Human Interface Guidelines 來提高你對提升應用交互的理解,保證為那些使用3D Touch設備的用戶帶來便利的同時,也不會怠慢其他用戶。
主屏快速選項
iOS 9支持主屏靜態和動態快速選項。
靜態快速選項(Static quick actions)當用戶安裝完應用後立即就能使用。在應用的 Info.plist 文件中的 UIApplicationShortcutItems 數組中定義 靜態快速選項。
動態快速選項(Dynamic quick actions)在用戶第一次加載應用後可用。使用 UIApplicationShortcutItem 、UIMutableApplicationShortcutItem 以及 UIApplicationShortcutIcon 類和相關的API來定義 動態快速選項 。使用 shortcutItems 屬性來添加動態快速選項到應用共享的 UIApplication 對象中。
在iOS 9中,一個應用最多能展示四個主屏快速選項。在這個限制下,系統首先展示靜態快速選項,以plist菜單中的第一個為首。如果你的靜態選項不夠四個,並且你也定義了動態快速選項,那麼會展示一個或多個動態快速選項。
兩種快速選項都可以顯示最多兩行文本和一個可選的圖標。系統會格式化文本,排列包裝它,並且適當的添加省略號。
主屏快速選項支持VoiceOver。
有關實現主屏快速選項的詳細內容,查閱以下資料:
UIApplicationShortcutItem Class Reference
UIMutableApplicationShortcutItem Class Reference
UIApplicationShortcutIcon Class Reference
Information Property List Key Reference中UIApplicationShortcutItems
ApplicationShortcuts: Using UIApplicationShortcutItem (sample code)
UIKit中的Peek 和 Pop
iOS 9讓你可以通過配置視圖控制器來提供peek和pop。
為了在3D Touch設備上支持peek和pop,iOS 9 SDK包括:
在UIViewController類中增加了一系列用來注冊和注銷一個參與3D Touch的視圖控制器的新方法。
為了支持3D Touch的新視圖控制器協議。
你可以有選擇的配置一個包括一系列peek快速選項的預覽視圖控制器。用戶可以通過在peek界面上滑來使用peek快速選項.
為了支持peek快速選項,iOS 9 SDK包括了:
全新的UIPreviewAction和UIpreviewActionGroup類。
全新的UIPreviewActionItem協議。
有關實現peek和pop和實現peek快速選項的更多資料,查閱以下資料:
UIViewController Class Reference 中對 registerForPreviewingWithDelegate:sourceView:和 unregisterForPreviewingWithContext:方法的描述。
UIViewControllerPreviewing Protocol Reference,描述了開啟3D Touch視圖控制器的上下文對象的接口。
UIViewControllerPreviewingDelegate Protocol Reference該協議描述了響應用戶壓力觸控的預覽控制器的接口(用戶術語為peek),以及響應用戶更大壓力用來呈現詳情的視圖控制器的接口(用戶術語為pop)。
UIPreviewAction Class Reference,描述了peek快速選項.
UIPreviewActionGroup Class Reference,描述了peek快速選項的子菜單分組.
UIPreviewActionItem Protocol Reference,描述了peek快速選項和分組的接口.
ViewControllerPreviews: Using the UIViewController previewing APIs (示例代碼)
Web View的Peek和Pop
在web視圖中,你可以對超鏈接和偵測到的數據使用全新的 allowsLinkPreview 屬性來開啟peek和pop。在iOS9中,這個屬性在更被推薦使用的WKWebView類(屬於WebKit framework)和較老的UIWebVIew類(屬於UIKit framework)中都是可以使用的。
Peek和Pop會通過Safari Services framewrok中的SFSafariViewController類自動偵測鏈接和數據
UITouch對象中的壓力屬性
在iOS 9中,UITouch類獲得了兩個全新的屬性幫助你在應用中自定義3D Touch: force 和maximumPossibleForce。
這些屬性可以讓你偵測並響應APP接收的IEvent對象中的觸摸壓力。
在iPhone上,觸控壓力感應有很大的動態范圍,對於你的應用來說它是個浮點值。
有關更多自定義使用壓力值對3D Touch的實現,請閱讀以下資料:
在 UITouch Class Reference 中對 force 和 maximumPossibleForce 屬性的描述.
TouchCanvas: Using UITouch efficiently and effectively(示例代碼)