支持設(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)部通過代理方法,來獲取用戶選擇的快捷入口的信息.
如圖,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)行模糊處理,效果如圖.
顯示預(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ù)覽界面,如圖
如果想在預(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];
}
如此配置,效果如下圖
用戶點(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)行分析.