Swift开发之3DTouch实用演练

swift-基于3DTouch压力触发的按钮类似于iOS11控制中心 基于3D Touch压力触发的按钮,类似于iOS 11控制中心 立即下载

Swift开发之3DTouch实用演练

2015年,苹果发布了iOS9以及iphone6s/iphone6s Plus,其中最具有创新的就是新的触控方式3D Touch,相对于多点触摸在平面二维空间的操作,3D Touch技术增加了对力度和手指面积的感知,可以通过长按快速预览、查看你想要的短信、图片或者超链接等内容,Peek和Pop手势的响应时间可迅捷到 10ms和15ms等。

  • 用户现在可以按主屏幕图标立即访问应用程序提供的功能。
  • 在您的应用程序中,用户现在可以按视图来查看其他内容的预览,并获得对功能的加速访问
  • 在日常开发中,我们经常需要使用3D Touch中的两个功能
    • 在主屏幕上对应用图标使用3DTouch操作
    • 在应用程序内对某一控件使用3DTouch操作
  • 功能需要iOS9以上系统和iphone6s/iphone6s Plus及以上机型(模拟机现在也是可以的)
  • demo地址

一. 效果演练

1. 主屏幕快速操作

  • 通过按下iPhone 6s或iPhone 6s Plus上的应用程序图标,用户可以获得一组快速操作。
  • 当用户选择快速操作时,您的应用程序激活或启动,并跳转到相应界面
    主屏幕快速操作

2. Peek and Pop

  • 对界面内某一控件的3DTouch操作
  • Peek和Pop是应用内的一种全新交互模式,当用户不断增加力量在控件上按压,会依次进入四个阶段
  • 轻按控件,除触发Peek的控件外,其他区域全部虚化
  • 继续用力Peek被触发,展示Pop界面快照
  • 向上滑动展示快捷选项
  • 继续用力跳转进入Pop界面

轻按控件,除触发Peek的控件外,其他区域全部虚化

继续用力Peek被触发,展示Pop界面快照

向上滑动展示快捷选项

3. 注意

  • 3D Touch仅在3D Touch设备上可用,如果启用。在iOS 9以上,默认情况下启用3D Touch。
  • 用户可以在设置>常规>辅助功能> 3D触摸中关闭3D触摸。
  • 当3D Touch可用时,利用其功能。当它不可用时,提供替代方法,例如通过使用触摸和保持。
  • 3D Touch功能支持VoiceOver。

二. 主屏幕操作

  • ShortcutItem功能允许用户在主屏幕上对应用图标使用3DTouch操作,如果本次操作有效,则会给出几个快捷可选项允许用户进行操作
  • 主屏幕icon上的快捷标签的实现方式有两种,一种是在工程文件info.plist里静态设置,另一种是代码的动态实现
  • 优先显示静态添加,总数达到4个不再显示

1. 静态设置

  • 在info.plist中添加UIApplicationShortcutItems关键字,以如下方式配置即可

UIApplicationShortcutItems配置

其中各个关键字释义如下:
- UIApplicationShortcutItemType: 快捷可选项的特定字符串(必填)
- UIApplicationShortcutItemTitle: 快捷可选项的标题(必填)
- UIApplicationShortcutItemSubtitle: 快捷可选项的子标题(可选)
- UIApplicationShortcutItemIconType: 快捷可选项的图标(可选)
- UIApplicationShortcutItemIconFile: 快捷可选项的自定义图标(可选)
- UIApplicationShortcutItemUserInfo: 快捷可选项的附加信息(可选)

2. 动态添加UIApplicationShortcutItem

2-1. UIApplicationShortcutItem初始化方法
UIApplicationShortcutItem(type: String, localizedTitle: String, localizedSubtitle: String?, icon: UIApplicationShortcutIcon?, userInfo: [AnyHashable : Any]?)
  • 参数介绍
    • type: 快捷可选项的特定字符串(必填)
    • localizedTitle: 快捷可选项的标题(必填)
    • localizedSubtitle: 快捷可选项的子标题(可选)
    • icon: 快捷可选项的图标(可选)
    • userInfo: 快捷可选项的附加信息(可选)
2-1. 图标
2-1-1. 初始化方式
//方式一: 自定义图标
//注: 自定义图标需要使用镂空图标,同时建议1倍图标大小为35*35
UIApplicationShortcutIcon(templateImageName: String)

//方式二: 使用系统图标
UIApplicationShortcutIcon(type: UIApplicationShortcutIconType)
2-1-2. 系统图标样式如下

