3DTouch目前在手機(jī)上有兩種體現(xiàn)方式播玖,一種是用力按下app的圖片icon椎工,會彈出選項(xiàng)菜單,就像電腦上的右鍵蜀踏。一種是在應(yīng)用內(nèi)的界面上用力按下维蒙,彈出的預(yù)覽界面。
接下來就以這兩種效果分別說明如何使用3DTouch功能果覆。
一颅痊、iocn按下效果
這里有兩種方式實(shí)現(xiàn):
1、通過plist文件靜態(tài)設(shè)置
[objc]view plaincopy
UIApplicationShortcutItemUserInfo信息
UIApplicationShortcutItemIconFile圖標(biāo)名稱
UIApplicationShortcutItemIconType圖標(biāo)類型
UIApplicationShortcutItemTitle標(biāo)題
UIApplicationShortcutItemSubTitle副標(biāo)題
然后在AppDelegate里面實(shí)現(xiàn)代理方法局待,通過綁定的標(biāo)簽type來實(shí)現(xiàn)具體代碼斑响。
[objc]view plaincopy
-(void)application:(UIApplication*)applicationperformActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItemcompletionHandler:(void(^)(BOOL))completionHandler
{
UINavigationController*nav?=?(UINavigationController*)self.window.rootViewController;
if([shortcutItem.typeisEqualToString:@"ONE"]){
UIViewController*vc?=?[[UIViewControlleralloc]init];
vc.title=@"第一個";
vc.view.backgroundColor=?[UIColorredColor];
[navpushViewController:vcanimated:YES];
}elseif([shortcutItem.typeisEqualToString:@"TWO"]){
UIViewController*vc?=?[[UIViewControlleralloc]init];
vc.title=@"第二個";
vc.view.backgroundColor=?[UIColorgreenColor];
[navpushViewController:vcanimated:YES];
}
}
2、通過代碼動態(tài)創(chuàng)建
首先在AppDelegate的didFinishLaunchingWithOptions里面初始化
[objc]view plaincopy
-?(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions?{
//?Override?point?for?customization?after?application?launch.
self.window=?[[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds];
UINavigationController*nav?=?[[UINavigationControlleralloc]initWithRootViewController:[[ViewControlleralloc]init]];
self.window.rootViewController=?nav;
[self.windowmakeKeyAndVisible];
[selfsetup3DTouch:application];
//????[self?setupSpotlight];
returnYES;
}
具體初始化方法
[objc]view plaincopy
-?(void)setup3DTouch:(UIApplication*)application
{
/**
type?該item?唯一標(biāo)識符
localizedTitle?:標(biāo)題
localizedSubtitle:副標(biāo)題
icon:icon圖標(biāo)?可以使用系統(tǒng)類型?也可以使用自定義的圖片
userInfo:用戶信息字典?自定義參數(shù)钳榨,完成具體功能需求
*/
//????UIApplicationShortcutIcon?*icon1?=?[UIApplicationShortcutIcon?iconWithTemplateImageName:@"標(biāo)簽.png"];
UIApplicationShortcutIcon*cameraIcon?=?[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeCompose];
UIApplicationShortcutItem*cameraItem?=?[[UIApplicationShortcutItemalloc]initWithType:@"ONE"localizedTitle:@"拍照"localizedSubtitle:@""icon:cameraIconuserInfo:nil];
UIApplicationShortcutIcon*shareIcon?=?[UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeShare];
UIApplicationShortcutItem*shareItem?=?[[UIApplicationShortcutItemalloc]initWithType:@"TWO"localizedTitle:@"分享"localizedSubtitle:@""icon:shareIconuserInfo:nil];
/**?將items?添加到app圖標(biāo)?*/
application.shortcutItems=?@[cameraItem,shareItem];
}
最后在代理方法里面實(shí)現(xiàn)具體需求代碼
[objc]view plaincopy
-(void)application:(UIApplication*)applicationperformActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItemcompletionHandler:(void(^)(BOOL))completionHandler
{
UINavigationController*nav?=?(UINavigationController*)self.window.rootViewController;
if([shortcutItem.typeisEqualToString:@"ONE"]){
UIViewController*vc?=?[[UIViewControlleralloc]init];
vc.title=@"第一個";
vc.view.backgroundColor=?[UIColorredColor];
[navpushViewController:vcanimated:YES];
}elseif([shortcutItem.typeisEqualToString:@"TWO"]){
UIViewController*vc?=?[[UIViewControlleralloc]init];
vc.title=@"第二個";
vc.view.backgroundColor=?[UIColorgreenColor];
[navpushViewController:vcanimated:YES];
}
}
二舰罚、應(yīng)用內(nèi)UI界面用力按下產(chǎn)生的3DTouch效果(這種方式也有兩種實(shí)現(xiàn)效果)
1、比如用力按下某個cell薛耻,彈出預(yù)覽的小視圖营罢,同時上滑底部出現(xiàn)若干個選項(xiàng)(Peek功能)
首先注冊需要實(shí)現(xiàn)Touch效果的View,判斷下設(shè)備系統(tǒng)支不支持饼齿,不然會崩潰
把當(dāng)前的cell注冊綁定愤钾,然后試圖界面實(shí)現(xiàn)UIViewControllerPreviewingDelegate代理
[objc]view plaincopy
#pragma?mark?-?UIViewControllerPreviewingDelegate
-(UIViewController*)previewingContext:(id)previewingContextviewControllerForLocation:(CGPoint)location
{
NSIndexPath*index?=?[self.tableViewindexPathForCell:(UITableViewCell*)[previewingContextsourceView]];
NewsListModel*model?=self.lists[index.row];
NewsDetailsViewController*showVC?=?[[NewsDetailsViewControlleralloc]init];
showVC.newsID=?model.news_id;
CGRect?rect?=?CGRectMake(0,0,??previewingContext.sourceView.ab_width,?previewingContext.sourceView.ab_height);
previewingContext.sourceRect=?rect;
returnshowVC;
}
到這里就能有彈出預(yù)覽界面效果了瘟滨,如果還是實(shí)現(xiàn)下面的幾個選項(xiàng)功能,需要在你預(yù)覽界面里面實(shí)現(xiàn)一個方法:
[objc]view plaincopy
-?(NSArray>?*)previewActionItems
{
UIPreviewAction*action0=?[UIPreviewActionactionWithTitle:@"action0"style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction*?_Nonnull?action,UIViewController*?_Nonnull?previewViewController)?{
NSLog(@"%s,?line?=?%d,?action0?=?%@,?previewViewController?=?%@",?__FUNCTION__,?__LINE__,?action,?previewViewController);
}];
UIPreviewAction*action1=?[UIPreviewActionactionWithTitle:@"action1"style:UIPreviewActionStyleDestructivehandler:^(UIPreviewAction*?_Nonnull?action,UIViewController*?_Nonnull?previewViewController)?{
NSLog(@"%s,?line?=?%d,?action1?=?%@,?previewViewController?=?%@",?__FUNCTION__,?__LINE__,?action,?previewViewController);
}];
UIPreviewAction*action2=?[UIPreviewActionactionWithTitle:@"action2"style:UIPreviewActionStyleSelectedhandler:^(UIPreviewAction*?_Nonnull?action,UIViewController*?_Nonnull?previewViewController)?{
NSLog(@"%s,?line?=?%d,?action2?=?%@,?previewViewController?=?%@",?__FUNCTION__,?__LINE__,?action,?previewViewController);
}];
UIPreviewAction*action3=?[UIPreviewActionactionWithTitle:@"action3"style:UIPreviewActionStyleSelectedhandler:^(UIPreviewAction*?_Nonnull?action,UIViewController*?_Nonnull?previewViewController)?{
NSLog(@"%s,?line?=?%d,?action2?=?%@,?previewViewController?=?%@",?__FUNCTION__,?__LINE__,?action,?previewViewController);
}];
//該按鈕可以是一個組,點(diǎn)擊該組時,跳到組里面的按鈕.
UIPreviewActionGroup*actionGroup?=?[UIPreviewActionGroupactionGroupWithTitle:@"actionGroup"style:UIPreviewActionStyleSelectedactions:@[action2,action3]];
//直接返回?cái)?shù)組.
return@[action0,action1,actionGroup];
}
2能颁、在第1個效果的基礎(chǔ)上,再繼續(xù)用力按下去倒淫,就會push預(yù)覽界面了伙菊。(pop功能)
再實(shí)現(xiàn)一個代理方法
[objc]view plaincopy
#pragma?mark?-?UIViewControllerPreviewingDelegate
-(void)previewingContext:(id)previewingContextcommitViewController:(UIViewController*)viewControllerToCommit
{
[selfshowViewController:viewControllerToCommitsender:self];
}
這樣就能直接puhs想要的界面了。