Skip to content

Instantly share code, notes, and snippets.

@swiftcafex
Last active October 13, 2015 09:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swiftcafex/40278bd24d39365f575a to your computer and use it in GitHub Desktop.
Save swiftcafex/40278bd24d39365f575a to your computer and use it in GitHub Desktop.
SwiftCafe 快报 - 3D Touch 实践之桌面快捷方式

`3D Touch 快捷方式

说到 3D-Touch 无疑是这次 iPhone 6s 发布的最主要亮点,究竟这项技术是鸡肋还是革新,自然见仁见智。不过,它的确给了我们一个新的交互维度,只是还需要等待第三方应用们来发挥它的特性。

想想触摸屏从单点触摸到多点触摸吧,交互方式的改变,定会给我们全新的思维角度。

今天给大家介绍一下如何为应用在桌面上的快捷图标添加 3D Touch 交互 - 长按桌面图标调出快捷启动菜单。

快捷启动菜单分为两种,静态动态

静态快捷方式

所谓静态快捷方式,就是在应用安装前预先设置好的不能够改变的菜单项,它的设置方式是在 Info.plist 里面添加一个 UIApplicationShortcutItems 字段,如下图:

Info.plist 声明 3D Touch 快捷菜单

UIApplicationShortcutItems 为数组类型,里面的每一个数组项代表快捷菜单上面的一个菜单项。每一个菜单项都有下面几个属性。

  • (必须)UIApplicationShortcutItemType:这个选项表示这个菜单项的唯一标识,用于在处理菜单项事件的时候区分点击的是哪一个选项。命名建议使用 com.xxx.xxx 的包名形式。
  • (必须)UIApplicationShortcutItemTitle:这个选项表示菜单项显示的标题,也是必须填写,如下图:

菜单项标题

  • (可选)UIApplicationShortcutItemSubtitle:这个表示菜单项的子标题,如图所示:

菜单项子标题

  • (可选)UIApplicationShortcutItemIconType:这个属性表示菜单的图标,它接受的是一个枚举值,这个枚举值表示了一系列系统预定义的图标,就像图中的箭头所指的这个:

菜单项图标

  • (可选)UIApplicationShortcutItemIconFile:这个属性表示菜单图标的文件名,和 ** UIApplicationShortcutItemIconType** 相对应,这个属性可以让你指定自己的文件作为菜单图标,更加灵活。

  • (可选)UIApplicationShortcutItemUserInfo:这个代表了菜单项点击后,传入的用户信息,也是可选的。

我们在 Info.plist 中定义好快捷菜单后,就可以在支持 3D Touch 的设备上,按压桌面的应用图标来调出快捷菜单了。

接收快捷菜单启动

现在,我们能够正常的弹出快捷菜单了,接下来我们就需要相应快捷菜单的事件了。

快捷菜单事件一共有两个入口,如果应用已经在后台打开,就会调用 appDelegateapplication(_:performActionForShortcutItem:completionHandler:) 方法。会传入一个 UIApplicationShortcutItem 类型的参数,代表我们点击的快捷菜单。

处理这种情况下的菜单响应,我们只需要这样:

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
        
        if shortcutItem.type == "com.xxx.xxx" {
            
            //do something...
            
        }
        
    }

像上面的代码那样,我们只需要区分出菜单的 type 属性,确定了我们点击的是哪个菜单后,进行响应的操作处理即可。

还有一个入口,就是在我们应用第一次被打开的时候,快捷菜单对象,会通过 application(_:, didFinishLaunchingWithOptions:) 方法传入,我们需要检测一下传入的信息,如果能够找到 UIApplicationShortcutItem 对象,我们就进行针对性的处理:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        
        if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
            
            if shortcutItem.type == "com.xxx.xxx" {
                
                //do something...
                
            }
            
        }
        
        // ...
        
        return true
    }

我们对 launchOptions 数组,进行了一个判断,如果能够取到 UIApplicationShortcutItem 的实例,我们就进行处理。

现在,我们已经完成了静态快捷菜单的创建,现在咱们的 APP 就可以支持 3D Touch 桌面快捷菜单啦,充满探索心的你还不快来试试?

下期我们将继续介绍如何创建动态的桌面快捷菜单,期待吧~

更多精彩内容可关注微信公众号: swift-cafe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment