為自己APP增加3D Touch功能

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想要的界面了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敌土,一起剝皮案震驚了整個濱河市镜硕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌返干,老刑警劉巖兴枯,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矩欠,居然都是意外死亡财剖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門癌淮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躺坟,“玉大人,你說我怎么就攤上這事乳蓄∵涑龋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵虚倒,是天一觀的道長美侦。 經(jīng)常有香客問我,道長魂奥,這世上最難降的妖魔是什么菠剩? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捧弃,結(jié)果婚禮上赠叼,老公的妹妹穿的比我還像新娘。我一直安慰自己违霞,他們只是感情好嘴办,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著买鸽,像睡著了一般涧郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眼五,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天妆艘,我揣著相機(jī)與錄音彤灶,去河邊找鬼。 笑死批旺,一個胖子當(dāng)著我的面吹牛幌陕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汽煮,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搏熄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暇赤?” 一聲冷哼從身側(cè)響起心例,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞋囊,沒想到半個月后止后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溜腐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年译株,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗扒。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡古戴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矩肩,到底是詐尸還是另有隱情现恼,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布黍檩,位于F島的核電站叉袍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刽酱。R本人自食惡果不足惜喳逛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棵里。 院中可真熱鬧润文,春花似錦、人聲如沸殿怜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽头谜。三九已至骏掀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背截驮。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工笑陈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葵袭。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓涵妥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坡锡。 傳聞我的和親對象是個殘疾皇子妹笆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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