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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu 64位 16.04 Minnet安装及测试,可视化工具调试,抓包工具wireshark安装及测试

    Ubuntu 64位 16.04 Minnet安装及测试,可视化工具调试,抓包工具wireshark安装及测试

    2021年10月6日
    66
  • mina框架是什么意思(个人年度总结框架)

    参考:http://xinsync.xju.edu.cn/index.php/archives/category/prglang/java/mina简单介绍:MINA框架是对java的NIO包的一个封装,简化了NIO程序开发的难度,封装了很多底层的细节,然开发者把精力集中到业务逻辑上来,最近做了一个相关的项目,为了备忘对MINA做一个总结。下面这个start方法用来初始化MINA:priv…

    2022年4月16日
    50
  • 【SPSS统计分析】SPSS聚类分析:一个案例演示聚类分析全过程(附SPSS 19.0中文版下载)「建议收藏」

    【SPSS统计分析】SPSS聚类分析:一个案例演示聚类分析全过程(附SPSS 19.0中文版下载)「建议收藏」摘要:案例数据源:有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSSforWindows统计分析》。目录问题一:选择那些变量进行聚类?——采用“R型聚类”问题二:20中啤酒能分为几类?——采用“Q型聚类”问题三:用于聚类的变量对聚类过程、结果又贡献么,有用么?——采用“单因素方差分析”问题四:聚类结果的解释?——采用”均值比较描述统计“问题一:选择那些变量进行聚类?——采用“R型聚类”1、现在我们…

    2022年10月18日
    7
  • 0xc0000225无法进系统_U盘装win10后无法进系统错误代码0xc0000225怎么修复「建议收藏」

    0xc0000225无法进系统_U盘装win10后无法进系统错误代码0xc0000225怎么修复「建议收藏」win10系统的安装方式有多种,当我们使用的win10系统出现故障时,最常见的解决方法就是使用U盘装win10来修复,可是最近有用户在用U盘装win10后无法进系统出现错误代码0xc0000225现象,那么又该如何解决这一问题呢?下面就来教大家解决U盘装win10后无法进系统错误代码0xc0000225的修复方法。故障提示:File:\Windwows\system32\winload.efiEr…

    2022年6月26日
    33
  • STM32CubeMX介绍、下载与安装

    STM32CubeMX介绍、下载与安装推荐分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang本教程今年更新了部分内容:STM32CubeMX系列教程Ⅰ、写在前面相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年…

    2022年6月12日
    44
  • 用html编写或在dw中完成,Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码[通俗易懂]

    用html编写或在dw中完成,Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码[通俗易懂]Dreamweaver教程-在Dreamweaver中编写HTML代码,代码,教程,标签,光标,文本Dreamweaver教程-在Dreamweaver中编写HTML代码易采站长站,站长之家为您整理了Dreamweaver教程-在Dreamweaver中编写HTML代码的相关内容。1.启动DreamweaverCS52.点击左上角的“文件”>“新建”。3.在“新…

    2022年5月2日
    46

发表回复

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

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