Swift如何给应用添加3D Touch菜单

Swift如何给应用添加3D Touch菜单

OneSwift – iOS Tips Based On Swift

今天为大家带来的是给应用添加3D Touch菜单,这样可以方便用户在首页即可快速访问某些页面。 以OneDay为例,通过3D Touch用户可以快速选择进入到添加页面、设置页面、归档页面、首页。

一、创建自定义的3D Touch菜单

AppDelegatedidFinishLaunchingWithOptions中,我们添加下列代码,来实现按钮的添加。

//添加icon 3d Touch
let firstItemIcon:UIApplicationShortcutIcon = UIApplicationShortcutIcon(type: .confirmation)
let firstItem = UIMutableApplicationShortcutItem(type: "1", localizedTitle: NSLocalizedString("Home", comment: "Home icon"), localizedSubtitle: nil, icon: firstItemIcon, userInfo: nil)

let firstItemIcon1:UIApplicationShortcutIcon = UIApplicationShortcutIcon(type: .taskCompleted)
let firstItem1 = UIMutableApplicationShortcutItem(type: "2", localizedTitle: NSLocalizedString("Archive ", comment: "Archive icon"), localizedSubtitle: nil, icon: firstItemIcon1, userInfo: nil)


let firstItemIcon2:UIApplicationShortcutIcon = UIApplicationShortcutIcon(type: .task)
let firstItem2 = UIMutableApplicationShortcutItem(type: "3", localizedTitle: NSLocalizedString("Setting", comment: "Setting icon"), localizedSubtitle: nil, icon: firstItemIcon2, userInfo: nil)


let firstItemIcon3:UIApplicationShortcutIcon = UIApplicationShortcutIcon(type: .add)
let firstItem3 = UIMutableApplicationShortcutItem(type: "4", localizedTitle: NSLocalizedString("Add", comment: "Add icon"), localizedSubtitle: nil, icon: firstItemIcon3, userInfo: nil)

application.shortcutItems = [firstItem,firstItem1,firstItem2,firstItem3]

复制代码

其中按钮的icon使用系统的icon图片,其他图样可以参考这个链接。

3DTouch Xcode原生图标icon图样预览

二、为每个按钮添加响应事件

接着我们为每个按钮添加响应事件,因为我的四个按钮刚好都到一个固定页面,所以响应事件实现页面的跳转即可。

绑定按钮的事件函数:

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
        let handledShortCutItem = handleShortCutItem(shortcutItem: shortcutItem)
        completionHandler(handledShortCutItem)
    }
复制代码

函数的具体代码:

func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool {
    var handled = false

    if shortcutItem.type == "1" { //首页

        let rootNavigationViewController = window!.rootViewController as? UINavigationController
        let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController?

        rootNavigationViewController?.popToRootViewController(animated: false)
        handled = true

    }
    if shortcutItem.type == "2" { //编辑

        let rootNavigationViewController = window!.rootViewController as? UINavigationController
        let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController?

        rootNavigationViewController?.popToRootViewController(animated: false)
        rootViewController?.performSegue(withIdentifier: "toArchive", sender: nil)
        handled = true

    }

    if shortcutItem.type == "3" { //设置

        let rootNavigationViewController = window!.rootViewController as? UINavigationController
        let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController?

        rootNavigationViewController?.popToRootViewController(animated: false)
        rootViewController?.performSegue(withIdentifier: "toSetting", sender: nil)
        handled = true

    }

    if shortcutItem.type == "4" { //编辑

        let rootNavigationViewController = window!.rootViewController as? UINavigationController
        let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController?

        rootNavigationViewController?.popToRootViewController(animated: false)
        rootViewController?.performSegue(withIdentifier: "addTodo", sender: nil)
        handled = true

    }

    return handled
}
复制代码

这里我用到了performSegue,所以在Main.storyboard中会给每个跳转绑定ID。

