SwiftCafe 快报 - 3D Touch 实践之桌面快捷方
上一期我们介绍了如何用静态方式创建 3D Touch 桌面快捷菜单,这一期咱们继续上一期的话题,一起研究下如何用动态的方式创建 3D Touch 桌面快捷菜单。
如果需要查看上一期内容,请看这里
http://www.jianshu.com/p/5f951369f241
前面我们介绍了,创建静态菜单项,需要在 Info.plist
中设置相应的内容。创建动态菜单我们在 AppDelegate
的 application(application:, didFinishLaunchingWithOptions:)
方法中,这样写即可:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItems = application.shortcutItems where shortcutItems.isEmpty {
let shortcut = UIMutableApplicationShortcutItem(type: "com.xxx.xxx2", localizedTitle: "Play", localizedSubtitle: "Play an item", icon: UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Play), userInfo: nil)
application.shortcutItems = [shortcut]
}
// ...
return true
}
很简单,我们创建了 UIMutableApplicationShortcutItem
类的实例,然后将它赋值给 UIApplication
的 shortcutItems
属性。
然后我们回到桌面,按压 APP 图标,即可看到我们刚刚用动态方式创建的菜单项了:
快捷菜单动态快捷菜单项创建好之后,我们也要处理它的响应事件,处理动态菜单项的方式和静态菜单项一样, 在应用已经在启动并切换到后台的状态下,通过 `application(application: , performActionForShortcutItem:, completionHandler:) 方法来处理:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
if shortcutItem.type == "com.xxx.xxx2" {
//do something...
}
}
在应用还没有启动的状态下,通过 application(application:, didFinishLaunchingWithOptions:)
方法来处理:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
if shortcutItem.type == "com.xxx.xxx2" {
//do something...
}
}
}
无论是静态快捷菜单,还是动态快捷菜单,每个应用,最多只能够一次显示 4 个快捷菜单项。静态菜单项会优先于动态菜单项显示。
比如我们已经在 Info.plist
中设置了 4 个静态菜单项,那么即使我们又添加了新的动态菜单项,这些动态菜单也不能显示出来。
另外,动态菜单项要再应用启动一次之后,才能显示出来,因为启动一次后,菜单项才能被添加上。
关于 3D-Touch
快捷菜单交互的内容,通过这两期快报给大家做了一个大致的介绍,希望能对大家在实际应用中有所参考。
更多精彩内容可关注微信公众号:
swift-cafe