3D Touch開發(fā)初體驗

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ù)施加壓力按壓照卦,則會彈出完整的郵件詳情頁面或會話對話框编检。如下圖所示:

用力按壓消息列表苍碟,彈出會話概覽
繼續(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中添加如下信息:

info.plist中添加的內(nèi)容

分析一下添加的項目分別代表什么意思手负。

首先是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)的是如下效果:

靜態(tài)添加的標(biāo)簽

這是在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ù)組中。

添加完后垛耳,我們再次運行程序查看效果:

動態(tài)添加標(biāo)簽后的效果

檢測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.dylibxcrun 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í)行效果如下:

命令執(zhí)行效果

我們把bundle id換為我們剛剛寫的工程的ID,測試一下echo 'quanzheng.-DTouchDemo' | nc 127.0.0.1 8000

真棒镀层!大功告成A獭!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唱逢,一起剝皮案震驚了整個濱河市吴侦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坞古,老刑警劉巖备韧,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痪枫,居然都是意外死亡织堂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門奶陈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來易阳,“玉大人,你說我怎么就攤上這事吃粒×拾常” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵徐勃,是天一觀的道長事示。 經(jīng)常有香客問我,道長僻肖,這世上最難降的妖魔是什么很魂? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮檐涝,結(jié)果婚禮上遏匆,老公的妹妹穿的比我還像新娘法挨。我一直安慰自己,他們只是感情好幅聘,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布凡纳。 她就那樣靜靜地躺著,像睡著了一般帝蒿。 火紅的嫁衣襯著肌膚如雪荐糜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天暴氏,我揣著相機與錄音答渔,去河邊找鬼侥涵。 笑死芜飘,一個胖子當(dāng)著我的面吹牛嗦明,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敬拓,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼营勤!你這毒婦竟也來了壹罚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辨泳,沒想到半個月后玖院,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體难菌,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蔑滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年键袱,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹄咖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片比藻。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纽匙,靈堂內(nèi)的尸體忽然破棺而出烛缔,到底是詐尸還是另有隱情践瓷,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站淋肾,受9級特大地震影響硫麻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜樊卓,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浇辜。 院中可真熱鬧券敌,春花似錦、人聲如沸奢赂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱士。三九已至,卻和暖如春序厉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毕箍。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工而柑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涩澡。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粥帚。 傳聞我的和親對象是個殘疾皇子胰耗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 3D Touch功能的開發(fā)難度并不大,但是由于該功能需要有硬件支持芒涡,并且在模擬器上無法體驗宪郊,所以阻擋了一大批開發(fā)者...
    LeafRead閱讀 662評論 0 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件拖陆、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評論 4 62
  • 減肥似乎是每個女生都在討論的事情,體重下降5斤,相信每個女生都不反對叹誉。有想法的人雖然很多鸯两,真正能夠做得到、實現(xiàn)目標(biāo)...
    路上的幸福_影閱讀 571評論 5 6
  • 霄哥是高二的時候轉(zhuǎn)來我們班級的长豁。 穿著土氣钧唐,沒有QQ。腳上穿的是門口地攤買的盜版回力板鞋匠襟,兩雙輪換钝侠,不論冬夏。一件...
    鄭關(guān)西閱讀 564評論 0 1
  • 本文參與#漫步青春#征文活動酸舍,作者:姚國靖帅韧,本人承諾,文章內(nèi)容為原創(chuàng)啃勉,且未在其他平臺發(fā)布忽舟。 看到美麗的流星劃過星空...
    漠視你閱讀 507評論 0 0