后续将补充介绍如何自定义icon、如何在页面内实现3D Touch,欢迎关注OneSwift的后续更新。

GitHub:OneSwift – iOS Tips Based On Swift

微博:xDEHANG

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101675.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【知识图谱】知识推理[通俗易懂]

    【知识图谱】知识推理[通俗易懂]文章目录一、本体知识推理简介1、OWL本体语言(1)OWL本体语言概述(2)描述逻辑一、本体知识推理简介1、OWL本体语言(1)OWL本体语言概述OWL的特性:OWL本体语言是知识图谱中最规范(W3C制定)、最严谨(采用描述逻辑)、表达能力最强(是一阶谓词逻辑的子集)的语言;它基于RDF语法,使表示出来的文档具有语义理解的结构基础。促进了统一词汇表的使用,定义了丰富的语义词汇。允…

    2022年6月11日
    28
  • webpack的devtool[通俗易懂]

    webpack的devtool[通俗易懂]这里以环境分类为分析方向1.对开发环境eval-每个模块都使用eval()执行,并且都有//@sourceURL。此选项会非常快地构建。主要缺点是,由于会映射到转换后的代码,而不是映射到原始代码(没有从loader中获取sourcemap),所以不能正确的显示行数。eval-source-map-每个模块使用eval()执行,并且sourcem…

    2022年10月5日
    2
  • Unity虚拟相机Cinemachine教程[通俗易懂]

    Unity虚拟相机Cinemachine教程[通俗易懂]准备在PackageManager中安装Cinemachine包。1.CinemachineBrain组件相当于虚拟相机的总管理。参数介绍:LiveCamera:当前显示的相机LiveBlend:过度相机时显示进度ShowDebugText:在Game视窗里显示当前使用的相机ShowCameraFrustum:显示视锥IgnoreTimeScale:是否受TimeScale影响WorldUpOverride:自己设置覆盖Y轴防止万向节死锁。UpdateMeth

    2022年5月28日
    215
  • 两个元素的矩阵乘除法「建议收藏」

    矩阵的乘除法: 1 矩阵相乘,两个矩阵只有当左边的矩阵的列数等于右边矩阵的行数时,两个矩阵才可以进行矩阵的乘法运算 主要方法就是:用左边矩阵的第一行,逐个乘以右边矩阵的列,第一行与第一列各个元素的乘积相加,第一行与第二列的各个元素的乘积相加。。。。第二行也是,逐个乘以右边矩阵的列。。。。第三行。。。。。。。最后得出结果不明白的可以继续往下看   2…

    2022年4月4日
    65
  • 微型计算机原理与接口技术网课_微型计算机原理与接口技术周荷琴

    微型计算机原理与接口技术网课_微型计算机原理与接口技术周荷琴微型计算机组成原理课程内容介绍第一章微型计算机基础第二章80X80微型处理器第三章汇编语言指令集第四章汇编语言程序设计第五章输入/输出系统第六章中断系统第七章微型计算机系统串行通讯第八章并行I/O接口第九章可编程定时/计数器课程意义汇编语言接口技术学习目标本笔记的视频,源自中国大学MOOC,南京邮电大学的微型计算机原理与接口技术。课程内容介绍第一章微型计算机基础这一章将…

    2022年10月2日
    2
  • 虚拟现实开发一些建议怎么写_虚拟现实开发引擎

    虚拟现实开发一些建议怎么写_虚拟现实开发引擎本文章由cartzhang编写,转载请注明出处。所有权利保留。文章链接:作者:cartzhang【本文为原作者对虚拟现实开发的一些建议和理解,写的非常不错。理解的也非常透彻,希望对各位在路上的VR开发者有积极作用。】下面是我对虚拟现实开发一下建议。我已经把他们分为Vive相关,常规VR和更宽泛意义上的建议。更多建议请关注我的Twitter。一、Vive相关1.让玩家按下按键

    2025年11月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号