参考文章:http://www.jianshu.com/p/74fe6cbc542b

下载链接:https://github.com/banchichen/3DTouch-PeekAndPopGestureDemo.git

前言:写博客呢,一来可以记录自己学习进步的点滴;二来可以边写博客边复习下对应的知识;三来:还没想到....。第一篇博客,排版、代码等难免有瑕疵,见谅~

一、shortcutIems

1.6s和6s plus特有效果,对着应用图标用力按会触发。效果是这样子的:每一个快捷按钮对应一个shortcutItem,整个是一个数组,shortcutItems。

2.对应的代码如下:也就三步,(1)配置shortcutItems;(2)判断UIApplicationLaunchOptionsShortcutItemKey是否存在,在application:didFinishLaunchWithOptions里返回不同的值;(3)实现application:performActionForShortcutItem:completionHandler方法,处理shortcutItem的点击事件。

  1. /*
  2. 当程序启动时
  3. 1、判断launchOptions字典内的UIApplicationLaunchOptionsShortcutItemKey是否为空
  4. 2、当不为空时,application:didFinishLaunchWithOptions方法返回NO,否则返回YES
  5. 3、在application:performActionForShortcutItem:completionHandler方法内处理点击事件
  6. */
  7. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  8. [self configShortCutItems];
  9. if (launchOptions[@"UIApplicationLaunchOptionsShortcutItemKey"] == nil) {
  10. return YES;
  11. } else {
  12. return NO;
  13. }
  14. }
  15.  
  16. // 动态方式 创建shortcutItems 「已在info.plist里配置好。这是代码配置的示例。」
  17. - (void)configShortCutItems {
  18. NSMutableArray *shortcutItems = [NSMutableArray array];
  19. UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"" localizedTitle:@"测试1"];
  20. UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"" localizedTitle:@"测试2"];
  21. [shortcutItems addObject:item1];
  22. [shortcutItems addObject:item2];
  23.  
  24. [[UIApplication sharedApplication] setShortcutItems:shortcutItems];
  25. }
  26.  
  27. // 处理shortcutItem
  28. - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
  29. switch (shortcutItem.type.integerValue) {
  30. case : { // 测试1
  31. [[NSNotificationCenter defaultCenter] postNotificationName:@"gotoTestVc" object:self userInfo:@{@"type":@""}];
  32. }
  33. case : { // 测试2
  34. [[NSNotificationCenter defaultCenter] postNotificationName:@"gotoTestVc" object:self userInfo:@{@"type":@""}];
  35. } break;
  36. default:
  37. break;
  38. }
  39. }

是的,总共就这么些代码。

二、peek和pop手势

1.也是6s和6s plus上才能触发。效果是这样子的:(peek手势,预览)

是的,我就配了个Lable和背景View...比较粗糙...

2.对应的代码如下:步骤为:
 (1)让控制器遵守协议 UIViewControllerPreviewingDelegate
 (2)注册  [self registerForPreviewingWithDelegate:self sourceView:self.view];
 (3)实现代理方法

  1. /** peek手势 */
  2. - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
  3. UIViewController *childVC = [[UIViewController alloc] init];
  4.  
  5. // 获取用户手势点所在cell的下标。同时判断手势点是否超出tableView响应范围。
  6. if (![self getShouldShowRectAndIndexPathWithLocation:location]) return nil;
  7.  
  8. previewingContext.sourceRect = self.sourceRect;
  9.  
  10. // 加个白色背景
  11. UIView *bgView =[[UIView alloc] initWithFrame:CGRectMake(, , __kScreenWidth - , __kScreenHeight - - * )];
  12. bgView.backgroundColor = [UIColor whiteColor];
  13. bgView.layer.cornerRadius = ;
  14. bgView.clipsToBounds = YES;
  15. [childVC.view addSubview:bgView];
  16.  
  17. // 加个lable
  18. UILabel *lable = [[UILabel alloc] initWithFrame:bgView.bounds];
  19. lable.textAlignment = NSTextAlignmentCenter;
  20. lable.text = @"有种再按重一点...";
  21. [bgView addSubview:lable];
  22.  
  23. return childVC;
  24. }
  25.  
  26. /** pop手势 */
  27. - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
  28. [self tableView:self.tableView didSelectRowAtIndexPath:self.indexPath];
  29. }
  30.  
  31. /** 获取用户手势点所在cell的下标。同时判断手势点是否超出tableView响应范围。*/
  32. - (BOOL)getShouldShowRectAndIndexPathWithLocation:(CGPoint)location {
  33. NSInteger row = (location.y - )/;
  34. self.sourceRect = CGRectMake(, row * + , __kScreenWidth, );
  35. self.indexPath = [NSIndexPath indexPathForItem:row inSection:];
  36. // 如果row越界了,返回NO 不处理peek手势
  37. return row >= self.items.count ? NO : YES;
  38. }

恩,总共就这些代码。补充几点说明:

(1)因为我这里tableView只放了6条,所以这里有判断用户的peek手势触摸点是否在tableView范围内,在才返回预览控制器,否则返回nil,不显示预览。