系统图片一览表

2-3. 具体实现代码如下
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    //3D Touch
    let homeIcon = UIApplicationShortcutIcon(type: .compose)
    let homeItem = UIApplicationShortcutItem(type: "homeAnchor", localizedTitle: "首页", localizedSubtitle: "点击进入首页", icon: homeIcon, userInfo: nil)
    let playIcon = UIApplicationShortcutIcon(type: .play)
    let playItem = UIApplicationShortcutItem(type: "play", localizedTitle: "播放", localizedSubtitle: "", icon: playIcon, userInfo: nil)
    let userIcon = UIApplicationShortcutIcon(type: .search)
    let userItem = UIApplicationShortcutItem(type: "username", localizedTitle: "用户名", localizedSubtitle: "", icon: userIcon, userInfo: nil)

    UIApplication.shared.shortcutItems = [homeItem, playItem, userItem]

    return true
}
2-4. item点击跳转
  • 可根据type标识判断
  • 可根据localizedTitle标识判断
//菜单跳转
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
    guard let tabBarVC = window?.rootViewController as? MainViewController else { return }

    //根据type唯一标识进行判断跳转, 或者根据localizedTitle判断
    switch shortcutItem.type {
    case "homeAnchor":
        tabBarVC.selectedIndex = 1
    case "play":
        let username = ShowRoomViewController()
        username.hidesBottomBarWhenPushed = true
        tabBarVC.selectedViewController?.childViewControllers.first?.present(username, animated: true, completion: nil)
    case "username":
        let username = NameViewController()
        username.hidesBottomBarWhenPushed = true
        tabBarVC.selectedViewController?.childViewControllers.last?.navigationController?.pushViewController(username, animated: true)
    default:
        tabBarVC.selectedIndex = 0
    }
}

三. Peek and Pop

  • Peek和Pop是应用内的一种全新交互模式,当用户不断增加力量在控件上按压,会依次进入四个阶段
  • 这里小编将通过ViewController里面的UITableViewCell进行延时功能

注意: 在动态添加快捷可选项前,需要用判断是否支持3D Touch功能,以免在不支持的设备上运行程序导致闪退

1. 判断是否支持3D Touch功能

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    let model = happyVM.anchorGroups[indexPath.section].anchors[indexPath.row]
    if cell == nil {
        cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell?.textLabel?.text = model.room_name
        cell?.accessoryType = .disclosureIndicator
    }

---
    //这里是添加判断是否支持3D Touch的代码
    if #available(iOS 9.0, *) {
        if traitCollection.forceTouchCapability == .available {
            //支持3D Touch
            //注册Peek & Pop功能
            registerForPreviewing(with: self, sourceView: cell!)
        }
    }
---

    return cell!
}

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

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

2. 给对应view注册3Dtouch事件

  • 在判断支持3Dtouch里面注册
//注册Peek & Pop功能
self.registerForPreviewing(with: self, sourceView: cell!)

3. 遵守UIViewControllerPreviewingDelegate协议

  • 需要实现Peek & Pop交互的控件所在的控制器遵循协议并实现两个代理方法
3-1. 当进入Peek状态时,系统会回调如下方法
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    //1. 获取按压的cell所在的行
    guard let cell = previewingContext.sourceView as? UITableViewCell else { return UIViewController() }
    let indexPath = tableVIew.indexPath(for: cell) ?? IndexPath(row: 0, section: 0)

    //2. 设定预览界面
    let vc = ShowRoomViewController()
    // 预览区域大小(可不设置), 0为默认尺寸
    vc.preferredContentSize = CGSize(width: 0, height: 0)
    vc.showStr =  "我是第\(indexPath.row)行用力按压进来的"

    //调整不被虚化的范围,按压的那个cell不被虚化(轻轻按压时周边会被虚化,再少用力展示预览,再加力跳页至设定界面)
    let rect = CGRect(x: 0, y: 0, width: kScreenWidth, height: 44)
    //设置触发操作的视图的不被虚化的区域
    previewingContext.sourceRect = rect

    //返回预览界面
    return vc
}
3-2. 当进入Pop状态时,系统会回调如下方法
  • 用力按压进入viewControllerToCommit
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    viewControllerToCommit.hidesBottomBarWhenPushed = true
    show(viewControllerToCommit, sender: self)
}

来看看效果

3D Touch1演示.gif

