3D Touch學(xué)習(xí)之一: 如何配置3D Touch

支持設(shè)備

  • 軟件: iOS9+
  • 硬件: 6s, 6s Plus及以后版本

開發(fā)環(huán)境

Xcode7+

3D Touch可以做什么?

  • 點(diǎn)擊icon,打開APP提供的快捷操作
  • 在APP內(nèi)部,對下一級頁面進(jìn)行預(yù)覽

三種操作模式

  • Home Screen Quick Actions
  • Peek & Pop

Home Screen Quick Actions

過去,用戶可以通過點(diǎn)擊APP icon來啟動APP,現(xiàn)在用戶可以通過按壓APP的icon,觸發(fā)3D Touch來獲得APP啟動的快速入口.當(dāng)用戶選擇某項(xiàng)快捷操作后,APP會被激活或者啟動,APP內(nèi)部通過代理方法,來獲取用戶選擇的快捷入口的信息.

Home Screen Quick Actions

如圖,icon的3D Touch被觸發(fā)時,會顯示APP的快捷入口,其他的背景會做模糊處理.這些快捷入口的設(shè)置方式如下.

設(shè)置首頁的快速點(diǎn)擊

設(shè)置首頁的快速點(diǎn)擊有兩種方法:

靜態(tài)設(shè)置: 在Info.pilst文件中設(shè)置

在Info.plist文件中,添加數(shù)組UIApplicationShortcutItems,數(shù)組元素為Dictionary,每個字典包含快速點(diǎn)擊的信息.在UIApplicationShortcutItems中最低可以設(shè)置4個Item,多余的部分不會被顯示.

對于每個shortItem而言,可以設(shè)置的參數(shù)如下:

  • UIApplicationShortcutItemType: 必填
    用來對點(diǎn)擊事件進(jìn)行分類,處理
  • UIApplicationShortcutItemTitle: 必填
    主標(biāo)題,在沒有副標(biāo)題時最多顯示兩行
  • UIApplicationShortcutItemSubtitle: 非必填
    副標(biāo)題,顯示在主標(biāo)題下方,只可顯示一行,當(dāng)有副標(biāo)題時,主標(biāo)題最多顯示一行,副標(biāo)題字體大小小于主標(biāo)題
  • UIApplicationShortcutItemIconType: 非必填
    系統(tǒng)提供的圖片庫內(nèi)的圖片
  • UIApplicationShortcutItemIconFile: 非必填
    自定義圖片,填寫項(xiàng)為bundle內(nèi)的圖片名或asset內(nèi)的圖片名,圖片尺寸為 35x35p
  • UIApplicationShortcutItemUserInfo: 非必填
    內(nèi)容為字典,可以自己定義,用以在點(diǎn)擊時獲得更多信息
動態(tài)設(shè)置: 通過代碼設(shè)置

通過類UIApplicationShortcutItem設(shè)置每個Item的屬性,屬性內(nèi)容同靜態(tài)設(shè)置一樣,最后通過UIApplication.sharedApplication().shortcutItems = [item1, item2, ...]設(shè)置

靜態(tài)設(shè)置 vs. 動態(tài)設(shè)置
  • 動態(tài)設(shè)置在APP運(yùn)行時生效
  • 靜態(tài)設(shè)置在APP安裝時生效

當(dāng)靜態(tài)設(shè)置的個數(shù)小于限制個數(shù)4個時,動態(tài)設(shè)置的item將會被添加,最后結(jié)果仍是最多顯示4個.

Peek & Pop

在APP的UIViewController內(nèi)的view可以響應(yīng)3D Touch事件,操作可以被細(xì)分為三個步驟

1.驗(yàn)證是否可預(yù)覽
2.顯示預(yù)覽彈窗
3.進(jìn)入預(yù)覽頁面

驗(yàn)證預(yù)覽

UIViewController頁面,需要遵守協(xié)議UIViewControllerPreviewingDelegate,并且在想要觸發(fā)3D Touch的view上進(jìn)行注冊

       if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
            [self registerForPreviewingWithDelegate:self sourceView:view];
        }

執(zhí)行完此步驟,在輕壓制定view的時候,會在view四周進(jìn)行模糊處理,效果如圖.

Peek avaliable
顯示預(yù)覽彈窗

在預(yù)覽后,繼續(xù)深壓,則會顯示預(yù)覽界面.協(xié)議實(shí)現(xiàn)協(xié)議方法

#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
    UIViewController *viewController = [UIViewController alloc] init];
    return  viewController;

}

方法內(nèi)部返回的Controller即為預(yù)覽界面,如圖

Peek

如果想在預(yù)覽界面,通過上滑進(jìn)行快捷操作,可以在被預(yù)覽界面,遵守協(xié)議UIViewControllerPreviewingDelegate,并實(shí)現(xiàn)快捷操作代理方法:

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {

    UIPreviewAction *collectItem = [UIPreviewAction actionWithTitle:collectonTitle style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        
    }];

    UIPreviewAction *shareItem = [UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
       
    }];

    return @[collectItem, shareItem];
}

如此配置,效果如下圖

Peek quick actions

用戶點(diǎn)擊了按鈕之后,預(yù)覽界面消失,執(zhí)行UIPreviewAction內(nèi)的操作,此次預(yù)覽結(jié)束.

進(jìn)入預(yù)覽界面

如果用戶在預(yù)覽窗口界面繼續(xù)深按,則會進(jìn)行預(yù)覽界面,實(shí)現(xiàn)方法,在提供view的界面,通過代理方法


- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    viewControllerToCommit.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:viewControllerToCommit animated:YES];
}

進(jìn)行push或者present操作.

總結(jié)

3D Touch的適配就到這了,看了這些相信你已經(jīng)可以在APP內(nèi)集成3D Touch了,還有一些細(xì)節(jié),比如在預(yù)覽界面出現(xiàn)和消失時的生命周期是如何的呢?我們下次就此進(jìn)行分析.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末展姐,一起剝皮案震驚了整個濱河市颜矿,隨后出現(xiàn)的幾起案子膳音,更是在濱河造成了極大的恐慌姐刁,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贿肩,死亡現(xiàn)場離奇詭異峦椰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)汰规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門汤功,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溜哮,你說我怎么就攤上這事滔金。” “怎么了茬射?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵鹦蠕,是天一觀的道長。 經(jīng)常有香客問我在抛,道長钟病,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任刚梭,我火速辦了婚禮肠阱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朴读。我一直安慰自己屹徘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布衅金。 她就那樣靜靜地躺著噪伊,像睡著了一般簿煌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鉴吹,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天姨伟,我揣著相機(jī)與錄音,去河邊找鬼豆励。 笑死夺荒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的良蒸。 我是一名探鬼主播技扼,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫩痰!你這毒婦竟也來了剿吻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤始赎,失蹤者是張志新(化名)和其女友劉穎和橙,沒想到半個月后仔燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體造垛,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年晰搀,在試婚紗的時候發(fā)現(xiàn)自己被綠了五辽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡外恕,死狀恐怖杆逗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳞疲,我是刑警寧澤罪郊,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站尚洽,受9級特大地震影響悔橄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腺毫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一癣疟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潮酒,春花似錦睛挚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侧到。三九已至,卻和暖如春淤击,著一層夾襖步出監(jiān)牢的瞬間床牧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工遭贸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戈咳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓壕吹,卻偏偏與公主長得像著蛙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耳贬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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