iOS开发 swift 3dTouch实现 附代码


一、What?

从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反馈。


二、how? 实现方式?

如果静态方式和动态方式同时使用,app默认调用静态方式中的设置。

2.1 静态方式

在info.plist中直接添加,最多只能显示4个,超过4个只会显示前4个。

【效果】

2.2 动态方式

使用代码注册。
【代码】

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {// Override point for customization after application launch.let itemIcon1 = UIApplicationShortcutIcon(templateImageName: "AIcon")let item1 = UIApplicationShortcutItem.init(type: "type1", localizedTitle: "short 兴", localizedSubtitle: "subTitle1", icon: itemIcon1, userInfo: nil)let itemIcon2 = UIApplicationShortcutIcon.init(templateImageName: "rightIcon")let item2 = UIApplicationShortcutItem.init(type: "type2", localizedTitle: "short 海", localizedSubtitle: "subTitle2", icon: itemIcon2, userInfo: nil)let itemIcon3 = UIApplicationShortcutIcon.init(type: .add)let item3 = UIApplicationShortcutItem.init(type: "type3", localizedTitle: "short 物", localizedSubtitle: "subTitle3", icon: itemIcon3, userInfo: nil)let itemIcon4 = UIApplicationShortcutIcon(type: .add)let item4 = UIApplicationShortcutItem.init(type: "type4", localizedTitle: "short 联", localizedSubtitle: "subTitle4", icon: itemIcon4, userInfo: nil)UIApplication.shared.shortcutItems = [item4, item3, item2, item1]return true}

【效果】


三、app内部3d Touch的使用

【步骤1】在需要使用3d Touch的VC中继承UIViewControllerPreviewingDelegate。

class ViewController: UIViewController, UIViewControllerPreviewingDelegate {

【步骤2】实现该delegate的方法。

//当用力按压的时候要预览的VC
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {var iVC = UIViewController()iVC.view.backgroundColor = UIColor.bluereturn iVC}
//当用力按压持续用力的时候,所要进行的操作
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {var iVC = UIViewController()iVC.view.backgroundColor = UIColor.yellowself.navigationController?.pushViewController(iVC, animated: true)}

【步骤3】给对应的view(按钮)注册3Dtouch事件

            btn.frame = CGRect(x: x, y: y, width: w, height: h)btn.backgroundColor = UIColor.orangebtn.setTitle("button "+"\(i+1)", for: .normal)btn.addTarget(self, action: #selector(onBtn(sender:)), for: .touchUpInside)if traitCollection.forceTouchCapability == .available{registerForPreviewing(with: self, sourceView: btn)//给对应的view(按钮)注册3Dtouch事件}view.addSubview(btn)

【步骤4 peek】
peek没有上滑显示按钮,但松开手指效果消失。

【步骤5 pop】
pop上滑会在底部显示自定义按钮。要实现pop,在previewingContext中返回的VC需要
1、继承UIViewControllerPreviewingDelegate;
2、重写previewActionItems,即pop下方的按钮;

extension ViewController{//重写previewActionItemsoverride var previewActionItems: [UIPreviewActionItem] {let action1 = UIPreviewAction(title: "跳转", style: .default) { (action, previewViewController) inlet showVC = ViewController()showVC.hidesBottomBarWhenPushed = truepreviewViewController.navigationController?.pushViewController(showVC, animated: true)}let action3 = UIPreviewAction(title: "取消", style: .destructive) { (action, previewViewController) inprint("我是取消按钮")}////该按钮可以是一个组,点击该组时,跳到组里面的按钮。let subAction1 = UIPreviewAction(title: "测试1", style: .selected) { (action, previewViewController) inprint("我是测试按钮1")}let subAction2 = UIPreviewAction(title: "测试2", style: .selected) { (action, previewViewController) inprint("我是测试按钮2")}let subAction3 = UIPreviewAction(title: "测试3", style: .selected) { (action, previewViewController) inprint("我是测试按钮3")}let groupAction = UIPreviewActionGroup(title: "更多", style: .default, actions: [subAction1, subAction2, subAction3])return [action1, action3, groupAction]}}

四、github代码

如果本博客对您有帮助,希望可以得到您的赞赏!
完整代码附上:https://github.com/Liuyubao/LYB3DTouch

iOS开发 swift 3dTouch实现 附代码相关推荐

  1. xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子

    xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子 这是自己在CSDN上发的第二篇文章,开始用markdown编辑,更加美观一些. 问题描述 在用xcode swift语言开 ...

  2. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇-(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  3. 李洪强iOS开发Swift篇—02_变量和常量

    李洪强iOS开发Swift篇-02_变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3. ...

  4. iOS开发Swift语言学习教程-欧阳坚-专题视频课程

    iOS开发Swift语言学习教程-16345人已学习 课程介绍         Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...

  5. swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  6. pythonios脚本语言-iOS开发Swift篇—(一)简单介绍

    一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为"雨燕",是它的LOGO 是一只燕子,跟Objective-C一样,可以用于 ...

  7. IOS开发Swift——开发小知识(持续更新)

    如有错误,请指正!谢谢! 侵权删!(部分转载) 1.PHAsset获取本地视频的url PHCachingImageManager().requestAVAsset(forVideo: asset, ...

  8. iOS开发--Swift:布局库——SnapKit

    如果你是只从事过iOS开发,觉得使用SnapKit(OC中的Masonry)很方便,甚至xib拖拉也不错. 可以说,这些都是iOS开发稀疏平常的日常. 但一旦你学过Flutter/Vue写过UI组件, ...

  9. iOS开发-Swift进阶之枚举enum!

    swift进阶总汇 本文主要介绍enum的常见使用形式,以及枚举大小是如何计算的 补充:添加脚本自动生成SIL 通过target -> +,选择 other -> Aggregate,然后 ...

最新文章

  1. 斯坦福2021版图机器学习课程完结,视频、PPT全放送,大神主讲
  2. c# 扩展方法奇思妙用高级篇六:WinForm 控件选择器
  3. 纪中C组模拟赛总结(2019.7.6)
  4. php模拟post提交数据,用处很多,可用来网站的采集,登陆等等
  5. 硅谷历史_使其新颖:硅谷设计的历史
  6. ViTAEv2世界第一:6亿参数模型,ImageNet Real 91.2%最高准确率,更大模型、更多任务、更高效率...
  7. Oracle存储过程的异常处理
  8. 设计模式--观察者模式与命令模式
  9. VScode设置个性化背景
  10. 超高度近视合并白内障患者如何重返年轻优视力
  11. 计算机wps文字基础知识,计算机基础及WPS Office应用常见考试内容
  12. 安装无人值守称重系统费用
  13. 如何在SCI检索杂志上发表论文
  14. 软件测试自学入门书籍
  15. HyperLynx(二十六)电源完整性之AC去耦仿真实例(一)
  16. 主合同与补充合同的区别有哪些?
  17. 网页安全证书错误但无法安装证书的解决办法
  18. Java8的流特性-常用操作(例)
  19. 【阅读笔记】Dynamical time series analytics
  20. 广域确定性网络技术概述

热门文章

  1. 对策论基础---其他类型对策简介
  2. Chrome插件的使用
  3. STM32CubeMX介绍、下载与安装
  4. 利用 ChatGPT 简化微信聊天内容
  5. 安卓最新版本_小米穿戴app下载安装-小米穿戴app官方版下载v1.2.1 安卓最新版本...
  6. Who is the lion(谁是狮子)!
  7. 请假工资扣费总额计算机公式,病假扣款计算公式excel
  8. 4、GET和POST的区别
  9. 路由器芯片和服务器,软路由就是软路由,还是回归它本该有的身份吧。一个越折腾越迷茫者的经历...
  10. mysql 1213