3-4. 当弹出预览时,上滑预览视图,出现预览视图中快捷选项
var previewActionItems: [UIPreviewActionItem] { get }
  • previewActionItems用户在3D Touch预览上向上滑动时显示的快速操作
  • 在将要弹出的页面内重写previewActionItems的get属性
extension ShowRoomViewController {
    //重写previewActionItems的get方法
    override var previewActionItems: [UIPreviewActionItem] {
        let action1 = UIPreviewAction(title: "跳转", style: .default) { (action, previewViewController) in
            let showVC = ShowRoomViewController()
            showVC.hidesBottomBarWhenPushed = true
            previewViewController.navigationController?.pushViewController(showVC, animated: true)
        }

        let action3 = UIPreviewAction(title: "取消", style: .destructive) { (action, previewViewController) in
            print("我是取消按钮")
        }

        ////该按钮可以是一个组,点击该组时,跳到组里面的按钮。
        let subAction1 = UIPreviewAction(title: "测试1", style: .selected) { (action, previewViewController) in
            print("我是测试按钮1")
        }
        let subAction2 = UIPreviewAction(title: "测试2", style: .selected) { (action, previewViewController) in
            print("我是测试按钮2")
        }
        let subAction3 = UIPreviewAction(title: "测试3", style: .selected) { (action, previewViewController) in
            print("我是测试按钮3")
        }
        let groupAction = UIPreviewActionGroup(title: "更多", style: .default, actions: [subAction1, subAction2, subAction3])

        return [action1, action3, groupAction]
    }
}

action的各种样式

public enum UIPreviewActionStyle : Int {

    //默认样式
    case `default`
    //右侧有对勾的样式
    case selected
    //红色字体的样式
    case destructive
}
3-5. force 和 maximumPossibleForce

到此,3DTouch在APP中的集成就先介绍这些,3DTouch中还有个重要的属性–压力属性(force 和 maximumPossibleForce)这里简单介绍下

  • 手指在屏幕上慢慢增加力度在减少力度,可以看到view背景色的变化
  • 程序运行后找到我的 -> 头像(用户名)查看效果
  • 代码找到NameViewController.swift查看

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first ?? UITouch()
    //获取重按力度
    print("平均触摸的力--\(touch.force)")
    print("触摸的最大可能力--\(touch.maximumPossibleForce)")

    let change = touch.force / touch.maximumPossibleForce
        view.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: change, alpha: 1)
}

此外还有以下属性, 详细可参考3D Touch官方文档

var tapCount: Int
//手指触摸此次触摸的次数。

var timestamp: TimeInterval
//触摸发生的时间或最后一次突变的时间。

var type: UITouchType
//触摸的类型。

enum UITouchType
//接收的触摸类型。

var phase: UITouchPhase
//触摸的阶段。

enum UITouchPhase
//手指触摸的阶段。

var maximumPossibleForce: CGFloat
//触摸的最大可能力。

var force: CGFloat
//触摸力,其中值表示平均触摸的力(由系统预定,不是用户特定的)。1.0

var altitudeAngle: CGFloat
//手写笔的高度(弧度)。

func azimuthAngle(in: UIView?)
//返回触控笔的方位角(弧度)。

func azimuthUnitVector(in: UIView?)
//返回指向触控笔方位角方向的单位向量。

最后附上Demo地址


参考资料

iOS 3D touch开发

3D Touch官方文档

swift-仿小红书转场动画3DTouch仿淘宝商品详情动画 仿小红书转场动画,3DTouch,仿淘宝商品详情动画 立即下载

相关推荐

UITableView-ForceTouch:向UITableViews添加了对3D触摸的支持,因此每个单元格都可以响应对其施加的力

UITableView-ForceTouch 向UITableViews添加了对3D触摸的支持,因此每个单元格都可以响应对其施加的力。

iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能

iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能App的应用图标通过3D Touch按压App图标,会显示快捷选项,点击选项可快速进入到App的特定页面。这里用到了UIApplicationShortcutItem与UIMutableApplicationShortcutItem。

一名开发者 1238

swift 3d 入门教程

为了让大家快速了解SWIFT 3D的一些概念,我们先做一个简单的文字转到效果,我将一步步教你怎么做,请跟着做...............

Swift3D:用SwiftUI打造沉浸式3D体验

Swift3D:用SwiftUI打造沉浸式3D体验 项目介绍 Swift3D 是一款自定义的3D引擎,旨在通过声明式代码在现有的2D UI中定义和渲染3D场景。借助类似于SwiftUI的定制DSL(领域特定语言),开发者可以轻松创建复杂的3D场景,并自定义光照、过渡效果和着色器。 Swift3D充分利用了Apple的Metal图形API,确保3D体验既快速又流畅。结合SwiftUI和Metal,开...

gitblog_00837的博客 969

iOS中3DTouch预览导致TableView滑动卡顿问题解决的方法

1.发现问题 今天一早来公司,一个同事举着他的6p对我们说:“你看看这是嘛啊…怎么划不动啊…”我一看,果然,滑两下TableView,大概加载2页多就卡飞了…顿时想以是他机子太老了,物理内存不够用balabala等等原因回怼时…人家后面又说了一句:“你看人家今日头条怎么滑都没事~”。 好吧,我看看好吧。 虽然是在iPhone X上录的,但上下滑动卡顿依旧非常明显 2.排除问题 没错,我和你想的一样,十有八九应该是那几个老问题导致的: Cell高度计算问题:把同事写的SD自动计算行高写死后问题依旧存在。先排除! ///行高写死后依旧卡顿 - (CGFloat)tableView:(UIT

LightningChart使用教程:创建 JS 散点图

这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..

Augenstern__zyx的博客 1370

swift 3d v6.0汉化中文版

swift 3d是一款非常好用的flash三维动画制作软件,熟悉flash制作的用户都可以非常快的上手,现在已经得到了很多用户的喜爱,能够做出精美的3D效果,可以非常的引人注目,能够构建模型,并渲染SWF文件。 图文介绍 swift 3d汉化版的编辑场景非常方便,不管是建模还是纺锤的制作,用户都可以轻松掌握,设计出自己想要的场景。可以称得上是一个准专业级的3D 设计软件了。选择swift 3d中文版来进行简单三维动画的制作,那绝对是明智之举。 安装教程 1.首先从文章后链接上下载swift 3d v

yang199902的博客 814

MOLDFLOW 2012模流分析基础到实战视频教程

├ 1第一讲MF软件安装与界面定制及模流前期准备工作及分析流程介绍 ├ 2第二讲MF建模工具条命令讲解与图层的运用 ├ 3第三讲MF网格类型与适应范围及网格划分、诊断、修复与统计 ├ 4第四讲MF中CAD doctor 模块对导入模型的修复方法与实例 ├ 5第五讲MF中常见各种流道浇口及水路的建模方法与外部导入方法上 ├ 6第六讲MF产品模型导入CAD DOCTOR与修复 ├ 7第七讲MF分析序列设定与网格的划分与诊断及修复 ├ 8第八讲MF材料选择与成型工艺参数设定 ├ 9第九讲MF创建浇注系统:主流道、

QQ_1987083845的博客 2543

Swift3D 开源项目教程

Swift3D 开源项目教程 1. 项目介绍 Swift3D 是一个基于 Metal 的 3D 引擎,旨在通过类似于 SwiftUI 的声明式代码来定义和渲染 3D 场景。它允许开发者在现有的 2D UI 中嵌入复杂的 3D 场景,并支持自定义光照、过渡效果和着色器。Swift3D 利用 Apple 的 Metal 图形 API 来驱动 3D 体验,使其快速且响应灵敏。 2. 项目快速启动 安装 ...

gitblog_00277的博客 1067

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7169

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 310

FLASH3D技术

 平时在网上看到的Flash动画一般都是2D的,要想做出3D的动画,直接使用Flash来做是相当困难的,最好借助外部的其它软件,然后将做好的3D动画导入到Flash中进行修改。许多大型的3D软件功能都十分强大,但却很复杂,也许你只是想做一段简单的3D文字特效,难道还需要动用到3DMAX这些大型的3D软件么!所以这次我会专门为大家介绍一个3D图像和动画的制做软件-Swift3D。他制作出的3D图

程序与界面的深入研究的旅程-Matoku Technique Research 1892

深入解析达梦数据库核心技术:检查点、redo、undo、MVCC与内存缓存刷盘

MVCC 依赖 undo 日志:通过 undo 日志构建版本链,实现 “读不加锁”;刷盘依赖检查点:检查点批量清理脏页,redo 日志通过检查点释放空间;日志保障刷盘安全:redo 日志先行写入,确保未刷盘脏页可恢复;刷盘优化 MVCC 性能:优先刷冷区脏页,减少对高频访问数据的影响。例如,一个完整的 “查询 - 修改 - 提交 - 恢复” 流程中:查询时,MVCC 通过 undo 日志获取可见版本,无需等待锁;修改时,redo/undo 日志先记录,缓冲池生成脏页;

tangyuan12345678的博客 1415

iOS开发3DTouch(一)

一、3D Touch 的简单介绍 主屏幕的快捷操作: 在主屏幕按压app图标,有两种类型:静态操作(在info.plist中添加UIApplicationShortcutItems数组)和动态操作(利用 UIApplicationShortcutItem类和可用的api 创建新的对象,并将对象添加到shared UIApplication 的新属性 shortcutItems中去)。 Peek和Pop:

Cold_of_22F的博客 1012

手把手教你学Simulink——基于重复控制(RC)的并网逆变器场景实例:基于RC的单相并网逆变器仿真

本次教程深入剖析了重复控制(RC)在单相并网逆变器中的应用,解决了周期性谐波抑制这一核心难题。核心收获RC是谐波抑制的“核武器”:它利用内模原理,对所有周期性谐波提供无限大增益,实现理论上无静差的跟踪和抑制。PI+RC是黄金组合:PI提供快速响应,RC提供稳态精度,二者结合,兼顾了动态与稳态性能。结构简单,效果卓越:相比多个PR控制器,RC仅需一个模块,即可抑制所有谐波,设计简洁。电能质量的终极追求,是波形的纯净。重复控制,如同一位不知疲倦的校对员它记住每一次错误(上一周期的误差),

MHD0815的博客 189

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2195

Swift 3DTouch开发 自定义ShortcutItems

3DTouch的分享菜单是上架后系统自动加上的,其他的菜单需要我们自定义。 1.定义菜单项Model import Foundation enum ShortcutItem { case scan case send case receive case qrcode var type: String { switch self { ...

冰凉的枷锁的博客 756

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5533

关于3DTouch

关于3DTouch3D Touch最开始在Apple Watch上面,叫 Force Touch ,后在iPhone6s以后的手机加入,并改名3D Touch。通俗的说就是屏幕根据感受的力度大小,提供一些快捷操作,有Peek Pop 两种新手势。详细介绍可参考苹果官方文档。 设置Quick Actions 1在应用图标上设置:可以通过在info.plist里设置,也可以通过代码动态设置 ,首先

我的博客 568

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

iOS 3DTouch

iOS10系统登录中国,在系统中对3D Touch的使用需求更频繁,所以对iOS9中便引入的3D Touch功能做一些了解是很有必要的

findhappy117的博客 304

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IOS_3DTouch实现

1.前言     随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助。 2.如何使用3D Touch?   2.1.主界面重按APP图标,弹出Touch菜单   在AppleDelegate文件中的程序入口处配置: didFinishL

gaoyong0624的专栏 987

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

swift 中构建3DTouch 及 widget

首先,我希望通过本文能帮到大家,大家的方便就是我最好的回报! iOS设备上对用户的体验始终都是日渐提升的,其中3DTouch和widget的体验也是重要的一环。这不,最近我们多人开发的项目中也要求去做这块。 首先,支持3DTouch的苹果设备默认会帮每个没有做这块的APP会生成一个自带分享功能,弹出的页面也是苹果系统自己控制的。我们想要做一个自定义的touch功能会覆盖系统的这个分享功能。那么...

weixin_41769887的博客 325

[Swift通天遁地]三、手势与图表-(4)3DTouch功能在项目中的应用

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30347009的博客 104

iOS9新特性之实现3DTouch就是So easy(更新Swift 版 )

首先我们需要在Info.plist文件中加上一项  UIApplicationShortcutItemsUIApplicationShortcutItemIconTypeUIApplicationShortcutIconTypeShareUIApplicationShortcutItemTitleShareUIApplicationShortcutItemType-11.UITouchTex

feiyuyuan_9257的博客 423

3DTouch桌面快捷方式

3DTouch是iOS9,iPhone6s上新加的功能,之前只是一直有了解,但是由于设备的原因并没有很好的研究,后来购入一台6S所以就迫不及待的尝试了一下。 申明Quick Action有两种方式:静态和动态,静态是在plist文件中申明,动态则是在代码中注册,系统支持两者同时存在。但是系统限制每个app最多显示4个快捷图标,包括静态和动态。 静态的方法加入: 即在pli

phyLearn 1106
上一篇: iOS之POP动画使用和实战
下一篇: ReactNaive之CSS和Flex布局
CodeTitan
博客等级 码龄9年 51粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值