在我們的app中使用3D Touch功能咏雌,主要分為以下三個模塊:
- Home Screen Quick Actions
通過主屏幕的應(yīng)用Icon凡怎,我們可以用3D Touch呼出一個菜單校焦,進(jìn)行快速定位應(yīng)用功能模塊相關(guān)功能的開發(fā)。如上面的日歷统倒。 - peek and pop
這個功能是一套全新的用戶交互機制寨典,在使用3D Touch時,ViewController中會有如下三個交互階段:
(1)提示用戶這里有3D Touch的交互房匆,會使交互控件周圍模糊
(2)繼續(xù)深按耸成,會出現(xiàn)預(yù)覽視圖
(3)通過視圖上的交互控件進(jìn)行進(jìn)一步交互
這個模塊的設(shè)計可以在網(wǎng)址連接上進(jìn)行網(wǎng)頁的預(yù)覽交互。 - Force Properties
iOS9為我們提供了一個新的交互參數(shù):力度浴鸿。我們可以檢測某一交互的力度值井氢,來做相應(yīng)的交互處理。例如岳链,我們可以通過力度來控制快進(jìn)的快慢花竞,音量增加的快慢等。
實際的使用方法
Home Screen Quick Actions
有2種添加方式
- 靜態(tài)添加
在info.plist里添加UIApplicationShortcutItems
<array>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>1</string>
<key>UIApplicationShortcutItemIconType</key>
<string>1</string>
<key>UIApplicationShortcutItemTitle</key>
<string>title</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>subTitle</string>
<key>UIApplicationShortcutItemIconFile</key>
<string></string>
<key>UIApplicationShortcutItemUserInfo</key>
<string></string>
</dict>
</array>
</plist>
首先是UIApplicationShortcutItems掸哑,他是一個數(shù)組類型约急,數(shù)組中的每一個元素表示一個入口標(biāo)簽。
然后是Item0苗分,這是數(shù)組中的一個元素厌蔽,字典類型。在這個字典中配置各個標(biāo)簽的相關(guān)屬性摔癣。
UIApplicationShortcutItemType 這個鍵值設(shè)置一個快捷通道類型的字符串 必有項 我們可以監(jiān)聽該項的值來判斷用戶是從哪一個標(biāo)簽進(jìn)入App的奴饮,該字段的值可以為空。
UIApplicationShortcutItemTitle 這個鍵值設(shè)置標(biāo)簽的標(biāo)題 必有項 我們可以監(jiān)聽該項的值來判斷用戶是從哪一個標(biāo)簽進(jìn)入App的
UIApplicationShortcutItemSubtitle 設(shè)置標(biāo)簽的副標(biāo)題 可選項
UIApplicationShortcutItemIconType 設(shè)置標(biāo)簽的圖標(biāo)樣式供填,系統(tǒng)提供了29中樣式的圖標(biāo)拐云,但大部分只能在9.1的系統(tǒng)上使用,只有少數(shù)可以在9.0的系統(tǒng)中使用近她,這一部分會在后邊詳細(xì)介紹 可選項
UIApplicationShortcutItemIconFile 設(shè)置自定義標(biāo)簽圖片文件的路徑 可選項
UIApplicationShortcutItemUserInfo 設(shè)置用戶信息叉瘩,是一個字典類型,可以用來傳值 可選項
2.動態(tài)添加
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"chuan" localizedTitle:@"title" localizedSubtitle:@"" icon:icon1 userInfo:nil];
[UIApplication sharedApplication].shortcutItems = @[item1];
///3dtouch回調(diào)
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
if ([shortcutItem.type isEqualToString:@"chuan"]) {
//執(zhí)行操作
}
}
peek and pop
首先需要繼承代理<UIViewControllerPreviewingDelegate>
在viewwillappear里判斷是否打開了3d touch功能
if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){
self.isOpen3DTouch = YES;
}
在支持3D Touch的設(shè)備上,用戶可以在程序運行期間通過設(shè)置 -> 通用 -> 輔助功能 -> 3D Touch來關(guān)閉3D Touch功能,所以我們有必要通過重寫-traitCollectionDidChange:方法隨時處理
-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){
self.isOpen3DTouch = YES;
}
}
我這里是對cell進(jìn)行的按壓處理
if (self.isOpen3DTouch) { [self registerForPreviewingWithDelegate:self sourceView:cell]; }
#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
//通過預(yù)覽上下文獲取到當(dāng)前按壓的視圖,判斷indexPath值
NSIndexPath *indexPath = [_boaterTable indexPathForCell:(UITableViewCell *)previewingContext.sourceView];
//通過上下文可以調(diào)整不被虛化的范圍
previewingContext.sourceRect = CGRectMake(0, 0, kScreenWidth, 102);
///這里是需要預(yù)覽的視圖
GWJobInfoViewController *ivc =[[GWJobInfoViewController alloc] init];
ivc.title = @"求職信息";
ivc.model = self.dataArr[indexPath.section];
ivc.isSearch = YES;
ivc.touch = ^(NSString *msg){
[self.view makeToast:msg];
};
//可以調(diào)整預(yù)覽視圖的大小
// ivc.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 200);
return ivc;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{
[self showViewController:viewControllerToCommit sender:self];
}
在預(yù)覽是視圖里實現(xiàn)-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
此方法,可以實現(xiàn)上拉實現(xiàn)功能
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
// 生成UIPreviewAction 自定義action
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"邀請加入" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
//可以有多個功能 以數(shù)組形式返回
NSArray *actions = @[action1];
return actions;
}
Force Properties
這個功能目前使用的比較少粘捎,這里就展示個小demo薇缅,按壓改變背景色。
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// UITouch *touch = touches.anyObject;
//
// /**
// * maximumPossibleForce 最大 6.67
// */
// NSLog(@"%.2f,%2f",touch.force,touch.maximumPossibleForce); //iOS 9.0之后
//
// CGFloat radio = touch.force / touch.maximumPossibleForce;
//
// self.view.backgroundColor = [UIColor colorWithRed:radio green:radio blue:radio alpha:1];
}