初探3D Touch

3D Touch介紹

從iPhone 6s開(kāi)始大溜,產(chǎn)品都添加了一項(xiàng)硬件屬性差油,叫做3D touch泳炉。作為屏幕的一部分憾筏,新的傳感器將能識(shí)別用力按下屏幕的動(dòng)作并檢測(cè)到精確的壓力變化。這個(gè)設(shè)計(jì)之所以叫做3D Touch花鹅,其原理上是增加了一個(gè)壓力的感觸氧腰,通過(guò)區(qū)分輕按和重按來(lái)進(jìn)行不同的用戶交互。

**文檔給出的應(yīng)用介紹主要有兩塊:**

_1. A user can now press your Home screen icon to immediately access functionality provided by your app._

_2. Within your app, a user can now press views to see previews of additional content and gain accelerated access to features._

第一部分的應(yīng)用是我們可以通過(guò)3D手勢(shì)刨肃,在主屏幕上的應(yīng)用Icon處古拴,直接進(jìn)入應(yīng)用的響應(yīng)功能模塊。

第二部分是對(duì)app的一個(gè)優(yōu)化真友,用戶可以通過(guò)3D Touch手勢(shì)在view上來(lái)預(yù)覽一些預(yù)加載信息黄痪,這樣的設(shè)計(jì)可以使app更加簡(jiǎn)潔大方,交互性也更強(qiáng)盔然。

**iOS 9提供了如下3D Touch API:**

· Home Screen quick action API桅打,使你可以給應(yīng)用圖標(biāo)添加快速選項(xiàng),從而讓應(yīng)用預(yù)料和加速其與APP的交互。

· UIKit peek and pop API愈案,可讓你在應(yīng)用中為用戶提供快速訪問(wèn)更多內(nèi)容的功能挺尾,而無(wú)需離開(kāi)當(dāng)前上下文環(huán)境。使用peek quick actions的API提供的按壓功能來(lái)替換你應(yīng)用的觸摸長(zhǎng)按操作站绪。(通過(guò)配置視圖控制器來(lái)提供peek和pop遭铺。)

· Web view peek and pop API,讓你使用系統(tǒng)提供的HTML鏈接預(yù)覽功能恢准。

(在web視圖中魂挂,你可以對(duì)超鏈接和偵測(cè)到的數(shù)據(jù)使用全新的 allowsLinkPreview 屬性來(lái)開(kāi)啟peek和pop。Peek和Pop會(huì)通過(guò)Safari Services FrameWrok中的SFSafariViewController類自動(dòng)偵測(cè)鏈接和數(shù)據(jù))

· UITouch force properties顷歌,讓應(yīng)用增加自定義的基于壓力的用戶交互锰蓬。

(在iOS 9中,UITouch類獲得了兩個(gè)全新的屬性幫助你在應(yīng)用中自定義3D Touch: force 和maximumPossibleForce眯漩。這些屬性可以讓你偵測(cè)并響應(yīng)APP接收的對(duì)象中的觸摸壓力。在iPhone上麻顶,觸控壓力感應(yīng)有很大的動(dòng)態(tài)范圍赦抖,對(duì)于你的應(yīng)用來(lái)說(shuō)它是個(gè)浮點(diǎn)值。)

不管你使用以上哪些APIs辅肾,你的應(yīng)用必須在運(yùn)行時(shí)檢測(cè)3D Touch的可用性队萤。由于用戶在應(yīng)用運(yùn)行時(shí)可以關(guān)閉3D Touch,所以在你實(shí)現(xiàn)的代理方法中把讀取這個(gè)屬性的值作為其一部分矫钓。

在模擬器上學(xué)習(xí)和測(cè)試3D Touch

3D Touch是一個(gè)很新穎的設(shè)計(jì)要尔,可是蘋果文檔有言:

_With Xcode 7.0 you must develop on a device that supports 3D Touch. Simulator in Xcode 7.0 does not support 3D Touch._

看到這句話心是不是涼了一半舍杜,是的,Xcode7是支持3D Touch開(kāi)發(fā)的赵辕,可是模擬器并不支持這個(gè)手勢(shì)既绩,我們只能在真機(jī)上進(jìn)行學(xué)習(xí)與測(cè)試,但是在IT的世界还惠,從來(lái)都不缺拯救世界的人物饲握,github上有人為我們提供了這樣的一個(gè)插件,可以讓我們?cè)谀M器上進(jìn)行3D Touch的效果測(cè)試:

git地址:https://github.com/DeskConnect/SBShortcutMenuSimulator

在終端中一次運(yùn)行如下指令:

git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git

cd SBShortcutMenuSimulator

make

之后在SBShortcutMenuSimulator的目錄中執(zhí)行如下操作:

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

如果沒(méi)有報(bào)錯(cuò)蚕键,我們可以通過(guò)向指定端口發(fā)送消息的方法來(lái)在模擬器上模擬3D Touch的效果了

echo 'com.apple.mobilecal' | nc 127.0.0.1 8000

