iOS 为 App 添加 3D Touch 快捷访问菜单

iOS 为 App 图标添加 3D Touch 快捷访问菜单,Demo 地址:   github.com/EyreFree/EF…


1. 注意事项

3D Touch 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持该功能; 3D Touch 只在 iPhone 6s 及以后型号的 iPhone 或 iPad Pro 上可用,更早的设备并不支持该功能。 具体可通过如下代码进行判断:

if self.traitCollection.forceTouchCapability == UIForceTouchCapability.available {
    print("支持 3D Touch")
} else {
    print("不支持 3D Touch")
}
复制代码

2. 添加按钮

右键点击工程中的 info.plist 文件选择打开方式为 Source Code:

在其中填写如下代码:

<key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeShuffle</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>3D Touch 测试按钮</string>
        <key>UIApplicationShortcutItemType</key>
        <string>0</string>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeLove</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>出来吧,小火龙!</string>
        <key>UIApplicationShortcutItemType</key>
        <string>1</string>
    </dict>
</array>
复制代码

各参数意义如下:

1. (Required) UIApplicationShortcutItemTitle
按钮标题

2. (Required) UIApplicationShortcutItemType
设置标签 icon 类型,当用户调用相应的 Quick Action 的时候,会将该字符串传递给你 App

3. (Optional) UIApplicationShortcutItemSubtitle
按钮副标题,显示在按钮标题下面的小文字

4. (Optional) UIApplicationShortcutItemIconType
设置按钮图片为系统图标,更多图标可以参见:https://developer.xamarin.com/api/type/UIKit.UIApplicationShortcutIconType/

5. (Optional) UIApplicationShortcutItemUserInfo
该值用来提供 App 的版本信息

6. (Optional) UIApplicationShortcutItemIconFile 
指定 App Bundle 中的文件图片或者是在 Asset Catalog 里面的文件名。注意 icon 应是正方形的,单一的颜色。如果你指定了这个值,系统便会忽略掉对 UIApplicationShortcutItemIconType 的设置,因为这两个值是冲突的,而且开发者自己指定的图片优先级比系统图标更高。
复制代码

这段代码添加了两个 3D Touch 按钮,“3D Touch 测试按钮”和“3D 出来吧,小火龙!”。

值得一提的是,实际的按钮显示时和 info.plist 中定义的顺序是反的。

3. 添加功能代码

打开 AppDelegate.swift 在其中添加如下代码,这段代码对点击按钮操作进行了处理,点击按钮后会进入 App 弹出一个显示按钮名称的对话框:

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {

    var sourceButtonTitle: String?

    //根据按钮标题进行进一步操作
    switch shortcutItem.localizedTitle {
    case "3D Touch 测试按钮":
        sourceButtonTitle = "来源按钮:3D Touch 测试按钮"
        break
    case "出来吧,小火龙!":
        sourceButtonTitle = "来源按钮:出来吧,小火龙!"
        break
    default:
        break
    }

    //测试操作:弹出一个对话框显示来源按钮
    if let trySourceButtonTitle = sourceButtonTitle {
        let alert = UIAlertController(title: nil, message: trySourceButtonTitle, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "知道啦", style: .cancel, handler: nil))
        self.window?.rootViewController?.present(alert, animated: true, completion: nil)
    }
}
复制代码

我们可以在这里添加代码从而实现根据不同来源按钮而执行不同的操作,结果如图所示:

4. 其他

  1. 需要注意的是,快捷启动按钮最多只能添加 4 个;
  2. 最新的 iOS 10 系统会给所有的 App 额外添加一个 3D Touch 分享按钮,点击后不打开 App 而是调用系统分享该应用的 App Store 下载地址;
  3. 自定义图标的官方模版下载地址:developer.apple.com/design/down…,尺寸为:
NoSizePS
170x702x
2104 x 1043x

5. 参考

Check if 3D touch is supported and enabled on the iOS9 device


如有任何知识产权、版权问题或理论错误,还请指正。
https://juejin.im/post/5a3214866fb9a0450c496ce0
转载请注明原作者及以上信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值