## 3D Touch开发全面教程之Peek and Pop - 预览和弹出

---

### 了解3D Touch

在iPhone 6s和iPhone 6s Plus中Apple引入了3D Touch技术。3D Touch的触控技术,被苹果称为新一代多点触控技术。系统只能支持iOS9+,硬件是iPhone6S+。

iOS9提供了四类API

1. Home Screen Quick Action : 对着Icon按压,弹出快捷菜单
2. Peek & Pop : 对着APP内容按压,会弹出内容预览和快捷菜单
3. WebView Peek & Pop : 使用`SFSafariViewController`打开的网页内容自带Peek & Pop 效果
4. UITouch Force Properties : 检测用户按压力度

###

检测是否支持3D Touch:`UIForceTouchCapability `是一个枚举值,取值如下:

case unknown //3D Touch检测失败
case unavailable //3D Touch不可用
case available //3D Touch可用

在`UIViewController`中`traitCollection`属性中,可以间接获取到`UIForceTouchCapability `

if(self.traitCollection.forceTouchCapability == .available){
//TODO ...
}

### 代码实现

1. 显示peek视图

2. peek视图时手指上滑,唤出peek视图快速选项

##### 代码实现 1 - 显示peek视图

首先要控制器中注册代理

registerForPreviewingWithDelegate(self, sourceView: view)

然后实现代理`UIViewControllerPreviewingDelegate `的方法`func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?`

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

我们申明一个peek视图的控制器,也就是正常情况下点击UITableViewCell要跳转到的控制器,设置控制器内容和peek视图的大小,设置大小使用preferredContentSize 属性,如果为0的话则系统自动配置最佳大小

guard let indexPath = tableView.indexPathForRow(at: location) , let cell = tableView.cellForRow(at: indexPath) else {
return nil
}

let detailVc = DetailViewController()

detailVc.preferredContentSize = CGSize(width: 0, height: 0)
previewingContext.sourceRect = cell.frame
detailVc.mTitle = cell.textLabel?.text
return detailVc

}

##### 代码实现 2 - peek视图时手指上滑,唤出peek视图快速选项

要实现这个操作,需要在peek视图对应的控制器中重写previewActionItems方法

比如我这里重写后是这样的:

override var previewActionItems: [UIPreviewActionItem] {

let a1 = UIPreviewAction(title: "在新标签中打开", style: .default, handler: { (action, vc) in
print(action.title)
})
let a2 = UIPreviewAction(title: "加入阅读列表", style: .selected, handler: { (action, vc) in
print(action.title)
})
let a31 = UIPreviewAction(title: "拷贝", style: .default, handler: { (action, vc) in
print(action.title)
})
let a32 = UIPreviewAction(title: "收藏", style: .default, handler: { (action, vc) in
print(action.title)
})
let a3 = UIPreviewActionGroup(title: "共享&更多...", style: .default, actions: [a31,a32])

return [a1,a2,a3]
}

### Web view peek and pop API (HTML链接预览功能)
除了tableViewCell可以实现peek and pop, 原生的safari浏览器中的超链接可以支持3D touch,出现超链接的预览,使用方法和前文中提到的方法类似。

ios 9 中增加了一个新的浏览器控制器叫做 ` SFSafariViewController ` ,它可以在你的程序中直接嵌入 Safari浏览器,简单的写一段示例代码:

`import SafariServices`

let sasfarVc = SFSafariViewController(url: URL(string:"https://www.baidu.com"), entersReaderIfAvailable: true)
self.navigationController ?.pushViewController(sasfarVc, animated: true)

这样,我们就在app内嵌的Safari浏览器并且打开了baidu的页面,并且使用3d touch超链接也会有预览的效果了。

参考:

- [在iOS9中使用3D Touch](http://liuyanwei.jumppo.com/2016/04/01/iOS-3DTouch-2.html)
- [iOS 3D touch开发(二) peek and pop - 预览和弹出](http://liuyanwei.jumppo.com/2016/04/01/iOS-3DTouch-2.html)

3D Touch开发全面教程之Peek and Pop - 预览和弹出的更多相关文章

  1. 你想知道的3D Touch开发全在这里了

    前言 iPhone 6s和iPhone 6s Plus为多点触摸界面带来了强大的3D触摸新维度.这项新技术可以感知用户按下显示屏的深度,让他们比以往任何时候都更能使用你的应用程序和游戏.更多关于3D ...

  2. Peek和Pop功能开发(3D Touch开发之一)

    1.哪些设备支持3D Touch iPhone 6s/Plus.iPhone 7s/Plus.iPhone 8s/Plus.iPhone X (系统必须是iOS9或者更新的版本) 2.怎么实现Peek ...

  3. 3D Touch开发

    一.3d Touch 官方文档介绍 1.A user can now press your Home screen icon to immediately access functionality p ...

  4. 3D Touch开发技巧的笔记

    iPhone6s以及iPhone6s plus搭载iOS9,有一个新功能叫做3D Touch,这个功能有很大的用处,关键是要会用,这给交互方式又多了一个新的选择和思考,比如说游戏中的额外控制选项.绘图 ...

  5. [学习笔记]Javaweb开发视频教程之Tomcat9配置

    参考自北京动力节点的视频教程:https://www.bilibili.com/video/av14548279/?p=1 1.Java XE Java SE 是做电脑上运行的软件. Java EE ...

  6. 微信小程序,预览在开发工具上显示正常,手机预览二维码报request->fail错误,打开手机的调试功能又正常。

    这里错误很明显是属于网址错误,开发工具和手机调试都能走request->success: 唯独常规模式下无法显示. 最开始调试过很多方法,没找出原因.最后到小程序开发设置才发现,自己未配置服务器 ...

  7. ipad iphone 开发的应用,加一个启动预览图片

    如果你想在你的ipad,iphone应用启动是不显示黑屏幕,而是用一个图片代替的话,你只需要吧一张名为 Default.png 的图片加到项目里就行了. 很简单吧,新手们记得去这样美化下你的应用吗,很 ...

  8. 【转】 教你如何创建类似QQ的android弹出菜单

    原文地址:http://www.apkbus.com/android-18034-1-1.html 大家可能看到android的自带的系统菜单比较难看,如图: 2011-12-4 23:13 上传 下 ...

  9. 教你一招:解决Windows 开机弹出AotuIt ERROR 错误

    AutoIt是个脚本语言,常被用于自动化安装.网络上有些系统镜像里含有AutoIt脚本,用于系统的自动配置.出现这种问题往往有两种可能的原因: 1)做系统的时候没搞好.这种情况就需要换一个镜像文件. ...

随机推荐

  1. Java Spring MVC项目搭建(一)——Spring MVC框架集成

    1.Java JDK及Tomcat安装 我这里安装的是JDK 1.8 及 Tomcat 8,安装步骤详见:http://www.cnblogs.com/eczhou/p/6285248.html 2. ...

  2. bzoj3551

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 297[Submit][S ...

  3. ipyparallel 中的 pi的求法

    1.PI的求法的数学依据 如图,可以看见在边长为1的正方形里面,有一个1/4圆,我们随机在正方形中取点,点在圆内的概率和点在正方形内的概率之比正好为两者的面积之比.这样就有在圆内的点的数目比所有点的数 ...

  4. Spring 之 配置(Java之负基础实战)

    1.程序加入Spring <?xml version="1.0" encoding="utf-8"?> <web-app xmlns=&quo ...

  5. iOS oc和swift中协议的使用

    创建一个空的工程 在工程中我们新建一个类 继承与NSObject 定义一个协议‘ @protocol UpdateAlertDelegate <NSObject> //这里的红色字体就是我 ...

  6. Spring mvc基本原理

    http://blog.csdn.net/xtu_xiaoxin/article/details/8796499 http://www.cnblogs.com/wawlian/archive/2012 ...

  7. HTML 颜色值

    HTML 颜色值 颜色由红(R).绿(G).蓝(B)组成. 颜色值 颜色值由十六进制来表示红.绿.蓝(RGB). 每个颜色的最低值为0(十六进制为00),最高值为255(十六进制为FF). 十六进制值 ...

  8. permeation开篇

    学习方法: To follow the path look to the master follow the master walk with the master see through the m ...

  9. SimpleDateFormat解析的时候字符串过长问题

    竟然不会报错: try { SimpleDateFormat dateFormatFrom = new SimpleDateFormat("yyyyMMddHHmmss"); St ...

  10. java配置环境变量-及原因

    为什么java要配置环境变量? 那就要从java的编译和解析过程说起 java文件的编译和解析过程 一.一个hellow.java文件,要经历先编译(变成hellow.class),再解析(解析成机器 ...