今天休息,先來無事就自己看了一下,關於3d touch,看完后自己有動手嘗試了一下,感覺也並不是很難,
經過大量的搜索,目前為止,發現有三種實現方式;
第一種:info文件中添加字段
這種方式,最為直接,也最為方便,但是有有一定的缺點,就是顯示圖標問題,這種方式只能顯示,系統給的圖標,
必填項(下面兩個鍵值是必須設置的):
UIApplicationShortcutItemType 這個鍵值設置一個快捷通道類型的字符串
UIApplicationShortcutItemTitle 這個鍵值設置標簽的標題
選填項(下面這些鍵值不是必須設置的):
UIApplicationShortcutItemSubtitle 設置標簽的副標題
UIApplicationShortcutItemIconType 設置標簽Icon類型
UIApplicationShortcutItemIconFile 設置標簽的Icon文件
UIApplicationShortcutItemUserInfo 設置信息字典(用於傳值)
UIApplicationShortcutItemIconType 類型只能用系統的type,如果要想換成自己的圖標的話,那這種方法就不適合
下面附上系統提供幾種類型:
在appdelegate 中加上這個按壓手勢回調方法就行了
1 - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler{ 2 //判斷先前我們設置的唯一標識 3 if([shortcutItem.type isEqualToString:@"-11.UITouchText.share"]){ 4 NSArray *arr = @[@"hello 3D Touch"]; 5 UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:arr applicationActivities:nil]; 6 //設置當前的VC 為rootVC 7 [self.window.rootViewController presentViewController:vc animated:YES completion:^{ 8 9 10 }]; 11 12 }else if ([shortcutItem.type isEqualToString:@"Three.3d.tou"]) 13 { 14 ThreeViewController *secod = [[ThreeViewController alloc]init]; 15 [nav pushViewController:secod animated:YES]; 16 17 18 19 } 20 }
第二種:動態標簽(別人都是這么叫,有點不明所以然)
這種方法就完全可以很好的彌補,第一個方法的缺點。但是它也是有一個缺點,就是直接app 裝上后運行過一次,才能喚出3d touch手勢,第一種是裝上就能。
廢話不多說,直接上代碼,
-(void)add3dtouch { /** * UIApplicationShortcutItem 創建標簽的類 * UIApplicationShortcutIcon 創建可變標簽的類 * UIApplicationShortcutItem 創建標簽ICON的類 */ // 添加系統自帶的icon-type UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeHome]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc]initWithType:@"mian" localizedTitle:@"首頁" localizedSubtitle:@"fristVC" icon:icon userInfo:nil]; // 添加自己的圖標 UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"second"]; UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc]initWithType:@"second" localizedTitle:@"SecondVC" localizedSubtitle:@"Second-sub-title" icon:icon1 userInfo:nil]; // 如果系統圖標不滿足需求,可以使用+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName; // 添加自定義圖片作為標簽,需要注意的是:圖片必須預先添加進bundle中 UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"three.jpg"]; UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc]initWithType:@"three" localizedTitle:@"ThreeVC" localizedSubtitle:@"Three-sub-title" icon:icon2 userInfo:nil]; // shortcutItems是一個數組 [UIApplication sharedApplication].shortcutItems = @[item,item1,item2]; }
但是 需要注意的是 在調用這個方法的時候必須要判斷系統版本必要大於9.0,不然會崩
// 判斷系統版本大於9.0再設置 (若不判斷 在低版本系統中會崩潰) if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0){ [self add3dtouch]; }
回調方法和第一種方法,一樣就行了。
第三種: 觸發機制 參考 微信朋友圈 3dtouch打開圖片 然后向上滑動,下面出現一個菜單view
原博客地址:http://www.cnblogs.com/n1ckyxu/p/5096316.html
原博客 里講解的很詳細了,並且有demo鏈接,我在這里就不做解釋了,
個人認識,這種方法 相對於前面2種,比較麻煩一點,但是用途是不一樣的。前2種,是針對應用圖標上的3d touch的,但是第三種是針對應用中的3d touch 效果