1. 程式人生 > >iOS開發 - 3D Touch 應用系列一 - Quick Actions 建立桌面 Icon 快捷方式

iOS開發 - 3D Touch 應用系列一 - Quick Actions 建立桌面 Icon 快捷方式

個言

很久沒發隨筆了,有一年多了吧。期間也曾想繼續去寫隨筆,但是因為各種原因而耽擱了。最近又想了一下,還是有很多東西想要寫,想要分享,想要記錄下來的東西。之後我也會不斷寫隨筆,但不止於 iOS 的方向,也想去體驗一下新東西。在此不多說,我們開始閱讀正文吧。

簡介

在支援 3D Touch 的裝置上,Quick Actions 可以讓使用者更快,更少的操作步驟去完成他們最常做的事情,其中這麼多操作可以通過主螢幕直接完成。比如用力地長按微信圖示,會彈出諸如"掃一掃"和"我的二維碼"等常用功能,這個我在加好友的情況下經常會用到,不是"掃"別人就是被別人"掃"。然後這是它的官方介紹,3D Touch - iOS - Apple Developer。

本文的 Demo 已放到 GitHub 上,Demo 請到 GarveyCalvin/iOS-Travel 下載。

支援的裝置是在 iPhone 6S 和 6S Plus 及後續出的 iPhone 系列,系統則是從 iOS 9.0 開始支援 3D Touch。

Info.plist 建立快捷方式

快捷方式支援在 Info.plist 裡直接定義,主鍵是UIApplicationShortcutItems,它是一個數組Array。各個 Key 值可以在檢視Information Property List Key Reference,在這裡簡單地介紹一下各個 Key 的作用。

Key 作用
UIApplicationShortcutItemType(必需) 唯一標識
UIApplicationShortcutItemTitle(必需) 顯示的標題
UIApplicationShortcutItemSubtitle(可選) 顯示的副標題
UIApplicationShortcutItemIconType(可選) 使用系統的圖示
UIApplicationShortcutItemIconFile(可選) 使用專案的圖示
UIApplicationShortcutItemUserInfo(可選) 附加的資訊

以下是一個詳細的例子,上述的 Key 除了 UIApplicationShortcutItemUserInfo 外,其它都實現了。

現在我們來看看執行效果,值得一提的是,圖示分別在上半屏和下半屏的情況下,顯示的排序是會不同的,具體執行效果如下所示。

圖示在上半屏

圖示在下半屏

判斷使用者點選了哪個快捷方式

通過在 AppDelegate.m 檔案中實現 UIApplicationDelegate 的代理方法application:performActionForShortcutItem:completionHandler:,可以得知使用者是從哪個快捷方式進來的,具體程式碼如下。

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler  API_AVAILABLE(ios(9.0)) {
    NSLog(@"%s", __FUNCTION__);
    
    if ([shortcutItem.type isEqualToString:@"search"]) {
        NSLog(@"使用者從快捷方式“搜尋”進來的");
    } else if ([shortcutItem.type isEqualToString:@"list"]) {
        NSLog(@"使用者從快捷方式“榜單”進來的");
    } else if ([shortcutItem.type isEqualToString:@"public"]) {
        NSLog(@"使用者從快捷方式“一鍵釋出”進來的");
    }
}

程式碼建立快捷方式

快捷方式也支援程式碼建立,每一個 UIApplicationShortcutItem 就是一個快捷方式,一般在 AppDelegate.m 檔案中實現方法 application:didFinishLaunchingWithOptions: 裡編寫實現程式碼,程式碼比較易懂,這裡就不再說明了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%s", __FUNCTION__);
    
    if (@available(iOS 9.0, *)) {
        UIApplicationShortcutIcon *searchIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
        UIApplicationShortcutItem *search = [[UIApplicationShortcutItem alloc] initWithType:@"search" localizedTitle:@"搜尋" localizedSubtitle:nil icon:searchIcon userInfo:nil];
        
        UIApplicationShortcutIcon *publicIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"upload"];
        UIApplicationShortcutItem *public = [[UIApplicationShortcutItem alloc] initWithType:@"public" localizedTitle:@"一鍵釋出" localizedSubtitle:nil icon:publicIcon userInfo:nil];
        
        UIApplicationShortcutItem *list = [[UIApplicationShortcutItem alloc] initWithType:@"list" localizedTitle:@"榜單" localizedSubtitle:@"全區排行" icon:nil userInfo:nil];
        
        application.shortcutItems = @[list, public, search];
    }
    
    return YES;
}

資料

本文的 Demo 已放到 GitHub 上,Demo 請到 GarveyCalvin/iOS-Travel 下載。

環境

Xcode: Version 10.1 (10B61)

測試機型:iPhone XS Max

測試系統:iOS 12.1

總結

無論是在 info.plist 或 程式碼 建立 Quick Actions 都比較簡單,沒什麼很複雜的邏輯,學起來很容易。

Quick Actions 的使用情況還是比較多的,就我而言,我經常會用支付寶和微信放出來的"掃一掃",支付寶的"乘車碼"等等。

3D Touch 的應用範圍不止這些,還有 Peek and Pop 和 Pressure Sensitivity,在以後或許會補上這系列的文章。

宣告

博文作者:GarveyCalvin
博文出處:http://www.cnblogs.com/GarveyCalvin/
本文版權歸作者和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作