iOS開發Quick Actions創建桌面Icon快捷方式

在本文裏我們給大家分享了關於iOS開發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,在以後或許會補上這系列的文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章