1:3DTouch功能

自从Iphone6s发布以来,最炫的功能就是3DTouch,这项技术,不仅极大的增加了快捷入口的方便的程度,其产品本身带来的动感交互体验也是非常带感,在这里记录一下其基本功能的实现

2:具体实现:点击应用图标实现3DTouch功能

(1:在AppDelegate中实现方法

//icon图标3DTouch//动态添加//还可以通过plist文件进行静态添加
-(void)setup3DTouch:(UIApplication *)application{UIApplicationShortcutIcon * cameraIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];UIApplicationShortcutItem * cameraItem = [[UIApplicationShortcutItem alloc] initWithType:@"ONE" localizedTitle:@"分享" localizedSubtitle:@"" icon:cameraIcon userInfo:nil];UIApplicationShortcutIcon * shareIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];UIApplicationShortcutItem * shareItem = [[UIApplicationShortcutItem alloc] initWithType:@"TWO" localizedTitle:@"拍照" localizedSubtitle:@"" icon:shareIcon userInfo:nil];//将items添加到app图标application.shortcutItems = @[cameraItem,shareItem];}

(2:实现代理方法

//同过绑定的标签type来实现具体的代码
-(void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{UINavigationController * nav = (UINavigationController *)self.window.rootViewController;if ([shortcutItem.type isEqualToString:@"ONE"]) {UIViewController * vc = [[UIViewController alloc] init];vc.title = @"ONE";vc.view.backgroundColor = [UIColor redColor];[nav pushViewController:vc animated:YES];}else if ([shortcutItem.type isEqualToString:@"TWO"]){UIViewController * vc = [[UIViewController alloc] init];vc.title = @"TWO";vc.view.backgroundColor = [UIColor grayColor];[nav pushViewController:vc animated:YES];}
}

到这里就可以实现简单的3DTouch功能

3:具体实现:应用内部实现3DTouch 如:点击TableView 的cell 实现3DTouch功能

(1:建立一个TableView 表格,如

(2: 添加 UIViewControllerPreviewingDelegate代理

(3:实现代理方法

//UIViewControllerPreviewingDelegate
//这个方法的实现就可以实现弹出预览界面的效果了
-(UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{NSIndexPath * index = [self.myTable indexPathForCell:(UITableViewCell *)[previewingContext sourceView]];NextViewController * NVC = [[NextViewController alloc] init];CGRect rect = CGRectMake(0, 0, previewingContext.sourceView.frame.size.width, previewingContext.sourceView.frame.size.height);previewingContext.sourceRect = rect;return NVC;
}

在NextViewController中也实现相同的代理方法,实现弹出view下方的选项功能

//选项功能
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems{UIPreviewAction * action0 = [UIPreviewAction actionWithTitle:@"action0" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"%s, line = %d, action0 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);}];UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"action1" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"%s, line = %d, action1 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);}];UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"action2" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"%s, line = %d, action2 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);}];UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"action3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"%s, line = %d, action2 = %@, previewViewController = %@", __FUNCTION__, __LINE__, action, previewViewController);}];//改按钮是一个数组,点击改数组时,跳到数组里里面的按钮UIPreviewActionGroup * actionGroup = [UIPreviewActionGroup actionGroupWithTitle:@"actionGroup" style:UIPreviewActionStyleSelected actions:@[action2,action3]];//直接返回数组return @[action0,action1,actionGroup];}

代码截止这里用力按压cell,接回实现弹出一级界面,效果图

接下来实现在上一个力道之上再用力按压弹出的view ,跳转至另一个视图控制器的3DTouch二级界面,实现如下的代理方法

//2:在第一个效果的基础上,在继续用力按下去,就会push预览界面了
-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{//获取点击cell时的索引,预览界面的原始图是cell,NSIndexPath * index = [self.myTable indexPathForCell:(UITableViewCell *)[previewingContext sourceView]];viewControllerToCommit.title = self.dataSouce[index.row];[self showViewController:viewControllerToCommit sender:nil];}

效果图:

到这里3DTouch功能基本实现完成。

iOS3DTouch功能实现相关推荐

  1. Android系统(97)---开源项目分类整理

    200多个开源项目分类整理,Android开发者珍藏必备 原文地址 http://www.apkbus.com/blog-955606-77825.html 日历 星期视图日历 https://git ...

  2. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  3. 详解3DTouch集成篇

    欢迎大家一起交流 QQ群 139852091 本文主要讲解3DTouch各种场景下的集成,开发主屏幕应用icon上的快捷选项标签(Home Screen Quick Actions),静态设置 UIA ...

  4. android自定义分组控件,很值得收藏的安卓开源控件库

    日历 日历列表视图 星期视图日历 提交日历日期 material风格的日历 toolbar相结合的弹出日历 横向日历 Tab Material风格的Tab 各种样式Tab ProgressBar 类似 ...

  5. 很值得收藏的安卓开源控件库

    日历 日历列表视图 github.com/traex/Calen- 星期视图日历 github.com/alamkanak/A- 提交日历日期 github.com/vikramkakka- mate ...

  6. Android 实现上拉背景模糊,Android开发者珍藏必备【开源项目篇】

    日历 星期视图日历 日历列表视图 material风格的日历 提交日历日期 适配MD风格日历 toolbar相结合的弹出日历 横向日历 Tab Material风格的Tab Material风格的Ta ...

  7. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。

    maven中有一个大多数人都忽视或者没有用到过的一个功能--install,大多数java开发人员都了解maven,使用maven进行依赖管理.但使用的大多数功能不过是clean清理.compile编 ...

  8. 一个form表单,多个提交按钮(实现不同功能和地址的提交)

    直接上代码 表单部分: <form action="" name="find" method="post" enctype=" ...

  9. nginx介绍及常用功能

    什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...

最新文章

  1. 苹果内购和 Apple Pay
  2. 刚开始学centos和Oracle
  3. Fibonacci 数列
  4. SQL SERVER 数据库如何限制一列不能重复(已经有主键)
  5. 普及风险管理的一些环节
  6. 什么叫位?什么叫字节?什么叫字长?字长表示了计算机的什么特点?,计算机应用基础...
  7. 授人以渔:分享我的文本分类经验总结
  8. 什么情况下document.write会覆盖页面及覆盖原理解释
  9. vue项目引入sass
  10. CE 自带Tutorial -第9关
  11. SDL2.0超简单入门 100行代码实现播放wav声音文件
  12. 在Vue项目中使用阿里巴巴矢量图
  13. 企业级POS收银系统源码(客户端+后台)
  14. 1080驱动此图形驱动程序_如何更新图形驱动程序以获得最佳游戏性能
  15. 用vscode开发autojs,输出窗口不显示任何输出结果
  16. 动态壁纸给linux发行版添加活力背景
  17. 一元线性回归的公式推导
  18. 最新 2022欧莱雅AI面试真题题库
  19. 基于php新闻发布平台 毕业设计-附源码141646
  20. CSS控制div不换行,超过部分用点表示

热门文章

  1. 想转行做数据产品经理?这份书单赶紧收藏起来
  2. 自然语言处理方面的顶会
  3. 成功解决 TKK: 更新 TKK 失败,请检查网络连接 idea翻译错误
  4. 【数据结构与算法python】最小生成树算法-Prim算法
  5. 转大神的日志 【大杂烩】杂7杂8的东西
  6. python负数的处理
  7. 磁共振神经根水成像_磁共振神经根水成像鉴别类肿瘤样椎间盘突出症与神经鞘瘤2例...
  8. window8系统 dns有问题怎么修复,浏览器代理设置,浏览器提示网页无法显示
  9. 入门小程序·搭建论坛
  10. java设计九宫格拼图软件哪个好用_十亿人都在拼的拼图软件,这八款最好用