標籤:
今天休息,先來無事就自己看了一下,關於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 效果
iOS 3DTouch 的開發套路大全