(2)sourceRect是peek触发时的高亮区域。这个区域内的View会高亮显示,其余的会模糊掉。你把sourceRect随意改改试试~

(3)末尾再放一下Demo地址:https://github.com/banchichen/3DTouch-PeekAndPopGestureDemo.git   觉得好的可以给个star,谢谢~

一个简单的3DTouch、Peek和Pop手势Demo,附github地址的更多相关文章

  1. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  2. 一、项目基础架构(附GitHub地址)——以ABP为基础架构的一个中等规模的OA开发日志

    前言: 最近园子里ABP炒的火热.看了几篇对于ABP的介绍后,深感其设计精巧,实现优雅.个人感觉,ABP或ABP衍生品的架构设计,未来会成为中型Net项目的首选架构模式.如果您还不了解ABP是什么,有 ...

  3. 一个简单的scrapy爬虫抓取豆瓣刘亦菲的图片地址

    一.第一步是创建一个scrapy项目 sh-3.2# scrapy startproject liuyifeiImage sh-3.2# chmod -R 777 liuyifeiImage/ 二.分 ...

  4. 神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO

    近期迷上神经进化(Neuroevolution)这个方向,感觉是Deep Learning之后的一个非常不错的研究领域. 该领域的一个主导就是仿照人的遗传机制来进化网络參数与结构.注意,连网络结构都能 ...

  5. 一个简单的代码计算行数demo编写

    最近手头的项目基本上已经完结,历经了5个月的开发和迭代,各种的需求调整,想对自己的代码量进行一个客观的计算,于是抽了点时间写下了这个小demo,朋友们有需要的可以看看,很简单. 基本的思想就是:根目录 ...

  6. 一个简单的AMD模块加载器

    一个简单的AMD模块加载器 参考 https://github.com/JsAaron/NodeJs-Demo/tree/master/require PS Aaron大大的比我的完整 PS 这不是一 ...

  7. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  8. 手写一个简单版的SpringMVC

    一 写在前面 这是自己实现一个简单的具有SpringMVC功能的小Demo,主要实现效果是; 自己定义的实现效果是通过浏览器地址传一个name参数,打印“my name is”+name参数.不使用S ...

  9. iOS9 3DTouch、ShortcutItem、Peek And Pop技术一览

    [iOS]iOS9 3DTouch.ShortcutItem.Peek And Pop技术一览   3DTouch UITouch类里API的变化 iOS9中添加的属性 altitudeAngle 当 ...

随机推荐

  1. android 平台搭建

    直接到官网下载 http://developer.android.com/sdk/index.html?utm_source=weibolife

  2. Java 7 jstat – JVM Statistics Monitoring Tool【翻译】

    原文地址:Java 7 jstat 本文内容 语法 参数 描述 虚拟机标识符 选项 一般选项 输出选项 示例 先发出来,然后慢慢翻译~ 语法 jstat [ generalOption | outpu ...

  3. [CoreOS 转载] CoreOS实践指南(六):分布式数据存储Etcd(下)

    转载:http://www.csdn.net/article/2015-01-28/2823739/2 摘要:Etcd是CoreOS生态系统中处于连接各个节点通信和支撑集群服务协同运作的核心地位的模块 ...

  4. BSTestRunner——一个丑在路上的python unnitest HTML报告生成Runner

    今天忽然看到HTMLTestRunner的样式,第一眼的感觉是样式有点过时了,稍微看了下源码,果然最后更新时间是几年前,由于实现比较简单,所以顺手将样式改一下. 效果图 设计思想 既然有UI,那么如果 ...

  5. IIS网站属性中没有ASP.NET选项

    打开IIS6,右击属性,居然没有发现ASP.NET的配置选项,虽然好久没搞这个了,但是印象中绝对是有一个ASP.NET选项卡的.我很奇怪,我以为是.net framework 2.0没安装,下载下来安 ...

  6. 用git上传本地项目到github上

    首先确认自己已经安装了git,打开git bash,输入ssh-keygen -t rsa -C "自己的邮箱地址@XXX.com" ,生成自己的公钥与私钥   一路默认回车,会生 ...

  7. RedRabbit——基于BrokerPattern服务器框架

    RedRabbit 经典网游服务器架构 该图省略了专门用途的dbserver.guildserver等用于专门功能的server,该架构的优点有: l LoginGate相当于DNS,可以动态的保证G ...

  8. UFT\QTP 12 新特性

    UFT\QTP 12 新特性 http://blog.csdn.net/testing_is_believing/article/details/22310297

  9. 关于Linux session管理与GUI架构

    google了一下感觉一下子找不到太好的资料,可能需要慢慢深入去学习. 这里有一个讲session management的,还算比较深入: https://dvdhrm.wordpress.com/2 ...

  10. SSAS:菜鸟摸门

    官方:SSAS 多维模型 Analysis Services 多维解决方案使用多维数据集结构来分析多个维度之间的业务数据. 多维模式是 Analysis Services 的默认服务器模式. 它包括针 ...