3D Touch功能的開發(fā)難度并不大,但是由于該功能需要有硬件支持娜扇,并且在模擬器上無法體驗错沃,所以阻擋了一大批開發(fā)者的探索腳步栅组。不過在計算機界從來沒有能難倒程序員的問題,本文首先將介紹如何使用3D Touch的
Home Screen Quick Actions
功能枢析,然后介紹如何在模擬器中使用3D Touch玉掸。
3D Touch開發(fā)
3D Touch功能概覽
3D Touch有三大模塊:
1、peek and pop
類似于系統(tǒng)郵件醒叁、QQ這樣的App司浪,在消息列表頁面按壓某條郵件或會話榆俺,則會彈出這個郵件或會話的閱覽殊校,如果繼續(xù)施加壓力按壓照卦,則會彈出完整的郵件詳情頁面或會話對話框编检。如下圖所示:
這種方式使用頻度不高偷厦,所以在本文中不做技術(shù)介紹展氓,本文主要介紹3D Touch的另一種使用方式:用力按壓App圖標(biāo)捆愁,彈出App的快速入口割去,通過快速入口直接進入到想要的功能頁面。
2昼丑、Home Screen Quick Actions
通過主屏幕的應(yīng)用Icon呻逆,我們可以用3D Touch呼出一個菜單,進行快速定位應(yīng)用功能模塊相關(guān)功能的開發(fā),矾克。如微信页慷、京東的App,本文也將重點介紹這項開發(fā)技術(shù)胁附。
3酒繁、Force Properties
iOS9為我們提供了一個新的交互參數(shù):力度。我們可以檢測某一交互的力度值控妻,來做相應(yīng)的交互處理州袒。例如,我們可以通過力度來控制快進的快慢弓候,音量增加的快慢等郎哭。
Home Screen Quick Actions開發(fā)指南
3D Touch快速入口標(biāo)簽有兩種添加方式:一種是靜態(tài)添加,在工程中的info.plist
文件中添加相關(guān)項目菇存。通過這種方式添加的標(biāo)簽夸研,在app第一次運行前,就可以喚出這些標(biāo)簽依鸥;另一種是動態(tài)添加亥至,通過代碼給App添加快速入口。這種方式添加的標(biāo)簽,第一次運行App前是看不到這些標(biāo)簽的姐扮,必須先運行一次App,以后就可以喚出這些標(biāo)簽了絮供。
靜態(tài)添加入口標(biāo)簽
靜態(tài)添加入口標(biāo)簽不需要寫代碼壤靶,只需要在info.plist
文件中添加相關(guān)功能設(shè)置即可塘揣。不過因為沒有語句提示葡兑,所以我們只能一個字母一個字母的去添加,這一點不是很友好疑务。
我們需要在info.plist
中添加如下信息:
分析一下添加的項目分別代表什么意思手负。
首先是UIApplicationShortcutItems
,他是一個數(shù)組類型,數(shù)組中的每一個元素表示一個入口標(biāo)簽迷守。
然后是Item0
咐鹤,這是數(shù)組中的一個元素祈惶,字典類型。在這個字典中配置各個標(biāo)簽的相關(guān)屬性扮匠。
字段名 | 功能 | 是否必須 | 備注 |
---|---|---|---|
UIApplicationShortcutItemType |
這個鍵值設(shè)置一個快捷通道類型的字符串 | 必有項 | 我們可以監(jiān)聽該項的值來判斷用戶是從哪一個標(biāo)簽進入App的捧请,該字段的值可以為空。 |
UIApplicationShortcutItemTitle |
這個鍵值設(shè)置標(biāo)簽的標(biāo)題 | 必有項 | 我們可以監(jiān)聽該項的值來判斷用戶是從哪一個標(biāo)簽進入App的 |
UIApplicationShortcutItemSubtitle |
設(shè)置標(biāo)簽的副標(biāo)題 | 可選項 | |
UIApplicationShortcutItemIconType |
設(shè)置標(biāo)簽的圖標(biāo)樣式棒搜,系統(tǒng)提供了29中樣式的圖標(biāo)疹蛉,但大部分只能在9.1的系統(tǒng)上使用,只有少數(shù)可以在9.0的系統(tǒng)中使用力麸,這一部分會在后邊詳細(xì)介紹 | 可選項 | |
UIApplicationShortcutItemIconFile |
設(shè)置自定義標(biāo)簽圖片文件的路徑 | 可選項 | |
UIApplicationShortcutItemUserInfo |
設(shè)置用戶信息可款,是一個字典類型,可以用來傳值 | 可選項 |
按照如上截圖配置info.plist
文件后克蚂,我們運行程序闺鲸,然后按壓icon,出現(xiàn)的是如下效果:
這是在UIApplicationShortcutItems
中添加了一個Item的情況陨舱,只添加了一個標(biāo)簽翠拣,如果想添加多個靜態(tài)標(biāo)簽,如法炮制出多個Item即可游盲。
動態(tài)添加入口標(biāo)簽
這種方法需要我們寫代碼來添加误墓,首先來認(rèn)識三個類:
類名 | 功能描述 |
---|---|
UIApplicationShortcutItem |
創(chuàng)建標(biāo)簽的類 |
UIMutableApplicationShortcutItem |
創(chuàng)建可變標(biāo)簽的類 |
UIApplicationShortcutIcon |
創(chuàng)建標(biāo)簽ICON的類 |
我們創(chuàng)建一個新工程,然后在工程中根視圖的viewDidLoad
方法中添加如下代碼:
// 創(chuàng)建標(biāo)簽的ICON圖標(biāo)益缎。
UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
// 創(chuàng)建一個標(biāo)簽谜慌,并配置相關(guān)屬性。
UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"two" localizedTitle:@"么么噠" localizedSubtitle:@"愛你呦" icon:icon userInfo:nil];
// 將標(biāo)簽添加進Application的shortcutItems中莺奔。
[UIApplication sharedApplication].shortcutItems = @[item];
上邊的代碼欣范,第一步創(chuàng)建出標(biāo)簽的入口,這一步的配置與靜態(tài)添加標(biāo)簽中的UIApplicationShortcutItemIconType
目的一樣。系統(tǒng)給我們提供了如下樣式的標(biāo)簽:
typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) {
UIApplicationShortcutIconTypeCompose,
UIApplicationShortcutIconTypePlay,
UIApplicationShortcutIconTypePause,
UIApplicationShortcutIconTypeAdd,
UIApplicationShortcutIconTypeLocation,
UIApplicationShortcutIconTypeSearch,
UIApplicationShortcutIconTypeShare,
UIApplicationShortcutIconTypeProhibit NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeContact NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeHome NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMarkLocation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeFavorite NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeLove NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCloud NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeInvitation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeConfirmation NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMail NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeMessage NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeDate NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTime NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCapturePhoto NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeCaptureVideo NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTask NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeTaskCompleted NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeAlarm NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeBookmark NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeShuffle NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeAudio NS_ENUM_AVAILABLE_IOS(9_1),
UIApplicationShortcutIconTypeUpdate NS_ENUM_AVAILABLE_IOS(9_1)
} NS_ENUM_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;
如果系統(tǒng)圖標(biāo)不滿足需求恼琼,可以使用+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;
添加自定義圖片作為標(biāo)簽妨蛹,需要注意的是:圖片必須預(yù)先添加進bundle。
第二步是創(chuàng)建一個標(biāo)簽晴竞,并進行相關(guān)配置蛙卤,這一步與靜態(tài)添加標(biāo)簽中的Item0
一樣,初始化中的相關(guān)設(shè)置和上邊一模一樣噩死,不多啰嗦颤难。
第三步是將標(biāo)簽添加進pplication的shortcutItems中,如果想添加多個標(biāo)簽已维,可以創(chuàng)建多個UIApplicationShortcutItem
對象行嗤,并加入數(shù)組中。
添加完后垛耳,我們再次運行程序查看效果:
檢測App啟動方式
標(biāo)簽添加完成了栅屏,現(xiàn)在我們可以通過兩種途徑來啟動App,一種是傳統(tǒng)的點擊icon圖標(biāo)啟動App堂鲜,另一種是通過按壓icon喚起快速入口既琴,通過快速入口進入App中指定的功能頁面。我們要如何檢測是從哪里進入App呢泡嘴?
iOS9在AppDelegated中提供了一個新方法:- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
甫恩,如果App是從快速入口啟動的,則會執(zhí)行這個方法酌予。該方法的shortcutItem
參數(shù)攜帶了從快速入口進入app時的標(biāo)簽參數(shù)磺箕。
如果是從快速入口啟動的App,我們可以判斷shortcutItem.localizedTitle
屬性的值來判斷是從哪一個標(biāo)簽進入的App抛虫。
來一個需求:如果是從“點我”這個標(biāo)簽進來的松靡,我們把頁面背景顏色修改為黃色,如果是從“么么噠”這個標(biāo)簽進來的建椰,我們講頁面背景顏色修改為紅色雕欺。代碼如下:
// 程序在后臺運行,或者從死亡被激活棉姐,從3d進來的頁面
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
if ([shortcutItem.localizedTitle isEqualToString:@"點我"]) {
self.window.rootViewController.view.backgroundColor = [UIColor yellowColor];
} else if ([shortcutItem.localizedTitle isEqualToString:@"么么噠"]) {
self.window.rootViewController.view.backgroundColor = [UIColor redColor];
}
}
彩蛋:如何在模擬器中使用3D Touch功能屠列?
上邊我們講了這么多,還是需要在iphone6s中來驗證效果伞矩。對于沒有設(shè)備的同學(xué)們怎么辦呢笛洛?我們可以安裝一些插件,來讓模擬器支持一下3D Touch中的Home Screen Quick Actions
模塊功能乃坤。
首先我們需要在gitHub中下載一個插件苛让,這個插件只能安裝在Xcode7中沟蔑。地址在這里:https://github.com/DeskConnect/SBShortcutMenuSimulator
剩下的按照這個頁面的指引操作就可以了。為了照顧一下懶得看英文的同學(xué)狱杰,在這里我把操作步驟列舉出來瘦材。
插件安裝篇
1、 在終端中輸入命令git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git
克隆該插件到本地仿畸。
2宇色、 繼續(xù)輸入命令cd SBShortcutMenuSimulator
進入插件所在文件夾
3、輸入命令make
安裝插件
插件使用篇
1颁湖、輸入命令xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib
和xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
啟動插件
2、輸入命令來喚起某個App的Home Screen Quick Actions功能:echo 'com.apple.mobilecal' | nc 127.0.0.1 8000
例隆。其中的com.apple.mobilecal
是你的bundle id甥捺。命令執(zhí)行效果如下:
我們把bundle id換為我們剛剛寫的工程的ID,測試一下echo 'quanzheng.-DTouchDemo' | nc 127.0.0.1 8000
真棒镀层!大功告成A獭!