其中救欧,com.apple.mobilecal是應(yīng)用的Bundle ID ,如果要測(cè)試我們的應(yīng)用锣光,將其改為我們應(yīng)用的BundleID即可笆怠,下面的示例應(yīng)用是系統(tǒng)日歷。

Home Screen Quick Action使用與相關(guān)API詳解

iOS9為我們提供了兩種Qucik Action誊爹,分別是靜態(tài)和動(dòng)態(tài)的蹬刷。

· 靜態(tài)快速選項(xiàng)(Static quick actions)當(dāng)用戶安裝完應(yīng)用后立即就能使用。在應(yīng)用的 Info.plist 文件中的?UIApplicationShortcutItems?數(shù)組中定義?靜態(tài)快速選項(xiàng)替废。

· 動(dòng)態(tài)快速選項(xiàng)(Dynamic quick actions)在用戶第一次加載應(yīng)用后可用(同程)箍铭。使用?UIApplicationShortcutItem、UIMutableApplicationShortcutItem?以及?UIApplicationShortcutIcon?類和相關(guān)的API來(lái)定義?動(dòng)態(tài)快速選項(xiàng)?椎镣。使用?shortcutItems?屬性來(lái)添加動(dòng)態(tài)快速選項(xiàng)到應(yīng)用共享的?UIApplication?對(duì)象中诈火。

在iOS 9中,一個(gè)應(yīng)用最多能展示四個(gè)主屏快速選項(xiàng)状答。在這個(gè)限制下冷守,系統(tǒng)首先展示靜態(tài)快速選項(xiàng),以plist菜單中的第一個(gè)為首惊科。如果你的靜態(tài)選項(xiàng)不夠四個(gè)拍摇,并且你也定義了動(dòng)態(tài)快速選項(xiàng),那么會(huì)展示一個(gè)或多個(gè)動(dòng)態(tài)快速選項(xiàng)。

兩種快速選項(xiàng)都可以顯示最多兩行文本和一個(gè)可選的圖標(biāo)馆截。系統(tǒng)會(huì)格式化文本充活,排列包裝它,并且適當(dāng)?shù)奶砑邮÷蕴?hào)蜡娶。

靜態(tài)選項(xiàng)

靜態(tài)選項(xiàng)是我們?cè)陧?xiàng)目的配置plist文件中配置的混卵,在用戶安裝程序后就可以使用,并且排序會(huì)在動(dòng)態(tài)選項(xiàng)的前面窖张。

我們先來(lái)看靜態(tài)選項(xiàng)的配置:

1. 首先幕随,在info.plist文件中添加鍵值

2. 先添加了一個(gè)UIApplicationShortcutItems的數(shù)組,這個(gè)數(shù)組中添加的元素就是對(duì)應(yīng)的靜態(tài)標(biāo)簽宿接,在每個(gè)標(biāo)簽中我們需要添加一些設(shè)置的鍵值:

3. 必填項(xiàng):

UIApplicationShortcutItemType?這個(gè)鍵值設(shè)置一個(gè)快捷通道類型的字符串

UIApplicationShortcutItemTitle?這個(gè)鍵值設(shè)置標(biāo)簽的標(biāo)題

4. 選填項(xiàng):

UIApplicationShortcutItemSubtitle?設(shè)置標(biāo)簽的副標(biāo)題

UIApplicationShortcutItemIconType?設(shè)置標(biāo)簽Icon類型

UIApplicationShortcutItemIconFile??設(shè)置標(biāo)簽的Icon文件

UIApplicationShortcutItemUserInfo?設(shè)置信息字典

動(dòng)態(tài)選項(xiàng)

動(dòng)態(tài)選項(xiàng)是我們?cè)诔绦蛑凶富矗ㄟ^(guò)代碼添加的辕录。

與動(dòng)態(tài)選項(xiàng)相關(guān)的類,主要有三個(gè):

1. UIApplicationShortcutItem?創(chuàng)建3D Touch標(biāo)簽的類

2. UIMutableApplicationShortcutItem?創(chuàng)建可變的3D Touch標(biāo)簽的類

3. UIApplicationShortcutIcon?創(chuàng)建標(biāo)簽中圖片Icon的類

其中詳細(xì)的屬性和方法梢卸,我們?cè)诖a中進(jìn)行簡(jiǎn)要講解走诞。

``` objc

UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];

//或者創(chuàng)建自定義圖標(biāo)的icon

UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"分享.png"];

//創(chuàng)建快捷選項(xiàng)

UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"xxx" localizedTitle:@"分享" localizedSubtitle:@"分享副標(biāo)題" icon:icon userInfo:nil];

//添加到快捷選項(xiàng)數(shù)組

[UIApplication sharedApplication].shortcutItems = @[item];

```

響應(yīng)Quick Actions的行為

當(dāng)我們點(diǎn)擊標(biāo)簽進(jìn)入應(yīng)用程序時(shí),可以進(jìn)行一些操作低剔,我們可以看到速梗,在applocation中增加了這樣一個(gè)方法:

` - (void)application:(UIApplication?*)application performActionForShortcutItem:(UIApplicationShortcutItem?*)shortcutItem completionHandler:(void(^)(BOOL?succeeded))completionHandler?NS_AVAILABLE_IOS(9_0);`

當(dāng)我們通過(guò)標(biāo)簽進(jìn)入app時(shí),就會(huì)在appdelegate中調(diào)用這樣一個(gè)回調(diào)襟齿,我們可以獲取shortcutItem的信息進(jìn)行相關(guān)邏輯操作姻锁。

這里有一點(diǎn)需要注意:我們?cè)赼pp的入口函數(shù)也需要進(jìn)行一下判斷,在launchOptions中有UIApplicationLaunchOptionsShortcutItemKey這樣一個(gè)鍵猜欺,通過(guò)它位隶,我們可以區(qū)別是否是從標(biāo)簽進(jìn)入的app,如果是則處理結(jié)束邏輯后开皿,返回NO涧黄,防止處理邏輯被反復(fù)回調(diào)。

` - (BOOL)application:(UIApplication?*)application didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions;`

Quick Actions小注意點(diǎn)

1. 在iOS 9中赋荆,一個(gè)應(yīng)用最多能展示四個(gè)主屏快速選項(xiàng)笋妥。在這個(gè)限制下,系統(tǒng)首先展示靜態(tài)快速選項(xiàng)窄潭,以plist菜單中的第一個(gè)為首春宣。如果你的靜態(tài)選項(xiàng)不夠四個(gè),并且你也定義了動(dòng)態(tài)快速選項(xiàng),那么會(huì)展示一個(gè)或多個(gè)動(dòng)態(tài)快速選項(xiàng)嫉你。兩種快速選項(xiàng)都可以顯示最多兩行文本和一個(gè)可選的圖標(biāo)月帝。系統(tǒng)會(huì)格式化文本,排列包裝它幽污,并且適當(dāng)?shù)奶砑邮÷蕴?hào)嚷辅。

2. 圖標(biāo)和文字的位置會(huì)隨著App在屏幕的位置變化而變化

3. 要考慮到關(guān)閉3D Touch和6s以下機(jī)型的情況,針對(duì)Quick Action所跳轉(zhuǎn)的入口要提供2套或以上的方案距误。

4. 動(dòng)態(tài)Quick Actions需要運(yùn)行過(guò)一次才能出現(xiàn)

5. 對(duì)自定義的圖片有一定的要求

6. 輕點(diǎn)簸搞,別按壞了

結(jié)論

3D touch是2015年版本的“右鍵點(diǎn)擊”。它添加了另一種深度准潭,帶來(lái)了不同的交互意向攘乒。對(duì)于peek and pop來(lái)說(shuō),你可能還沒(méi)有決定跳轉(zhuǎn)到某個(gè)內(nèi)容上去惋鹅,但你肯定會(huì)對(duì)它感興趣。只要有這種想法殉簸,預(yù)覽內(nèi)容的功能可以讓你對(duì)眼前內(nèi)容快速一瞥闰集,而不跳轉(zhuǎn)頁(yè)面沽讹,這樣可以快速返回到之前瀏覽的內(nèi)容中。

這大約是iPhone 6s出之后沒(méi)多久寫的武鲁,那時(shí)候剛接觸iOS開(kāi)發(fā)爽雄,理解程度還是比較淺顯的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沐鼠,一起剝皮案震驚了整個(gè)濱河市挚瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲梭,老刑警劉巖乘盖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憔涉,居然都是意外死亡订框,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門兜叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穿扳,“玉大人,你說(shuō)我怎么就攤上這事国旷∶铮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵跪但,是天一觀的道長(zhǎng)履羞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)特漩,這世上最難降的妖魔是什么吧雹? 我笑而不...
    開(kāi)封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮涂身,結(jié)果婚禮上雄卷,老公的妹妹穿的比我還像新娘。我一直安慰自己蛤售,他們只是感情好丁鹉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悴能,像睡著了一般揣钦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漠酿,一...
    開(kāi)封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天冯凹,我揣著相機(jī)與錄音,去河邊找鬼炒嘲。 笑死宇姚,一個(gè)胖子當(dāng)著我的面吹牛匈庭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浑劳,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼阱持,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了魔熏?” 一聲冷哼從身側(cè)響起衷咽,我...
    開(kāi)封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒜绽,沒(méi)想到半個(gè)月后镶骗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滓窍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年卖词,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏夯。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡此蜈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出噪生,到底是詐尸還是另有隱情裆赵,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布跺嗽,位于F島的核電站战授,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桨嫁。R本人自食惡果不足惜植兰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璃吧。 院中可真熱鬧楣导,春花似錦、人聲如沸畜挨。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巴元。三九已至毡咏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逮刨,已是汗流浹背呕缭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臊旭。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓落恼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親离熏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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