iOS開發--3D Touch的基本使用



1.桌面快捷菜單項

效果如圖:


桌面快捷菜單


點擊之后的效果如圖:


點擊桌面快捷菜單的效果

接下來看下具體實現:
1).在-application:didFinishLaunchingWithOptions:
方法中用-setShortcutItems:方法來添加快捷菜單項。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//3D Touch按壓程序圖標的快捷項
//快捷菜單的圖標
UIApplicationShortcutIcon *icon1=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCaptureVideo];
UIApplicationShortcutIcon *icon2=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
UIApplicationShortcutIcon *icon3=[UIApplicationShortcutIcon iconWithTemplateImageName:@"search"];
//快捷菜單
UIApplicationShortcutItem *item1=[[UIApplicationShortcutItem alloc]initWithType:@"1"
localizedTitle:@"嘿嘿"
localizedSubtitle:nil
icon:icon1
userInfo:nil];
UIApplicationShortcutItem *item2=[[UIApplicationShortcutItem alloc]initWithType:@"1"
localizedTitle:@"呵呵"
localizedSubtitle:@"干嘛去洗澡"
icon:icon2
userInfo:nil];
UIApplicationShortcutItem *item3=[[UIApplicationShortcutItem alloc]initWithType:@"1"
localizedTitle:@"搜索"
localizedSubtitle:nil
icon:icon3
userInfo:nil];
//設置app的快捷菜單
[[UIApplication sharedApplication] setShortcutItems:@[item1,item2,item3]];
//導航
self.window.rootViewController=[[UINavigationController alloc]initWithRootViewController:[ViewController new]];
return YES;
}

2).在-application:performActionForShortcutItem:completionHandler:方法中實現點擊快捷菜單的方法:
//3D Touch按壓程序圖標的快捷項時觸發的方法
-(void)application:(UIApplication )application performActionForShortcutItem:(UIApplicationShortcutItem )shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
NSString title;
if([shortcutItem.localizedTitle isEqualToString:@"嘿嘿"])
{
title=@"嘿嘿";
}
else if([shortcutItem.localizedTitle isEqualToString:@"呵呵"])
{
title=@"呵呵";
}
else if([shortcutItem.localizedTitle isEqualToString:@"搜索"])
{
title=@"搜索";
}
//這里就彈個框子意思一下
//由於UIAlertView在iOS 9被廢棄,因此選用UIAlertController
UIAlertController
alertController=[UIAlertController alertControllerWithTitle:@"提示"
message:[NSString stringWithFormat:@"你點擊了“%@”",title]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction action=[UIAlertAction actionWithTitle:@"知道了"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction
action) {
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
[alertController addAction:action];
[self.window.rootViewController presentViewController:alertController
animated:YES
completion:nil];
}

2.程序內的3DTouch按壓操作:


表視圖

3DTouch按壓的時候生成的預覽

peek時上拉出現的菜單


1).首先,實現3DTouch的視圖控制器要遵守:
UIViewControllerPreviewingDelegate協議,它有2個required級別的協議方法:
-previewingContext:viewControllerForLocation:
以及
-previewingContext:commitViewController:

2).檢測3DTouch是否可用,並注冊3DTouch:

檢測3D Touch是否可用

-(BOOL)is3DTouchAvailiable
{
if(self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable)
return YES;
return NO;
}

注冊3DTouch
if([self is3DTouchAvailiable])
{
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}

3).實現協議方法:

-(UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
NSIndexPath *indexPath=[_tbVew indexPathForRowAtPoint:CGPointMake(location.x, location.y-64)];
if(indexPath)
{
DetailViewController *detail=[[DetailViewController alloc]init];
detail.title=_dataArray[indexPath.row];
//detail.preferredContentSize=CGSizeMake(300, 300);
__weak typeof(self) wkSelf=self;
//------------上拉時的菜單-------------------
//置頂及其點擊邏輯
UIPreviewAction *topAction=[UIPreviewAction actionWithTitle:@"置頂" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * action, UIViewController * previewViewController) {
[wkSelf.dataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];
[wkSelf.tbVew reloadData];
[wkSelf showAlert:@"提示" body:@"已置頂"];
}];
//刪除及其點擊邏輯
UIPreviewAction *deleteAction=[UIPreviewAction actionWithTitle:@"刪除" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction *action, UIViewController * previewViewController) {
[wkSelf.dataArray removeObjectAtIndex:indexPath.row];
[wkSelf.tbVew reloadData];
[wkSelf showAlert:@"警告" body:@"已刪除"];
}];
//傳遞上拉菜單項給detail
detail.actions=@[topAction,deleteAction];
return detail;
}
return nil;
}
-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
[self showViewController:viewControllerToCommit sender:self];
}

4).要previewing的視圖控制器必須實現:
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems方法,該方法定義了peek時上拉出來的菜單:

/**peek時上拉出來的菜單*/
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
return self.actions;
}

https://github.com/whj111/3D_Touch_Demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM