大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

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

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


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:


以 Source Code 方式打开 info.plist

在其中填写如下代码:

<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 的设置,因为这两个值是冲突的,而且开发者自己指定的图片优先级比系统图标更高。

在 info.plist 添加按钮代码

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


成功添加 3D Touch 按钮

值得一提的是,实际的按钮显示时和 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)
    }
}

在 AppDelegate.swift 添加功能代码

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


操作结果

4. 其他

  1. 需要注意的是,快捷启动按钮最多只能添加 4 个;
  2. 最新的 iOS 10 系统会给所有的 App 额外添加一个 3D Touch 分享按钮,点击后不打开 App 而是调用系统分享该应用的 App Store 下载地址;
  3. 自定义图标的官方模版下载地址:https://developer.apple.com/design/downloads/Quick-Action-Guides.zip,尺寸为:
No Size PS
1 70x70 2x
2 104 x 104 3x

5. 参考

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


本文链接:http://www.jianshu.com/p/28cb171fc667