3D Touch

這些寫在前面⋯⋯

最近剛從 iPhone 6 Plus 晉升到 iPhone X,其中一項硬體差異便是「3D Touch」;

而這也讓我花了一些時間,來加入 3D Touch 的相關功能開發。

這篇文章前半部會寫 3D Touch 在主畫面上的一些差異,

後半部才會補上 Swift 的相關寫法。

 

iOS 版本:11.1.1(15B150)

首先,先將 App 分成有 Today extension 以及沒有 Today extension 的這兩種:

郵件 – 有 Today extension

鬧鐘 – 沒有 Today extension

從這兩張圖的比較下,我們可以得知在 iOS 11.1.1 之中,

若有 Today extension 的 App,在 3D Touch 的快捷鍵之中,

會顯示 Today extension,而反之則僅會露出原本的 App icon。

另一點是,快捷鍵的順序是依 index 越小則越靠近 App icon

所以使用者將 App 放置在畫面上半部或下半部會影響由上到下的順序。

鬧鐘 – 放置畫面下半部

所以便不必太在意快捷鍵的排序問題,包含 Today extension 順序也是。

接著來看看程式碼⋯⋯

畫面上的快捷鍵,在 iOS 裡頭是 UIKit 裡頭的 UIApplicationShortcutItem

它提供了一種建構的方式:

其中 icon 的部分要使用 UIApplicationShortcutIcon 來建構,

而它有內建的 UIApplicationShortcutIconType 可以使用;

或者從你自行提供的 templateImageName 去抓取也行,

不過一個重點是它會使用 template 模式呈現,所以你無法在圖片中自行決定色彩。

再來再設定 UIApplication.shared.shortcutItems 即可完成新增 3D Touch 快捷鍵的畫面。

一個小小重點是,只要處理有關 UI 方面的設置,都需要在 Main thread 下完成。

 

畫面上有了快捷鍵之後⋯⋯

我們需要在 AppDelegate 裡頭攥寫點擊後的動作,

透過剛剛建構時,所定義的不同 shortcutItem.type 來決定要做些什麼事情,

這部分就有點像使用者點推播進來後要怎麼做後續一樣,

整體大致上就是這樣!

 

未完待續⋯⋯

還沒研究在 App 裡頭的 3D Touch 內容,待之後開發有需求會再補在這篇!